我多次阅读应避免在代码中使用GoTo的内容,但是我经常必须创建循环,如果某个项目给我一个错误,则代码将停止。

在以下情况下,我必须比较单元格值,但是如果单元格中有字符串,则会出现错误。

您还有其他选择可以避免下面的代码使用GoTo吗?

谢谢!

Sub Conditional()

        Dim x As Integer



        For x = 1 To 31



            On Error GoTo na


            If Sheets("Sheet1").Cells(8 + x, 5) >= 0.95 Then

                Sheets("Sheet2").Shapes("Shape " & x).Fill.ForeColor.RGB = RGB(0, 176, 80)

            ElseIf Sheets("Sheet1").Cells(8 + x, 5) < 0.95 Then

                Sheets("Sheet2").Shapes("Shape " & x).Fill.ForeColor.RGB = RGB(255, 0, 0)

            End If

            GoTo nextx

na:

            Sheets("Sheet2").Shapes("Shape " & x).Fill.ForeColor.RGB = RGB(0, 0, 0)
            On Error GoTo -1

nextx:
        Next x

End Sub

最佳答案

在这种情况下,如果要检查单元格中的字符串,则如下所示:

Sub Conditional()

    Dim x As Long

    For x = 1 To 31
        If IsNumeric(Sheets("Sheets1").Cells(8 + x, 5)) Then
            If Sheets("Sheet1").Cells(8 + x, 5) >= 0.95 Then

                Sheets("Sheet2").Shapes("Shape " & x).Fill.ForeColor.RGB = RGB(0, 176, 80)

            ElseIf Sheets("Sheet1").Cells(8 + x, 5) < 0.95 Then

                Sheets("Sheet2").Shapes("Shape " & x).Fill.ForeColor.RGB = RGB(255, 0, 0)

            End If
        End If
    Next x
End Sub


通常,goto仅应用于错误捕获,例如On Error GoTo ErrorHandler,不包含任何例外。

关于excel - 如何避免转到VBA?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41218231/

10-13 06:10