我多次阅读应避免在代码中使用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/