我有3个版本的工作簿,1个有4个选项卡,1个有8个,1个有12个。最后一个中的所有选项卡都包含其他两个工作簿,而第二个包含第一个工作簿。我需要的是我的宏跳过搜索早期版本中的其他8/4选项卡,以便每次我有一个旧版本的工作簿加载时我不必单击调试。我对此非常陌生,所以任何帮助都会很棒。提前谢谢。
发生错误是因为某些版本的工作簿中不存在该选项卡。
Sub TO_LOAD_OctDec()
' Macro to load data from workbook to master workbook.
'
' Open master database and prepare for transfer
Workbooks.Open Filename:="S:\Property & Casualty\PPE\Wildfires\California Wildfires 2017\Submissions\CWF2017-MasterDatabase.xlsx"
' Focus is given to workbook to obtain correct filename.
ActiveWindow.ActivatePrevious
Sheets("Ready").Select
Range("A9").Select
Selection.ClearContents
' Transfer company info
Application.GoTo Reference:="CoInfo"
Selection.Copy
ActiveWindow.ActivateNext
Sheets("CoInfo").Select
Range("A1").Select
ActiveCell.SpecialCells(xlLastCell).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToLeft).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A1").Select
' Transfer personal property data
ActiveWindow.ActivatePrevious
Range("PersonalP").Select
Selection.Copy
ActiveWindow.ActivateNext
Sheets("Data").Select
Range("A1").Select
ActiveCell.SpecialCells(xlLastCell).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToLeft).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A1").Select
' Transfer commercial property data
ActiveWindow.ActivatePrevious
Range("CommercialP").Select
Selection.Copy
ActiveWindow.ActivateNext
Sheets("Data").Select
Range("A1").Select
ActiveCell.SpecialCells(xlLastCell).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToLeft).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A1").Select
' Transfer Auto data
ActiveWindow.ActivatePrevious
Range("Auto").Select
Selection.Copy
ActiveWindow.ActivateNext
Sheets("Data").Select
Range("A1").Select
ActiveCell.SpecialCells(xlLastCell).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToLeft).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A1").Select
' Transfer Other Lines data
ActiveWindow.ActivatePrevious
Range("OtherLines").Select
Selection.Copy
ActiveWindow.ActivateNext
Sheets("Data").Select
Range("A1").Select
ActiveCell.SpecialCells(xlLastCell).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToLeft).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A1").Select
' Transfer DF personal property data
ActiveWindow.ActivatePrevious
Range("DF_Residential").Select
Selection.Copy
ActiveWindow.ActivateNext
Sheets("Data").Select
Range("A1").Select
ActiveCell.SpecialCells(xlLastCell).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToLeft).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A1").Select
' Transfer DF commercial property data
ActiveWindow.ActivatePrevious
Range("DF_Commercial").Select
Selection.Copy
ActiveWindow.ActivateNext
Sheets("Data").Select
Range("A1").Select
ActiveCell.SpecialCells(xlLastCell).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToLeft).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A1").Select
' Transfer DF Auto data
ActiveWindow.ActivatePrevious
Range("DF_Auto").Select
Selection.Copy
ActiveWindow.ActivateNext
Sheets("Data").Select
Range("A1").Select
ActiveCell.SpecialCells(xlLastCell).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToLeft).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A1").Select
' Transfer DF Other Lines data
ActiveWindow.ActivatePrevious
Range("DF_Other").Select
Selection.Copy
ActiveWindow.ActivateNext
Sheets("Data").Select
Range("A1").Select
ActiveCell.SpecialCells(xlLastCell).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToLeft).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A1").Select
' Transfer MM Personal Property data
ActiveWindow.ActivatePrevious
Range("MM_Personal").Select
Selection.Copy
ActiveWindow.ActivateNext
Sheets("Data").Select
Range("A1").Select
ActiveCell.SpecialCells(xlLastCell).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToLeft).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A1").Select
' Transfer MM Commercial Property data
ActiveWindow.ActivatePrevious
Range("MM_Commercial").Select
Selection.Copy
ActiveWindow.ActivateNext
Sheets("Data").Select
Range("A1").Select
ActiveCell.SpecialCells(xlLastCell).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToLeft).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A1").Select
' Transfer MM Auto data
ActiveWindow.ActivatePrevious
Range("MM_Auto").Select
Selection.Copy
ActiveWindow.ActivateNext
Sheets("Data").Select
Range("A1").Select
ActiveCell.SpecialCells(xlLastCell).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToLeft).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A1").Select
' Transfer MM Other Lines data
ActiveWindow.ActivatePrevious
Range("MM_Other").Select
Selection.Copy
ActiveWindow.ActivateNext
Sheets("Data").Select
Range("A1").Select
ActiveCell.SpecialCells(xlLastCell).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToLeft).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A1").Select
' Save and close master database
Sheets("CoInfo").Select
ActiveWorkbook.Save
ActiveWorkbook.Close
' TimeStamp
ActiveWindow.ActivateNext
Range("F11").Select
ActiveCell.FormulaR1C1 = "=NOW()"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub
答案 0 :(得分:0)
这是一个查明工作表是否存在的函数:
Public Function HasSheet(SheetName As String) As Boolean
Dim i As Integer
Dim sheetNameUcase As String
sheetNameUcase = UCase(SheetName)
For i = 1 To Sheets.Count
If UCase(Sheets.Item(i).Name) = sheetNameUcase Then
HasSheet = True
Exit Function
End If
Next
HasSheet = False
End Function
然后像在这个例子中一样使用它:
' Transfer DF Auto data
If HasSheet("Data") Then
ActiveWindow.ActivatePrevious
Range("DF_Auto").Select
Selection.Copy
ActiveWindow.ActivateNext
Sheets("Data").Select
Range("A1").Select
ActiveCell.SpecialCells(xlLastCell).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToLeft).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A1").Select
End If
另外,请避免使用On Error Resume Next
。基本上它会禁用所有错误捕获。它应该像原子弹一样对待。