2016-10-10 128 views
0

在嘗試測試某些代碼時,我遇到了一個我以前不記得遇到的問題。當我遍歷代碼時,它在ClearContents行之後停止......沒有錯誤,沒有警告,沒有任何內容。Excel VBA調試程序停止時沒有錯誤或警告

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是在調用子中分配的工作表。代碼準確地返回iRow作爲wsCur上最後一次使用的行。此外,內容被清除......以便該行執行正常。死亡後沒有發出嗶聲。我也有一個關於嘟嘟的斷點,它從來沒有被擊中。

因此,正如我在輸入問題時經常發生的那樣......我一直在嘗試一些事情,通常最終會在嘗試完全記錄我的問題時找到我的答案。這次沒有半結果的結果...沒有理由,我可以找到,上面的代碼現在正在工作......但是,我在VBA的其他部分中保持與上面部分不相似的相同問題。我一直在研究這個項目一個星期左右,以及今天之前的所有測試,這個代碼已經工作......或者至少像通常預期的那樣出錯。

每次調試器停止時,都沒有錯誤,也沒有警告。失敗的線條甚至沒有任何共同之處。所以我只能假設這是我的系統環境。

我搜索了谷歌搜索,並沒有答案。我希望有人在這之前已經解決了這個問題,或者至少可以讓我指出正確的方向。

我的代碼編譯沒有錯誤。這是當前停止的行:

wsTemp.Delete 

臨時工作表被刪除...然後暫停。

編輯:好吧,所以我認爲這只是一個損壞的Excel文件,並做了一個打開&修復解決了幾個小時。但現在我在這裏調試失敗後

wsTemp.Delete 

我打開工具>選項>常規>打破所有的錯誤,我仍然沒有錯誤,沒有報警...代碼邁通一樣的問題暫停。

只是要徹底...這裏是整個過程到故障點:

'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行上出現類似上面的問題。

+0

我不明白你的意思是「在此行後失敗」。這聽起來不像是失敗了,它只是沒有達到你的期望。沒有錯誤,對吧? – Kyle

+0

沒有錯誤。調試器也暫停,並且不再運行代碼。它結束的行不是代碼的最後一行。你是對的,它沒有達到我期望的水平......我希望在那條線上按F8可以做任何線條應該做的事情,然後將高亮部分移動到下一行並繼續......或者出錯並且讓我知道剛剛發生的事情。 – Rdster

+0

這是你的全文是什麼? – Kyle

回答

0

對這個問題的事後驗證似乎導致這樣的結論,即這實際上是一個損壞的Excel文件。幸運的是,我還有一個相當新的備份。然而,爲了節省這已經花費了備份和損壞的版本之間編碼的時間,這裏是我走上保存文件的步驟,萬一別人遇到奇怪的行爲,我所做的:

  1. 關閉所有的Excel窗口,並啓動一個新的實例,而無需打開文件。
  2. 使用Ctrl + O搜索文件...但不是單擊打開,而是單擊向下箭頭並選擇打開&修復。
  3. 點擊修復
  4. 保存爲新副本* - 修復(因爲)。

之後,文件按預期運行。 EOMONTH函數中的循環引用消失,調試器按預期運行。我對所有代碼都進行了全面測試,並且它正常運行。

我沒有任何解釋,它是如何變得腐敗,只是我很幸運。

請參閱https://support.office.com/en-us/article/Repairing-a-corrupted-workbook-e5b49891-dde7-4796-b60a-49b0d2478a62瞭解處理損壞的Excel文件時的其他選項。

編輯:這個問題又回來了,目前它的工作是強制Windows更新。該系統設置爲自動,但是當我手動去檢查時,它發現了3個Office更新。安裝完這些之後,我再次運行Windows Update,發現了另一個.Net框架的更新...所以我也這樣做了...懷疑它有什麼作用...但是...

因此...之後使用Excel的打開&修復,應用更新並重新啓動幾次,打開所有錯誤的Break ...我的代碼終於再次工作。

相關問題