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