我在Access表单中有一个公共函数
Public Function PopupProcess() as long
MsgBox Me.ActiveControl
PopupProcess = 1
End Function
当我打电话
eval("forms('MyForm').popupprocess")
它显示一个消息框2次。有人知道为什么会这样吗?
我使用SP3访问Access 2003。
编辑:主要思想是从该表单调用自定义命令栏控件OnAction的函数。 也许你有更好的方法从命令栏控件的表单调用函数。
答案 0 :(得分:8)
这是一个非常长期存在的错误,自访问97天以来一直存在(大约4-5个访问版本)。
这里的解决方案是永远不要使用表格限定符,只需将以下内容放在你的行动事件中,你就可以了。
=PopUpProcess()
请注意,您必须在其前面加上=,并且后缀必须包含方括号()
请记住,您可以实际使用行为。运行的函数将来自当前焦点在屏幕上的表单。这意味着您可以使用具有相同名称的函数的不同表单,无论哪个表单具有焦点,具有该名称的函数都将从该表单代码模块运行。
更好的是,如果其中一个表单在表单代码模块中没有公共功能,则使用标准代码模块中的函数。所以你可能有九种形式,它们都使用主标准代码模块中的标准一种功能。但是,第10个表单可能需要运行特殊代码,因此您只需将该函数代码放在表单的代码模块中作为公共代码,它将代替标准代码模块中的public运行。
此方法允许您构建一个适用于许多不同表单的自定义菜单栏,但这些表单将从该自定义菜单栏运行不同的代码。这也鼓励您将菜单代码放在它所属的表单中。
因此,要解决您的问题,只需不要使用表单的限定符,并使用上述格式。
请注意,您也可以从这些函数传递参数,例如
=PopUpProcess(‘hello’)
然后将该函数声明为:
Public Function PopUpProcess(strParm as string)
请记住,当您在功能区中使用on动作进行访问2007时,上面所述的功能和语法以及所有内容也适用。
答案 1 :(得分:1)
不知道。如果你这样称呼会怎么样?
Call Forms("MyForm").PopupProcess
尝试使用CallByName函数而不是eval来调用您的函数。它应该只触发你的函数一次,它仍然允许你参数化表单名称和函数或子名称:
CallByName Forms("MyForm"), "PopupProcess", VbMethod