Excel VBA在macros运行时突然进入devise模式

希望有人帮助我解决这个问题。

我有一个子程序,将我的数据从此工作簿复制到另一个现有工作簿(报表工作簿)。

当我尝试运行代码时,在运行时一旦打开Report Workbook,它就会突然停止,我注意到它进入了devise模式。 因此阻碍了程序的执行。

但是,当我尝试在子例程上放置一个断点并再次继续。 它执行没有问题。 这似乎有点奇怪。

试图弄清楚这一点,我有点不在意。

到目前为止,这是我尝试过的故障排除步骤。

  1. 试图在另一台机器上运行工作簿。
  2. 我试图删除Report Workbook上的所有Workbook_Open。
  3. 试图删除报告工作簿上的所有macros代码。
  4. 插入error handling程序。 不幸的是,没有出现错误。
  5. 试图删除子例程上的DoEvents代码。

但是还是没有运气。 它停止执行代码。

Private Sub TransferRawData() Dim wsPTRawData As Worksheet, wbPTWorkBook As Workbook, wsOutputRaw As Worksheet Dim filePath As String, FileName As String, ptTargetRow As Long Application.EnableEvents = False Application.StatusBar = "Exporting All Raw Data... Please wait a moment..." Application.ScreenUpdating = False Application.Calculation = xlCalculationManual filePath = ThisWorkbook.Path & "\" FileName = filePath & pt_FileName Set wbPTWorkBook = Workbooks.Open(FileName:=FileName, UpdateLinks:=0, IgnoreReadOnlyRecommended:=True) DoEvents Set wsPTRawData = wbPTWorkBook.Worksheets(pt_ProdRawSheet) Set wsOutputRaw = ThisWorkbook.Sheets(merger_prodOutputSheet) ptTargetRow = wsPTRawData.Range("A" & Rows.Count).End(xlUp).Row + 1 If lastRow(wsOutputRaw, "A") > 1 Then wsOutputRaw.Range("A2:F" & lastRow(wsOutputRaw, "A")).Copy wsPTRawData.Range("A" & ptTargetRow) wbPTWorkBook.Close True Set wsOutputRaw = Nothing Set wsPTRawData = Nothing Set wbPTWorkBook = Nothing End Sub 

顺便说一句,我有3套使用上述代码的工作簿。 他们都将复制报告工作簿上的数据。 但是他们都在执行传输程序时遇到了麻烦。

有关其他信息。 一旦我运行例程并执行Workbooks.Open事件。 这里是VBA项目窗口和Excel窗口的截图。

在这里输入图像说明

在这里添加一个error handling程序,看看是否有任何错误没有被正确捕获

 Private Sub TransferRawData() Dim wsPTRawData As Worksheet, wbPTWorkBook As Workbook, wsOutputRaw As Worksheet Dim filePath As String, FileName As String, ptTargetRow As Long Application.EnableEvents = False Application.StatusBar = "Exporting All Raw Data... Please wait a moment..." Application.ScreenUpdating = False Application.Calculation = xlCalculationManual filePath = ThisWorkbook.Path & "\" FileName = filePath & pt_FileName On Error GoTo ErrHandler Set wbPTWorkBook = Workbooks.Open(FileName:=FileName, UpdateLinks:=0, IgnoreReadOnlyRecommended:=True) DoEvents Set wsPTRawData = wbPTWorkBook.Worksheets(pt_ProdRawSheet) Set wsOutputRaw = ThisWorkbook.Sheets(merger_prodOutputSheet) ptTargetRow = wsPTRawData.Range("A" & Rows.Count).End(xlUp).Row + 1 If lastRow(wsOutputRaw, "A") > 1 Then wsOutputRaw.Range("A2:F" & lastRow(wsOutputRaw, "A")).Copy wsPTRawData.Range("A" & ptTargetRow) wbPTWorkBook.Close True Set wsOutputRaw = Nothing Set wsPTRawData = Nothing Set wbPTWorkBook = Nothing ErrHandlerSave: Debug.Print Chr(13) & "Error # " & Str(Err.Number) & " was generated on Saving" _ & Err.Source & Chr(13) & "Error Line: " & Erl & Chr(13) & Err.Description End Sub 

您将在VBA代码底部的Immediate窗口中看到一条错误消息。 如果你没有它或不知道如何显示它看起来

嗨参考将在未来遇到此问题的其他人。

代码本身与错误没有任何关系。

经过大量的时间调查这个错误。 我发现罪魁祸首是我在macros本身分配的快捷键。

我已经在macros上分配了一个CTRL + SHIFT键,从而阻碍了打开其他工作簿的其他macros。

outlook未来,我在我的Macro快捷键上进行configuration,避免了Shift键。 结果,子程序做了它应该做的事情。