Excel VBA CommandBar.OnAction with params is difficult / does not perform as expected

后端 未结 3 967
误落风尘
误落风尘 2021-01-19 01:09

So, I have Googled about and it seems that while making custom Pop up menus, if one wants to pass parameters then this is possible but for me comes with 2 major pro

3条回答
  •  一整个雨季
    2021-01-19 01:36

    The reason there are double calls and no break points is because of the parentheses (“( )”) surrounding the arguments in the .OnAction call:

        .OnAction = BuildProcArgString("MyProc", "A", "B", "C")
    

    Best guess: The parser for .OnAction chokes when these parentheses are used.

    This should work:

        .OnAction = "'BuildProcArgString" & chr(34) & "MyProc" & _
        chr(34) & "," & chr(34) & "A" & chr(34) & "," & chr(34) & _
        "B" & chr(34) & "," & chr(34) &  "C" &  "'"
    

    Other Notes:

    1) Single quotes, after the first double quote and before the last double quote, should be used to encapsulate the entire call.

    2) Chr(34) is the ASCII character for double quotes (“). All data types (ints, longs, strings, etc.), and quoted commas need to be preceeded by a Chr(34). The one exception is the ending sinlge quote (" ' "). Example:

        .OnAction = "'m_Test" & Chr(34) & 100 & Chr(34) & "," & Chr(34) & _
         intVariable & Chr(34) & "," & Chr(34) & "String" & Chr(34) & _
         "," & Chr(34) & stringVariable & "'"
    

    The function called:

        Public Function m_Test(i as Integer, iVar as Integer, s as String, sVar as String)
    

    3) .OnAction does not seem to pass Arrays or Objects. An item in an array can be passed (e.g. .OnAction = "'myTest" & Chr (34) & Args(0) & "'"), but not the entire Array (e.g. .OnAction = "'myTest" & Chr (34) & Args & "'"). Object pointers can be passed (ref: http://www.access-programmers.co.uk/forums/showthread.php?t=225415). But I've had no success in passing pointers to arrays.

    4) The .OnAction used in the original example is not surrounded by quotation marks so the .OnAction call is made when AssignIt() gets called but before the popup menu pops up.

提交回复
热议问题