2017-10-09 67 views
0

大家好,我一直用“如果”,“然后”,“and”和“转到”VBA的后藤将无法正常工作

玩弄我觉得我得到了所有的窍门,除了“转到”多次我不能确定它的工作 我不确定是因为我使用了“如果”错误还是因为我使用了“转到”错误。有人可以看看这段代码,告诉我我做错了什么。因为我使用“If”语句很多,所以如果我以最好和正确的方式使用它,那将会很好。是的,我知道下面的代码,我使用activesheet和我应该做的代码,而无需用activesheet尽可能多的人工作在这里的统计,但我还没有确定如何使用

Columns(1).Insert Shift:=xlRight 

还没有激活片

因此,这里是我做的有值单元格A1的代号为“新”,所以转到应当被激活,但它不是。

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 
+0

它,因为你是在同一行中使用'GoTo'。将GoTo放在下一行,将'If'中的代码块放入'Else'部分。 –

+0

只是删除结束时,如果 – Absinthe

回答

1

让自己和未来成为一个好处:不要为了错误处理而使用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 
+2

[意大利面条代码(https://en.wikipedia.org/wiki/Spaghetti_code) - 拼写检查 –

+0

我同意'GoTo'应该被认为是有害的(https://en.wikipedia.org/wiki/Considered_harmful),但您可以提到它是VBA中的错误处理所必需的。 – Noceo

+0

谢谢你的回答,非常感谢! –