Excel VBA调试程序停止,没有错误或警告

时间:2016-10-10 18:24:23

标签: excel excel-vba debugging corruption vba

在尝试测试某些代码时,我遇到了一个我不记得的问题。当我单步执行代码时,它会在ClearContents行之后停止...没有错误,没有警告,没有。

Public Sub CreateCurMth(wsCur As Worksheet)
Dim iData As Integer, iRow As Integer
Dim wbData As Workbook
On Error GoTo err_here

  iRow = wsCur.Cells(Rows.Count, 1).End(xlUp).Row
  wsCur.Range("A10:X" & iRow).ClearContents  '<----- Fails after this line

'Assume that file is already open
  Set wbData = Workbooks("qReport.xlsx")
  ... etc
err_here:
  Beep
End Sub

wsCur是在调用sub中分配的工作表。代码准确地返回iRow作为wsCur上最后一次使用的行。此外,内容被清除...所以行执行正常。它死后没有发出哔哔声。我在Beep上也有一个断点,它永远不会被击中。

所以,正如我在输入一个问题时经常发生的事情......我一直在尝试,并且在尝试完全记录我的问题时通常最终找到答案。这次有了不错的结果......我无法找到,上面的代码现在正在运行......但是,我在VBA的其他部分中仍然遇到与上述部分不相似的问题。我已经在这个项目上工作了一个星期左右,并且在今天之前的所有测试中,这段代码已经起作用了......或者至少像通常预期的那样出错了。

每次调试器停止时,都没有错误,也没有警告。失败的线甚至没有任何共同点。所以我不得不假设它与我的系统有关。

我搜索过谷歌并且没有回答。我希望以前有人能够解决这个问题并解决它,或者至少能指出我正确的方向。

我的代码编译没有错误。这是当前停止的行:

wsTemp.Delete

Temp工作表被删除...然后暂停。

编辑:好的,所以我认为这只是一个损坏的Excel文件,并且做了一个Open&amp;修复解决了几个小时。但是现在我遇到了调试器在

之后失败的问题
wsTemp.Delete

我启用了工具&gt;选项&gt;一般&gt;打破所有错误,我仍然没有错误,没有警告......代码一步一步停止。

只是要彻底......这是到失败点的整个过程:

'Creates combined joblist from last and current month
Sub CreateCompareList(wsCur As Worksheet, wsLast As Worksheet, wsComp As Worksheet)
Dim wsTemp As Worksheet
Dim lLastRow As Long, lCurRow As Long, lLMRow As Long
Dim iCol As Integer, x As Integer

  wsComp.Unprotect SheetPwd
  lLastRow = wsComp.Cells(Rows.Count, 27).End(xlUp).Row         'Get the last row
  If lLastRow = 9 Then
    'No data on sheet - Don't ruin headers
  Else
    wsComp.Rows("10:" & lLastRow).ClearContents                 'Clear that section of Job names and numbers
  End If
  Set wsTemp = Worksheets.Add                                   'Add a Temp Sheet to filter jobs

  lCurRow = wsCur.[A10].End(xlDown).Row                         'Get the last row
  wsCur.Range("A10:B" & lCurRow).Copy                           'Grab all jobs for the current month
  wsTemp.[A1].PasteSpecial                                      'Paste job list from Current Month
  Application.CutCopyMode = False

  lLMRow = wsLast.[A10].End(xlDown).Row                         'Get the last row
  wsLast.Range("A10:B" & lLMRow).Copy                           'Grab all jobs from the Last month
  lLastRow = wsTemp.[A1].End(xlDown).Row                        'Get the last row
  wsTemp.Cells(lLastRow + 1, 1).PasteSpecial                    'Paste jobs from last month below jobs from current month
  Application.CutCopyMode = False

  lLastRow = wsTemp.[A1].End(xlDown).Row                        'Get new last row
  'Filter out duplicates based on the JobNo
  wsTemp.Range("$A$1:$B$" & lLastRow).RemoveDuplicates Columns:=2, Header:=xlNo
  lLastRow = wsTemp.[A1].End(xlDown).Row                        'Get new last row
  wsTemp.Range("A1:B" & lLastRow).Copy                          'Copy unique Jobs

  wsComp.[A10].PasteSpecial                                     'Paste Unique Jobs to Compare sheet

'Clean up Temp sheet
'  Application.DisplayAlerts = False
  wsTemp.Delete

我已经尝试使用DisplayAlerts打开和关闭,当警报开启时...我收到警告表明工作表上可能有数据...我点击删除,工作表被删除...然后代码停止。它偶尔会在上面的其他.ClearContents行上出现问题。

1 个答案:

答案 0 :(得分:0)

关于这个问题的事后调查似乎可以得出结论,这实际上是一个损坏的Excel文件。幸运的是,我还有一个最近的备份。但是,为了节省在备份和损坏版本之间编码所花费的时间,以下是我保存文件的步骤,以防其他人遇到我做的奇怪行为:

  1. 关闭所有Excel窗口并在不打开文件的情况下启动新实例。
  2. 使用Ctrl + O搜索文件...但不是单击“打开”,而是单击向下箭头并选择“打开”和“打开”。维修。
  3. 点击修复
  4. 保存为新副本* - 修复(仅因为)。
  5. 在此之后,文件按预期运行。 EOMONTH函数中的循环引用消失了,调试器按预期运行。我已经对所有代码进行了全面测试,并且它正常工作。

    我没有解释它是如何被破坏的,我猜是幸运的。

    在处理损坏的Excel文件时,请参阅https://support.office.com/en-us/article/Repairing-a-corrupted-workbook-e5b49891-dde7-4796-b60a-49b0d2478a62了解其他选项。

    编辑:此问题再次出现,目前有效的是强制Windows更新。系统设置为自动,但当我手动去检查时,它找到了3个Office更新。安装完成后,我再次运行Windows Update,发现.Net框架的另一个更新......所以我也这样做了......怀疑是否有任何影响...但是......

    所以...使用Excel的Open&amp; amp;修复,应用更新并重新启动几次,打开Break on all errors ...我的代码终于再次运行。