2017-03-07 95 views
0

我有多個工作簿,名爲'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.任何提示關於如何解決這個問題?

感謝, 辛達

+2

您的工作簿中沒有名爲「SUMMARY-F」的工作表? –

+0

你有PERSONAL.xls *嗎? –

回答

0

如果你有一個工作簿是開放的,不含有一種叫摘要-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