使用Try and Catch功能跳过不匹配的单元格

时间:2014-05-27 20:31:30

标签: excel vba excel-vba

有人帮我解决了Excel中的VBA代码问题。我的代码如下:

Sub VidyaGames()

Dim LastRow As Variant, j As Integer

LastRow = Range("A65536").End(xlUp).Address
j = 2

For i = 1 To Range("A1", LastRow).Rows.Count + 1 Step 10

Worksheets("Sheet1").Cells(j, 1) = Worksheets("PlayerInfoAll").Cells(i, 2)

Worksheets("Sheet1").Cells(j, 2) = Worksheets("PlayerInfoAll").Cells(i + 1, 2)

Worksheets("Sheet1").Cells(j, 3) = Application.WorksheetFunction.Sum(Worksheets("PlayerInfoAll").Range(Cells(i + 3, 1), Cells(i + 3, 1).End(xlToRight)))

Worksheets("Sheet1").Cells(j, 4) = Application.WorksheetFunction.Sum(Worksheets("PlayerInfoAll").Range(Cells(i + 4, 1), Cells(i + 4, 1).End(xlToRight)))

Worksheets("Sheet1").Cells(j, 5) = Worksheets("PlayerInfoAll").Cells(i + 5, 2)

Worksheets("Sheet1").Cells(j, 6) = Worksheets("PlayerInfoAll").Cells(i + 6, 2)

Worksheets("Sheet1").Cells(j, 7) = Worksheets("PlayerInfoAll").Cells(i + 7, 2)

Worksheets("Sheet1").Cells(j, 8) = Worksheets("PlayerInfoAll").Cells(i + 8, 2)

Try
    Worksheets("Sheet1").Cells(j, 9) = Application.WorksheetFunction.IsNA ((Application.WorksheetFunction.Match(730, Worksheets("PlayerInfoAll").Range(Cells(i + 2, 1), Cells(i + 2, 1).End(xlToRight)), 0)))
Catch
    Worksheets("Sheet1").Cells(j, 9) = 0


j = j + 1

Next i

End Sub

代码从一个工作表中的“块”中获取数据,并将它们放入另一个工作表中的可读/ SPSS类格式。我在底部添加了Try和Catch代码,但它似乎不起作用。如果我在没有 Try Catch 行的情况下运行该行,则代码将在找到不包含标识符(“730”)的行时终止。我查了尝试捕获,认为它就像Python的尝试除了但是当我尝试运行它时我收到消息“编译错误:子或功能未定义”,尝试突出显示。

Try / Catch 是否像Python的 Try / Except 一样工作?如果是这样,我该如何让它在这里工作?

2 个答案:

答案 0 :(得分:2)

虽然VBA没有Try / Catch块,但你可以使用标准的错误处理,例如

Sub VidyaGames()

    For i = 1 To Range("A1", LastRow).Rows.Count + 1 Step 10
        ....
        Worksheets("Sheet1").Cells(j, 9) = TryCatchWorkAround(i)
        j = j + 1
    Next i
End Sub

Private Function TryCatchWorkAround(i AS Integer) AS Integer
On Error GoTo Handler
     TryCatchWorkAround = Application.WorksheetFunction.IsNA ((Application.WorksheetFunction.Match(730, Worksheets("PlayerInfoAll").Range(Cells(i + 2, 1), Cells(i + 2, 1).End(xlToRight)), 0))) 

Exit_TryCatchWorkAround:
    Exit Function
Handler:
    TryCatchWorkAround = 0
    Resume Exit_TryCatchWorkAround
End Function

这将仅使用VBA标准错误处理执行相同的功能。

答案 1 :(得分:-1)

VBA不提供try / catch块。您可以尝试使用On Error Goto xxx修改错误处理,其中xxx是您的错误处理代码所在的标签。在互联网上查找On Error Goto ...以获取更多信息。