0

在 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
4

1 回答 1

0

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

于 2012-03-07T08:02:57.970 回答