Excel VBAerror handling(简单,但我不明白)

好吧,我想把一个错误控制的地方,如果activecell行返回一个错误,它将占用行中的单元格,只是写上“错误”就可以了。 代码工作正常,直到我把On Error Control。 我想我需要build议在If错误字将被放入的正确位置。 下面是代码。

Private Sub CommandButton1_Click() Dim outlookapp As Outlook.Application Dim outlookmail As Outlook.MailItem Dim myusername As String Dim LastRow As Long, CurRow As Long, DestRow As Long, DestLast As Long Dim checkstatus As String Dim ws1 As Worksheet, ws2 As Worksheet Set ws1 = Sheets("Sheet1") LastRow = ws1.Range("A" & Rows.Count).End(xlUp).Row On Error Resume Next For CurRow = 2 To LastRow myusername = Environ("Username") Set outlookapp = New Outlook.Application Set outlookmail = outlookapp.CreateItemFromTemplate("C:\Users\" & myusername & "\AppData\Roaming\Microsoft\Templates\testtemplate.oft") With outlookmail .SentOnBehalfOfName = "SharedMailbox" .To = ActiveCell.Cells(CurRow, 6) .Subject = Replace(outlookmail.Subject, "xProjID", ActiveCell.Cells(CurRow, 1)) .Subject = Replace(outlookmail.Subject, "xProjName", ActiveCell.Cells(CurRow, 2)) .Subject = Replace(outlookmail.Subject, "xVert", ActiveCell.Cells(CurRow, 5)) .HTMLBody = Replace(outlookmail.HTMLBody, "xXName", ActiveCell.Cells(CurRow, 2)) .HTMLBody = Replace(outlookmail.HTMLBody, "xProjID", ActiveCell.Cells(CurRow, 1)) .HTMLBody = Replace(outlookmail.HTMLBody, "xStat", ActiveCell.Cells(CurRow, 10)) .HTMLBody = Replace(outlookmail.HTMLBody, "xManID", ActiveCell.Cells(CurRow, 6)) .HTMLBody = Replace(outlookmail.HTMLBody, "xName", ActiveCell.Cells(CurRow, 7)) End With ActiveCell.Cells(CurRow, 11) = "Yes" ActiveCell.Cells(CurRow, 12) = DateTime.Now If Err.Number <> 0 Then ActiveCell.Cells(CurRow, 13) = "Error" End If outlookmail.Send Next CurRow MsgBox "Mass Mailer Complete" End Sub 

那么,它会获取特定用户的Outlook别名并将电子邮件发送给他/她。 所以我试图把错误的别名,如“xxxx”。 事情是应该在activecell.cells(currow,13)的“错误”一词的“xxxx”行logging与正确的别名的行。 那么我应该把代码放在哪里?

 If Err.Number <> 0 Then ActiveCell.Cells(CurRow, 13) = "Error" End If 

谢谢!

一般来说,总是尽量使代码尽可能简单,并消除无用的东西,只是为了不起作用的东西。 你需要这样的东西:

 Option Explicit Public Sub Test() On Error Resume Next Debug.Print 5 / 0 If Err.Number <> 0 Then Cells(1, 1) = Err.Description End If On Error GoTo 0 End Sub 

然后从那里开始,你可以进一步构build代码。 如果你需要一个循环和Err.Clear如@ Mat's Mug的注释中所示,它将如下所示:

 Option Explicit Public Sub Test() Dim lngCounter As Long Dim lngcounter2 As Long On Error Resume Next Cells.Clear For lngCounter = 1 To 5 Debug.Print lngCounter / IIf(lngCounter Mod 2 = 0, 1, 0) If Err.Number <> 0 Then Cells(lngCounter, 1) = Err.Description End If Err.Clear Next lngCounter On Error GoTo 0 End Sub 

这在5次迭代中给出3个错误,并将其描述写入活动的Excel工作表的A列中。