编译错误子或未定义函数

Posted

技术标签:

【中文标题】编译错误子或未定义函数【英文标题】:Compile Error Sub or Function not defined 【发布时间】:2019-03-11 16:46:05 【问题描述】:

我已经为这个问题苦苦挣扎了一段时间。这是我对***的第一个问题。我正在开发一个 Access 报表,它使用对话框表单让用户输入要在报表上显示的特定客户端。我已经能够打印出报告,但如果用户在对话框表单上输入“取消”,我将无法处理。我从另一个 Access 数据库中的现有报告中复制了代码。

这是我的 Report_Open Sub:

Private Sub Report_Open(Cancel As Integer)  
' Set public variable to true to indicate that the report  
' is in the Open even   
   bInReportOpenEvent = True  

 ' Open Appt Query Dialog  
   DoCmd.OpenForm "craid CMM Client Report Dialog", , , , , acDialog  

 ' Cancel Report if User Clicked the Cancel Button    
   If IsLoaded("craid CMM Client Report Dialog") = False Then Cancel = True  

' Set public variable to false to indicate that the    
' Open event is completed    
  bInReportOpenEvent = False  

End Sub

当我运行此程序时,我收到“编译错误:未定义子或函数”突出显示“IsLoaded”一词。我可以注释掉 IsLoaded 代码行,但是如果我在对话框表单上单击“取消”,则会出现错误。

我在之前的问题中看到了此错误,但无法确定满足我需求的解决方案。任何帮助表示赞赏。

劳拉

【问题讨论】:

IsLoaded 不是标准的 VBA 函数。您从其他地方复制了代码,而在其他地方有一个自定义 IsLoaded 函数,您也必须复制它。 另外,请显示触发报告打开的代码。是按钮点击事件吗? 【参考方案1】:

正如 Thomas 在 cmets 中所指出的,IsLoaded 不是标准 VBA 函数,因此编译器将在评估范围内和所有公共模块中搜索名为 IsLoaded 的 Sub 或 Function,并报告错误如果没有找到这样的 Sub 或 Function。

假设您的函数仅返回一个布尔值来确定具有所提供名称的表单是否打开,则函数定义可能如下所示:

Function IsLoaded(strNme As String) As Boolean
    IsLoaded = CurrentProject.AllForms(strNme).IsLoaded
End Function

将上述定义复制到您的报告模块或公共模块应该可以解决您面临的错误。但是,理想情况下,您应该为函数的原始定义获取代码。

【讨论】:

可以在this answer中找到另一种类似的检查方式 我添加了您建议的函数定义并解决了问题。它现在正在干净地编译并处理我的对话框表单中的取消按钮。感谢您的帮助。我查看了整个原始报告,试图找到 IsLoaded 的定义,但一无所获。

以上是关于编译错误子或未定义函数的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript 编译器崩溃:publicMembers 为 null 或未定义

0x800a138f - JavaScript 运行时错误:属性“$”的值为 null 或未定义,不是函数对象

C ++定义类编译错误的函数(Visual Studio)

为啥在尝试定义函数体时会出现此编译器错误?

编译错误 未定义的引用 怎么回事

编译程序集文件时出现问题 - 错误:未定义对“函数名”的引用