ms-access弹出菜单项:格式/功能或子程序/传递参数

时间:2012-03-06 08:22:46

标签: ms-access vba popupmenu

在MS Access表单中,我有一个有效的弹出菜单,但我想知道如何以不同的方式设置它。

弹出菜单定义:

With CommandBars.Add("TreeNodeActions", msoBarPopup, False)
    With .Controls.Add(msoControlButton)
        .caption = "Copy"
        .OnAction = "=CopyNode()"
    End With
End With

问题1 :为什么需要等号和空参数列表(如果没有它们,事情就不起作用)?为什么不只是.OnAction = "copyNode",正如在这个论坛的其他主题中所建议的那样?

问题2 :我希望运行一个子程序,但唯一的方法是调用一个调用子程序的函数 - 见下文。如何直接调用子程序?

Private Function CopyNode()
    Call CopyBid
End Function

Private Sub CopyBid()
    Dim nodx As node

    Set nodx = Me.TreeView1.Nodes(Me.nodeKeySelected.Value)
    Me.BidIdToBeCopied = nodx.Tag
End Sub

问题3 :弹出菜单位于树视图控件上;我希望将所选节点传递给子例程,这样我就不必将节点密钥存储在窗体上(在树视图上单击鼠标)并在上面的子窗口中使用它。我希望能够拥有以下内容。如何在命令栏控件中定义的菜单项传递参数?

Private Sub CopyBid(nodx As node)
    Me.BidIdToBeCopied = nodx.Tag
End Sub

1 个答案:

答案 0 :(得分:0)

进一步研究自己。没有定论,但我得到了这个:
Q1 :找不到文档,这只是ms-access vba onAction属性中的语法就是这样的事实。仍然感觉有点奇怪,没有找到解释 - 我会期望像“等号确保随后的函数或过程被调用。最后的括号是多余的,但必须添加为无参数功能“
Q2 :似乎无法做到这一点 - 因此无法重用现有的sub,除非将其更改为函数。奇怪但可能是生活中的事实。也没有找到这方面的文件。
Q3 :传递参数不像看起来那么容易 - 强制性括号表明只需在onAction规范中为具有参数的函数提供变量。这并不是那么简单,可能是因为onAction规范是一个字符串,它触发搜索已知函数名而不考虑参数。提供我能够找到的参数的一种方法(最后一些有用的信息!)可以在calling a function and passing arguments with .onaction中找到。感觉就像一个肮脏的工作对我来说,所以我仍然想知道是否有更好的解决方案。我还没有测试过这个“解决方案”......