Excel 下标超出范围错误-合并工作表

Excel 下标超出范围错误-合并工作表,excel,vba,Excel,Vba,我有多本工作表名为“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

我有多本工作表名为“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
子副本页1()
将wkb设置为工作簿
将sWksName设置为字符串
sWksName=“SUMMARY-F”
对于工作簿中的每个wkb
如果wkb.Name ThisWorkbook.Name然后
wkb.工作表(sWksName).副本_
之前:=此工作簿。工作表(1)
如果结束
下一个
设置wkb=无
端接头
代码运行了大约4次,但是现在当我运行它时,我得到了一个下标超出范围的错误9。关于如何解决这个问题有什么建议吗

谢谢,
Lucinda

如果打开的工作簿中没有名为SUMMARY-F的工作表,则会出现超出范围的错误,因为Excel找不到具有指定名称的工作表。如果您使用PERSONAL.xlsm记录宏,则此错误也将应用于隐藏的工作簿(如PERSONAL.xlsm)

当打开的工作簿没有名为SUMMARY-F的工作表时,您应该在代码中包含一个复选框来处理这种情况

请参阅此问题,该问题提供了如何识别工作表是否存在的选项,例如定义可以首先从代码中调用的函数:

您只需修改它即可检查另一工作簿中的工作表,如:

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
子副本页1()
将wkb设置为工作簿
将sWksName设置为字符串
sWksName=“SUMMARY-F”
对于工作簿中的每个wkb
如果wkb.Name ThisWorkbook.Name然后
If检查表(wkb.Name、sWksName)
wkb.工作表(sWksName).Copy Before:=此工作簿.工作表(1)
如果结束
如果结束
下一个
设置wkb=无
端接头

您的一本工作簿没有名为“SUMMARY-F”的工作表?您是否有个人.xls*?