我有多个工作表,其工作表名为' SUMMARY-F'。我需要将这些工作表合并到一个工作簿中,并使用以下代码:
Sub CopySheets1()
Dim wkb As Workbook
Dim sWksName As String
sWksName = "SUMMARY-F"
For Each wkb In Workbooks
If wkb.Name <> ThisWorkbook.Name Then
wkb.Worksheets(sWksName).Copy _
Before:=ThisWorkbook.Sheets(1)
End If
Next
Set wkb = Nothing
End Sub
代码完美地工作了4次但是现在当我运行它时,我得到一个超出范围的下标错误9.有关如何解决此问题的任何提示吗?
谢谢, 辛达
答案 0 :(得分:0)
如果您打开的工作簿不包含名为SUMMARY-F的工作表,那么您将收到超出范围的错误,因为Excel无法找到具有指定的工作表名称。如果您已使用PERSONAL.xlsm记录宏,则此错误也适用于隐藏的工作簿。
当打开的工作簿没有名为SUMMARY-F的工作表时,您应该在代码中包含一个检查来处理这种情况。
请参阅此问题,提供有关如何识别工作表是否存在的选项,例如定义可以从代码中首先调用的函数:
How to check whether certain sheets exist or not in Excel-VBA?
您只需要修改它以检查另一个工作簿中的工作表,例如:
Public Function CheckSheet(ByVal sWB As String, ByVal sSheetName As String) As Boolean
Dim oSheet As Excel.Worksheet
Dim bReturn As Boolean
For Each oSheet In Workbooks(sWB).Sheets
If oSheet.Name = sSheetName Then
bReturn = True
Exit For
End If
Next oSheet
CheckSheet = bReturn
End Function
然后您可以在代码中添加一个检查:
Sub CopySheets1()
Dim wkb As Workbook
Dim sWksName As String
sWksName = "SUMMARY-F"
For Each wkb In Workbooks
If wkb.Name <> ThisWorkbook.Name Then
If CheckSheet(wkb.Name,sWksName)
wkb.Worksheets(sWksName).Copy Before:=ThisWorkbook.Sheets(1)
End If
End If
Next
Set wkb = Nothing
End Sub