2012-03-06 79 views
0

在MS Access窗体中,我有一个工作弹出菜单,但我想知道如何以不同的方式进行设置。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 

回答

0

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