Excel go to label函数的问题

Excel go to label函数的问题,excel,vba,Excel,Vba,我正在运行以下宏以打开130个excel文件,并将它们复制到每个实体的单独工作表中。它对我想做的事情很有效(虽然可能不是最有效的)。一旦工作表已经存在,我希望宏不再创建新工作表,而是跳过此步骤 我正在尝试为此使用on错误代码,但是我无法使以下部分正常工作: On Error Goto skip 即使此代码下面的公式有错误,它也会不断返回通知“下标超出范围” 有人知道我做错了什么吗 Sub Macro2() 'Select item Location Row = 2 nextitem: Row

我正在运行以下宏以打开130个excel文件,并将它们复制到每个实体的单独工作表中。它对我想做的事情很有效(虽然可能不是最有效的)。一旦工作表已经存在,我希望宏不再创建新工作表,而是跳过此步骤

我正在尝试为此使用on错误代码,但是我无法使以下部分正常工作:

On Error Goto skip
即使此代码下面的公式有错误,它也会不断返回通知“下标超出范围”

有人知道我做错了什么吗

Sub Macro2()

'Select item Location
Row = 2
nextitem: Row = Row + 1

' Create sheet
Sheets("Location").Select
Week = ActiveSheet.Range("c1").Value
Complete = ActiveSheet.Range("b" & Row).Value
Entity = ActiveSheet.Range("a" & Row).Value
Workbook_Entity = Entity & " - Week " & Week & ".xlsx"

If Complete = "Yes" Then
    GoTo nextitem
    Else

On Error GoTo Skip
Sheets(Entity).Select
GoTo Skipped2

Exit Sub

Skip:
Sheets.Add(After:=Sheets(Sheets.Count)).Name = Entity

Skipped2:

'Open Workbooks

Workbooks.Open Filename:=ThisWorkbook.Path & "\location\" & Workbook_Entity

Sheets("Week - Hidden").Visible = True
Sheets("Week - Hidden").Select
Columns("A:G").Select
Selection.Copy
Windows("Overview.xlsm").Activate
Sheets(Entity).Select
Range("a1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Windows(Workbook_Entity).Activate
ActiveWorkbook.Save
Sheets("Week - Hidden").Visible = False
ActiveWindow.Close

'Rotate
If Item_Region = "003" Then

GoTo Enditall

Else

GoTo nextitem

Enditall:

End If
End If

End Sub

我找到了答案,为我解决了这个问题。希望它也能帮助其他人

If DoesSheetExists(s) Then
GoTo Skipped2

Else
Sheets.Add(After:=Sheets(Sheets.Count)).Name = Entity
Skipped2:

End If
具有以下功能

Function DoesSheetExists(sh As String) As Boolean
Dim ws As Worksheet

On Error Resume Next
Set ws = ThisWorkbook.Sheets(sh)
On Error GoTo 0

If Not ws Is Nothing Then DoesSheetExists = True
End Function

很接近,但更好

Function TryGetSheet(ByVal ipSheetName As String, ByRef opSheet as worksheet) as Boolean

   On Error Resume Next
   Set opSheet = ThisWorkbook.sheets(ipSheetName) 
   TryGetSheet = Err.Number = 0
   On Error GoTo 0

End Function

阅读本文,不要使用Goto和函数或子函数来检查工作表是否存在,而不是OE。这是否回答了您的问题?坏主意,不要使用
GoTo
(仅用于错误处理)
GoTo
是一种非常糟糕的做法,您很快就会遇到问题。你的代码也会很快变得无法维护,因为它会变成一个巨大的意大利面怪物。相反,使用类似于
If Not doesheetexists(s)然后…sheetexists的方法。添加…End If
no
Else
needed,使用
GoTo不能跳转,也不能跳转。