从 MS Access 中的表单调用公共子
Posted
技术标签:
【中文标题】从 MS Access 中的表单调用公共子【英文标题】:Calling a Public Sub from a form in MS Access 【发布时间】:2009-08-20 15:01:04 【问题描述】:非常简单的问题:我有一个公共子(在模块中),我想从表单上的按钮调用它。我想从模块中调用的函数的名称是 GenerateKML。
我读过这篇文章:
How do I call a VBA Function into a Sub Procedure
并尝试了所有建议的方法,但没有一个对我有用。我的代码可能有问题,但是当我在代码视图中(编辑模块)并按下“播放”按钮时,代码可以正常运行(创建了一个 KML 文件)。
如果我使用建议的第二种方法(从表单调用模块中的子例程),我会收到以下错误消息:
编译错误
预期的变量或过程,而不是模块
如果我使用第三种方法(从表单调用子例程而不使用事件过程),我会得到:
您作为事件属性输入的 On Click 表达式...:您输入的表达式具有 [my DB name] 找不到的函数名称。
所以我怀疑我调用要运行的代码的方式有问题。
我的模块的代码是这样开始的:
Option Compare Database
Public Sub GenerateKML()
'
' GenerateKML Macro
' Macro recorded 26/09/2006 by simon_a
' Adapted and imported to Access by SAA
' 03 aug 2007 - v3.0 - 2007 08 06 19 24
'
' DECLARE VARIABLES
Dim filename As String
Dim docname As String
【问题讨论】:
【参考方案1】:也许您已将代码模块命名为与其中的过程相同。 (只是一个想法)
即子 GenerateKML,位于您命名为 GenerateKML 的模块中。这会产生冲突并导致错误消息。
【讨论】:
非常感谢 Lil'Monkey - 成功了。【参考方案2】:如果您已将模块命名为 GenerateKML 以及您的子模块,则需要使用以下方法调用它:
GenerateKML.GenerateKML arguments
(或者只是重命名一个或另一个,这可能更容易)
【讨论】:
【参考方案3】:尝试使用 mod 前缀重命名您的模块:modGenerateKML。 您不会从表单中引用模块名称,只是您的公共子或函数的名称。
【讨论】:
以上是关于从 MS Access 中的表单调用公共子的主要内容,如果未能解决你的问题,请参考以下文章