Error 450, “Wrong number of arguments or invalid property assignment”, covers two distinct faults sharing one number. The first is a call whose argument count matches no valid form of the procedure: too many, or too few in a way error 449 does not claim. The second is a property assignment made with the wrong mechanism: assigning a value to a property that needs Set, an object to one that needs Let, or assigning to a property through the wrong member entirely. Read the failing statement and ask which of the two it is; the fixes have nothing in common.
Dim c As Collection ' c = New Collection ' invalid assignment: object needs Set Set c = New Collection ' correct ' name = obj.Name ' value property: Let (implicit) is correct
Foo (x) with a space evaluates x as an expression argument; Foo(x) as a Sub call is a syntax problem, and as a Function misused can surface as 450. Write calls deliberately: Call keyword, or no parentheses for Subs.If the count and the assignment form both look right, the callee being resolved may not be the one on screen: same-named procedures in different modules, or a property on a base interface shadowing the intended one. Qualify the name fully and use the Object Browser to confirm which definition the project binds.
Why does one error number cover two faults? Because both are call-shape errors detected by the same part of the runtime: the machinery that matches a call or assignment against a member's signature. The message honestly lists both possibilities; the statement tells you which occurred.
Can too many arguments really be worse than too few? Both are rejected. VBA has no mechanism to ignore extra arguments; a call must match a declared signature, with Optional parameters and ParamArray providing the only flexibility.