我試圖建立一個如下所示的結構。 其中我有一個循環,有時一個循環步驟可以返回錯誤,但我想跳過它並繼續循環直到結束。VBA錯誤句柄 - 恢復和打印錯誤
但是,如果任何循環執行有錯誤,我想知道它打印在單元格中的東西像「缺少負載:(1,20,36)」這個數字是唯一的值,我的循環變量之一接收。
所以我認爲每次我的循環執行返回錯誤時,我需要建立一個這個變量值的列表,並在循環過程結束時使用這個列表來返回這個錯誤消息。
UPDATE:
對於下面我想知道的任何最終的名單「sProdId」的價值,這是在SQL查詢聞其失敗的任何錯誤執行。通常它會嘗試在數字SQL字段中插入#Value。
Sub SavetoSQL()
Dim conn As New ADODB.Connection
Dim iRowNo As Integer
Dim Ddate
Ddate = Range("refdate")
Dim RngRefdate As Date
RngRefdate = DateSerial(Year(Ddate), Month(Ddate), Day(Ddate))
With Sheets("Hist Prods temp")
'Open a connection to SQL Server
conn.Open "Provider=SQLOLEDB;Data Source=XXXXX;Initial Catalog=XXXXXX;User Id=XXXX;Password=XXXXXXX;"
'Skip the header row
iRowNo = 2
'Loop until empty cell in sRefDate
Do Until .Cells(iRowNo, 1) = ""
sRefDate = .Cells(iRowNo, 1)
sProdId = .Cells(iRowNo, 2)
sPrice = .Cells(iRowNo, 3)
sValue = .Cells(iRowNo, 4)
sDV01 = .Cells(iRowNo, 5)
sDelta1 = .Cells(iRowNo, 6)
sDeltaPct = .Cells(iRowNo, 7)
sGamma = .Cells(iRowNo, 8)
sVega = .Cells(iRowNo, 9)
sTheta = .Cells(iRowNo, 10)
sDelta2 = .Cells(iRowNo, 11)
sIVol = .Cells(iRowNo, 12)
'Generate and execute sql statement to import the excel rows to SQL Server table
conn.Execute "INSERT INTO [dbo].[Prices] ([Date],[Id_Product],[Price],[Value],[DV01],[Delta1$],[Delta%],[Gamma$],[Vega$],[Theta$],[Delta2$],[Ivol],[Last_Update]) values ('" & sRefDate & "', '" & sProdId & "'," & sPrice & "," & sValue & "," & sDV01 & "," & sDelta1 & "," & sDeltaPct & "," & sGamma & "," & sVega & "," & sTheta & "," & sDelta2 & "," & sIVol & ",GETDATE())"
iRowNo = iRowNo + 1
Loop
conn.Close
Set conn = Nothing
End With
End Sub
將我的答案與Paul的比較,我現在稍微不確定是否(在錯誤之後)您希望在當前循環迭代(Paul)中執行剩餘操作或跳轉到下一個循環迭代(me)。我可以通過將'GoTo CurrRecFail'改爲'Resume Next'來成爲前者。 –
只需100%清除...如果sProdId#25的循環在任何時候都拋出錯誤,那麼您已完成#25並繼續前進到下一個記錄?其次,如果sProdId#25,#32和#45在第8和第10列中出現了#VALUE錯誤,你是否希望看到''缺少加載:(25,32,45)'**或**'「失蹤負荷:(25,25,32,32,45,45)**或**'「失負荷:25(8),25(10),32(8),32(10),45(8) ),45(10)'? –
是的,如果我有任何錯誤,一行無法插入到SQL中,我會跳過它並移動到我的工作表的下一行,我不需要看看列導致什麼錯誤只是想看看什麼sProdId我有錯誤,所以只是「缺少負載:(25,32,45)」。 – Flib