Excel中的VBA宏如果,那么,否则?

时间:2018-02-14 00:04:06

标签: excel vba

我有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

1 个答案:

答案 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。基本上它会禁用所有错误捕获。它应该像原子弹一样对待。