调用VBA模块时提示“预期变量或过程,而非模块”问题求助
解决VBA调用自定义错误日志函数时的“预期变量或过程,而非模块”错误
嘿,我帮你捋捋这个问题——你碰到的这个错误,十有八九是模块名和函数名撞了,再加上你的错误处理代码里还有几个小语法问题,咱们一步步搞定:
1. 先解决最核心的重名问题
你把Allen Browne的LogError改成了logAutoErrors,但如果存放这个函数的模块也叫logAutoErrors,VBA就会搞混:它会把模块当成你要调用的对象,而不是里面的函数,直接就报“预期变量或过程,而非模块”了。
怎么改?
- 打开VBA编辑器,找到装
logAutoErrors函数的那个模块 - 按F4调出属性窗口,把模块名改成比如
modErrorHandling(随便起个和函数名不一样的就行) - 保存模块,然后按Ctrl+G打开立即窗口,输入
Compile编译一下项目,确保没有编译错误
2. 修正错误处理流程里的语法bug
你的ImportAttendees_Click过程里有几个小问题,不修复的话就算重名问题解决了,代码也跑不对:
- 多了个
ErrorHandler:标签,和你定义的ImportAttendees_Click_Err冲突了 - 你用了
Resume Exit_ImportAttendees_Click,但根本没定义这个标签 - 末尾莫名其妙多了个
End Select,连对应的Select Case都没有,这会直接导致编译失败
给你改好的代码:
Private Sub ImportAttendees_Click() On Error GoTo ImportAttendees_Click_Err Dim SelectedFile As String Dim FilePicker As FileDialog Dim SQLdelete As String Set FilePicker = Application.FileDialog(msoFileDialogFilePicker) FilePicker.AllowMultiSelect = False FilePicker.Filters.Add "Excel", "*.xls*", 1 FilePicker.InitialFileName = "C:\Users\" FilePicker.Title = "Select New Attendee List Location..." FilePicker.Show If FilePicker.SelectedItems.Count <> 0 Then SelectedFile = FilePicker.SelectedItems(1) DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "tbl_STG_AttendeeImport", SelectedFile, True MsgBox prompt:="Data Staged - Ready For Import", buttons:=vbInformation, Title:="Data Loaded" End If Me.Refresh ' 定义退出标签,对应后面的Resume语句 Exit_ImportAttendees_Click: Exit Sub ' 错误处理的入口标签 ImportAttendees_Click_Err: MsgBox prompt:="E-Link encountered an error when processing the last action. E-Link has cancelled the last action and the error has been logged with the system administrator", buttons:=vbInformation, Title:="Database Process Error" ' 现在调用函数就不会报错了 Call logAutoErrors(Err.Number, Err.Description, "ImportAttendees_Click()") Resume Exit_ImportAttendees_Click End Sub
3. 最后检查错误日志表的兼容性
确保你的tbl_ADM_ErrorLog表结构和函数里的字段对应上:
ErrNumber:数字类型(用来存错误编号)ErrDescription:文本类型,长度至少设255(函数里用了Left$(strErrDescription, 255))ErrDate:日期/时间类型CallingProc:文本类型(存出错的过程名)UserID:和你的TempVars!AUID类型匹配,比如文本或数字Parameters:可选文本类型,长度255就行
另外别忘了确认TempVars!AUID在调用这个函数之前已经被正确赋值了,不然可能会在写日志的时候出空值错误。
现在你再测试一下,比如故意搞个错误(比如选个格式不对的Excel文件),应该就能正常弹出提示,同时错误信息也会写到你的日志表里,流程也会正确终止啦。
内容的提问来源于stack exchange,提问作者Castiel
相关产品推荐
相关产品推荐

