【问题标题】:Excel VBA Suddenly Goes To Design Mode during Macro RuntimeExcel VBA 在宏运行时突然进入设计模式
【发布时间】:2018-04-15 08:34:32
【问题描述】:

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

我有一个子程序可以将我的数据从这个工作簿复制到另一个现有工作簿(报告工作簿)。

当我尝试运行代码时,在运行时打开报告工作簿后它突然停止,我注意到它进入了设计模式。因此,阻碍了例程的执行。

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

我有点想弄清楚这一点。

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

  1. 试图在另一台机器上运行工作簿。
  2. 我已尝试删除报告工作簿上的所有 Workbook_Open。​​
  3. 试图删除报告工作簿上的所有宏代码。
  4. 插入错误处理程序。不幸的是,没有出现错误。
  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 窗口的屏幕截图。

【问题讨论】:

  • 显示有错误吗? ...如果可以,请发布屏幕截图
  • 嗨@jsotola,它没有出现任何错误消息。但我添加了屏幕截图,以便您更好地了解我的问题。
  • 你能在里面添加错误捕获并输出错误信息吗?有时会有隐藏的错误信息
  • 不知道这是否是所有代码,但 Calculation 和 EnableEvents 设置是持久的 - 您应该在代码退出之前重新设置它们。
  • 嗨@TimWilliams 是的,实际上我可以在此例程中省略所有这些性能增强器设置。因为在我执行项目中的所有例程之前,我已经将它们全部设置好并再次设置它们。我刚刚在此例程中添加了所有这些设置以供参考。

标签: vba excel


【解决方案1】:

在这里添加一个错误处理程序,看看是否有没有被正确捕获的错误

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 窗口中看到一条错误消息。如果您没有设置或不确定如何显示它LOOK HERE

【讨论】:

    【解决方案2】:

    您好,供以后遇到此问题的其他人参考。

    代码本身与错误无关。

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

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

    接下来,我在我的宏快捷键上进行了配置,并避免了 Shift 键。结果,子例程做它应该做的事情。

    【讨论】:

      猜你喜欢
      • 2017-02-20
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多