Excel打开时WorkbookOpen_CopyandReplace宏无法自动运行,手动执行正常
工作簿打开时VBA宏无法自动执行的解决方法
此前打开Excel文件时,系统会自动从指定关闭工作簿中复制名为"SEEBREZ IMS.1"的工作表至当前工作簿,并删除原有同名工作表。但现在打开文件时,对应的VBA代码无法自动执行,手动运行该代码则可正常完成操作。
提供的VBA代码:
Sub WorkbookOpen_CopyandReplace() 'It will check to see if there is a worksheet wit the same name and delete it 'On Error GoTo 0 then excutes the next line of code that will allow us to enter in a workbook, with it being closed, and copy that worksheet in this workbook Application.ScreenUpdating = False On Error Resume Next ThisWorkbook.Sheets("SEEBREZ IMS.1").Delete On Error GoTo 0 Set closedBook = Workbooks.Open("P:\62001-5 IN PROCESS\DDE 62001-5\62001-5 4141-84 SEEBREZ SEAT_IMS.xls") closedBook.Sheets("SEEBREZ IMS.1").Copy Before:=ThisWorkbook.Sheets("IMS.1") closedBook.Close SaveChanges:=False Application.ScreenUpdating = True End Sub
问题原因
Excel工作簿打开时自动触发的事件过程必须使用固定名称Workbook_Open,你当前的宏命名为WorkbookOpen_CopyandReplace,属于自定义宏,不会被系统自动识别为打开事件触发的代码,因此打开文件时不会自动运行,但手动执行可正常生效。
解决方案
方法一:将宏改为标准打开事件过程
- 按
Alt + F11打开VBA编辑器 - 在左侧工程窗口中找到当前工作簿的
ThisWorkbook模块,双击打开 - 将原有代码替换为以下内容(保留核心逻辑,改用标准事件名称):
Private Sub Workbook_Open() Application.ScreenUpdating = False ' 删除现有同名工作表 On Error Resume Next ThisWorkbook.Sheets("SEEBREZ IMS.1").Delete On Error GoTo 0 ' 打开目标工作簿并复制工作表 Dim closedBook As Workbook Set closedBook = Workbooks.Open("P:\62001-5 IN PROCESS\DDE 62001-5\62001-5 4141-84 SEEBREZ SEAT_IMS.xls") closedBook.Sheets("SEEBREZ IMS.1").Copy Before:=ThisWorkbook.Sheets("IMS.1") closedBook.Close SaveChanges:=False Application.ScreenUpdating = True End Sub
- 保存工作簿,关闭后重新打开,代码会自动执行
方法二:保留原宏,通过打开事件调用
如果不想修改原宏名称,可在ThisWorkbook模块中添加以下代码,让打开事件触发原宏:
Private Sub Workbook_Open() Call WorkbookOpen_CopyandReplace End Sub
额外注意事项
- 确保工作簿打开时已启用宏:若弹出宏禁用提示,需选择启用,否则代码无法运行
- 确认目标文件路径未变更:虽然手动运行正常,但仍需保证
P:\62001-5 IN PROCESS\DDE 62001-5\62001-5 4141-84 SEEBREZ SEAT_IMS.xls的路径和文件名未修改 - 恢复事件触发:若之前关闭过Excel事件,可在VBA编辑器执行
Application.EnableEvents = True恢复事件功能
内容的提问来源于stack exchange,提问作者Lizette Martinez
相关产品推荐
相关产品推荐

