Vba Goto 将无法正常工作

Vba Goto won't work properly

大家好,我一直在玩 "If" "Then" "And" 和 "Goto"

我想我已经掌握了除了 "Goto" 之外的所有技巧,但很多次我无法让它工作 我不确定是因为我使用了 "If" 错误还是因为我使用了错误的 "Goto" 。有人可以看看这段代码,告诉我我做错了什么吗?因为我经常使用 "If" 语句,所以如果我以最好和正确的方式使用它会很好。是的,我知道在下面的代码中我使用了 activesheet 并且我应该在不使用 activesheet 的情况下执行代码,因为这里有很多人统计但我不确定如何使用

Columns(1).Insert Shift:=xlRight

尚未激活 sheet

这里是代码,我的单元格 A1 的值为 "new",因此 Goto 应该被激活,但它没有。

Sub con()
Set tsheet = ThisWorkbook.Sheets("Players")
Sheets("Players").Activate
ActiveSheet.Columns(1).Insert Shift:=xlRight
Dim lngLastRow As Long
If tsheet.Range("A1") = "new" Then
GoTo AlR
Else
    lngLastRow = Cells(Rows.Count, "B").End(xlUp).Row
    Range("A2").Formula = "=B2 & "" "" & C2 & "" "" & G2 & "" "" & D2"
    Range("A2").Copy Range("A2:A" & lngLastRow)
    tsheet.Range("A1").Value = "new"
End If
AlR:
MsgBox "Column is already present"
End Sub

让自己和未来受益:除了错误处理之外,不要将 GOTO 用于任何其他用途。

你现在做的事情叫做Spaghetti code

您的代码应该是:

Sub con()
Set tsheet = ThisWorkbook.Sheets("Players")
Sheets("Players").Activate
ActiveSheet.Columns(1).Insert Shift:=xlRight
Dim lngLastRow As Long
If tsheet.Range("A1") = "new" Then 
    MsgBox "Column is already present"
else
    lngLastRow = Cells(Rows.Count, "B").End(xlUp).Row
    Range("A2").Formula = "=B2 & "" "" & C2 & "" "" & G2 & "" "" & D2"
    Range("A2").Copy Range("A2:A" & lngLastRow)
    tsheet.Range("A1").Value = "new"
End If

End Sub