Error 440, “Automation error”, is VBA's least informative message: a call into an external (COM/Automation) object failed, and the object did not map its failure onto a specific VBA error. The number is a wrapper, not a diagnosis; the real information is in the component that returned it, in Err.Description beyond the generic words when the component provides it, and in that component's own documentation and logs. Treating 440 as a single error is the mistake; it is a category of other programs' errors wearing one coat.
Err.Number says 440, but Err.Description frequently carries the component's own text after the generic phrase, and Err.Source names the component. Log all three, always.On Error GoTo Fail
Set res = engine.Run(jobSpec)
' ...
Fail:
LogError Err.Number, Err.Source, Err.Description
' For 440, Source and the tail of Description ARE the error.
If a call fails with 440 in production but works in testing, compare the component versions and the security context (user account, elevation, session) between the two. Automation components frequently refuse calls from contexts they were not installed or licensed for, and report the refusal as a bare 440.
Why does error 440 have no useful message? Because the failure originated outside VBA, in a component that returned a generic failure code. VBA can only report that the Automation call failed; the detail belongs to the component, which is why Err.Source and the description text matter.
Is error 440 the same as error 429 or 430? No. 429: the object could not be created. 430: the object does not support Automation. 440: the object was created and called, and the call itself failed inside the component.