2017-03-07 5 views
0

'SUMMARY-F'という名前のワークシートを持つ複数のワークブックがあります。私はそれを実行したとき、私は範囲エラー9任意のヒントのうちの添字を取得下付き文字エラー - ワークシートの結合

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倍に働いていた:私は1つのブックに、これらのワークシートを結合する必要があると私は以下のコードを使用していますこれを修正する方法は?

おかげで、 ルシンダ

+2

ブックの1つに「SUMMARY-F」という名前のワークシートがありません。 –

+0

PERSONAL.xls *がありますか? –

答えて

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 
関連する問題