如何将32位Access的VBA代码转换为可在64位Access运行?
Access表单打印/复制按钮错误排查方案
相关API声明
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _ (ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _ (ByVal lpPrevWndFunc As Long, _ ByVal hwnd As Long, _ ByVal msg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long
问题描述
我在Access中创建了一个表单,怀疑是打印和复制按钮引发了错误,但不确定该尝试什么解决方法。
排查与解决步骤
- 隔离按钮代码:暂时移除打印、复制按钮的事件代码,测试表单是否还报错。如果不再报错,再逐行恢复代码定位问题行。
- 检查API调用合法性:如果按钮代码中用到了上述API,确认
hwnd参数是否正确获取(比如表单的hWnd属性),nIndex、msg等参数是否符合Windows API规范,避免参数类型不匹配。 - 验证打印/复制逻辑:
- 打印按钮:确认打印对象(报表、表单)是否存在,打印设置是否正确,可尝试直接调用
DoCmd.PrintOut基础命令测试。 - 复制按钮:检查复制的数据源是否有效(比如控件是否有值、记录集是否打开),可先用
Clipboard.SetText简单语句测试剪贴板功能。
- 打印按钮:确认打印对象(报表、表单)是否存在,打印设置是否正确,可尝试直接调用
- 启用错误捕获:在按钮事件代码开头添加
On Error GoTo ErrorHandler,并在末尾添加错误处理段,获取具体错误编号和描述,精准定位问题。 - 检查Access版本兼容性:如果是64位Access,上述API声明需要修改为适配64位的格式(添加
PtrSafe关键字,调整Long为LongPtr),否则会引发运行时错误。
内容的提问来源于stack exchange,提问作者S20ccar
相关产品推荐
相关产品推荐

