2017-10-09 37 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

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