Ms access 从MS Access中的窗体调用公共Sub

Ms access 从MS Access中的窗体调用公共Sub,ms-access,Ms Access,非常简单的问题:我有一个公共子模块(在模块中),我想从表单上的按钮调用它。我想从模块中调用的函数名是GenerateKML 我读过这篇文章: 并尝试了所有建议的方法,但没有一种对我有效。我的代码可能有问题,但当我在代码视图中(编辑模块)并按下“播放”按钮时,代码会正常运行(创建KML文件) 如果使用建议的第二种方法(从窗体调用模块中的子例程),则会收到以下错误消息: 编译错误 预期的变量或过程,而不是模块 如果我使用第三种方法(从窗体调用子例程而不使用事件过程),我会得到以下结果: 单击时输入

非常简单的问题:我有一个公共子模块(在模块中),我想从表单上的按钮调用它。我想从模块中调用的函数名是GenerateKML

我读过这篇文章:

并尝试了所有建议的方法,但没有一种对我有效。我的代码可能有问题,但当我在代码视图中(编辑模块)并按下“播放”按钮时,代码会正常运行(创建KML文件)

如果使用建议的第二种方法(从窗体调用模块中的子例程),则会收到以下错误消息:

编译错误

预期的变量或过程,而不是模块

如果我使用第三种方法(从窗体调用子例程而不使用事件过程),我会得到以下结果:

单击时输入的表达式作为事件属性…:输入的表达式具有[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

也许您已经将代码模块命名为与其中的过程相同的名称。 (只是一个想法)


i、 e.子GenerateKML位于名为GenerateKML的模块中。这将创建一条冲突和产生的错误消息。

如果您已将模块GenerateKML以及子模块命名为GenerateKML,则需要使用以下方法调用它:

GenerateKML.GenerateKML arguments

(或者只是重命名其中一个,这可能更容易)

尝试使用mod前缀重命名模块:modGenerateKML。
您不需要引用表单中的模块名称,只需引用公共子模块或函数的名称。

非常感谢Lil'Monkey,这样做了。