簡體   English   中英

Excel VBA出現錯誤錯誤

[英]Excel VBA On Error error

我對編程很陌生,在學習Python的同時也開始嘗試Excel VBA。 我對最后一個有疑問。

我有一些大型Excel工作表,並試圖驗證特定列中的數據是否與某些列中另一工作表上的數據匹配,因為它們應該通過這些值相互關聯(並通過第三個值進行連接)。 為了使這一點更加困難,這兩個列都可能包含多個用“ |”分隔的值。 因此,我將這些值拆分為一個列表,並嘗試遍歷它們以確保所有這些值均已正確設置,連接將正常工作。

只要一切都好,一切都很好:)但是,我有一個問題,其中一個列中有兩個值,而另一列中只有一個。 我希望將此差異記錄在紙上,然后繼續進行下一項。

似乎適用於我的方法是使用“ On Error GoTo ErrHandler”,然后在另一張紙上記錄錯誤,然后再使用Resume繼續。

這是我想出的:

            For h = 0 To UBound(Split1())
                 For j = 1 To GetMaxRow("SpecificSheet", A)
                     On Error GoTo ErrHandler:
                        If Sheets("SpecificSheet").Cells(j, 1).Value = Split1(h) And Sheets("SpecificSheet").Cells(j, 2).Value = Split2(h) Then
                                DependencyOk = DependencyOk + 1
                        End If
                    Next j
            Next h
ErrProceed:

ErrHandler也是:

ErrHandler:
        Sheets("Issues").Cells(x, 1) = "IssueDescription"
    GoTo ErrProceed

它停止在第2行,且下標超出了Split2(h)的范圍,而不是繼續到ErrHandler然后進入ErrProceed。 我覺得這一定很明顯,但是我無法使它正常工作,而且我無法在Excel VBA中找到其他方式(例如try / except)。

更新:

試圖澄清一些事情。 問題的根源在於,Split2列表比Split1短-這是輸入數據的問題,我想抓住這一點。 我從單元格中獲取拆分值,其中值之間用“ |”分隔 特點:

    CellValue = Sheets("SomeSheet").Cells(RowNumber, ColumNumber)
    CellValueSplit() = Split(CellValue, "|")

然后迭代為:

   For h = 0 To UBound(Split1())

因此,當Split1移至例如第3個值時,Split2引發錯誤,腳本停止。 到目前為止,我能做的最好的事情就是讓它繼續循環,但是由於這是一個相當大的工作表,它將填充相同的錯誤報告ca。 在這種情況下,請避免20萬次。 因此,我希望它從超出此范圍錯誤后的循環開始,並繼續檢查下一個值。

謝謝您到目前為止的幫助!

您的語法有問題。 正確的Error語句語法為:

On Error GoTo <string>
On Error Resume Next
On Error GoTo 0

使用On Error GoTo <string>時,末尾沒有“:”。 在創建目標位置之前,“:”不起作用。 例:

On Error GoTo Here
'// ---- Do something ---- //
Here:
'// ---- Handle the error ---- //

如果您使用On Error Resume Next ,那么您是在告訴機器忽略錯誤並繼續執行下一行代碼。

當您使用On Error Return To 0 ,VBA會將其錯誤處理重置為默認值。 On Error Resume Next不再需要時使用On Error Resume Next插入On Error Return To 0時,這是一個好習慣。 On Error Resume Next上,很有可能破壞您的代碼並使其表現異常。 更不用說調試可能是一個真正的噩夢。 請查閱MicrosoftVBA手冊,以獲取更詳細的說明。

最后,如果您的問題得到回答,則應將其標記為已回答。

簡短而快速的版本是VBA錯誤處理例程僅處理實際代碼執行中的錯誤,當不滿足代碼表示的條件時,它們不會觸發。

就您而言,您根本不需要任何錯誤處理。 在大多數情況下,實際上最好避免On Error GoTo ... 在某些情況下,這是不可避免的,但很少見。

嘗試以下IF THEN ELSE塊:

If Sheets("SpecificSheet").Cells(j, 1).Value = Split1(h) And Sheets("SpecificSheet").Cells(j, 2).Value = Split2(h) Then
    DependencyOk = DependencyOk + 1
Else
    Sheets("Issues").Cells(x, 1) = "IssueDescription"
End If

其實我才發現問題。 它是由前面幾行的If語句后留下的“:”引起的。 我仍然不太了解它的作用,但是我建議不要重現它:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM