2017-03-29 16 views
1

名前が変数であるワークシートで作業しようとしています。Excel VBA - 範囲外の添字 - 変数としてのシート名

私は既存のシートの名前のリストをキャッチするために "データ"と呼ばれるメインシートを持っています。特定の行のために:

With This Workbook.Sheets(sheet_name) 

これは、オブジェクトのシートかのようである:エラーが促さ

Dim data as Worksheet 
dim sheet_name as String 
Dim i as Integer 
Set data = ThisWorkbook.Sheets("Data") 

For i = 2 to 10 
    sheet_name = data.Range("A"&i).Value 
    With ThisWorkbook.Sheets(sheet_name) 
     'Operations on the worksheet 
    End With 
Next i 

は、「範囲の添字アウトランタイムエラー9」であり、次のように

私のコードです文字列sheet_nameを理解できませんでした。 シート「sheet_name」が確実に存在し、二重チェックされています。

残念ながら、私は操作するシートが多すぎるためシートをその名前で呼び出すことはできません。これがループを実行したかった理由です。私はちょうど正面にThisWorkbook.Sheets(シート名)」で、シートのすべてのオブジェクトを参照する句「と」しかし、で作業していない試みたが、いずれかの動作しません

それがある場合、あなたが知っていますかあなたの助けのためのシート()?内

おかげでたくさんの文字列変数を呼び出すことが可能!

敬具、

+1

それはあなたがやりたいことは可能です - しかしsheet_name' 'の値に一致するシートがないように見えます。 –

+0

これは 'With sheet_name ... End With'ですか? – 0m3r

+3

あなたのコードは間違いなく働いています_シートの名前のリストは 'Data' _シート名と一致します(大文字と小文字は区別されません)。名前の先頭または末尾に余分な空白( 'data'と実際のシート名の両方)がないか確認してください。 'Data!A2:A10'の空白もこのエラーの原因となります。 –

答えて

1

あなたのエラーの原因は、@クリスニールセン

により、上記のコメントに与えられました

あなたは確認するか、エラーのこれらの種類を回避するために、次のコードを使用することができます。

Option Explicit 

Sub CheckShtExists() 

Dim data As Worksheet 
Dim sheet_name As String 

Set data = ThisWorkbook.Sheets("Data") 

Dim ws As Worksheet 
Dim ShtNamesArr() As String 
Dim i As Long 

ReDim ShtNamesArr(0 To ThisWorkbook.Worksheets.Count - 1) ' resize array to number of worksheets in This Workbook 

' loop thourgh all worksheets and store their names in array 
For Each ws In ThisWorkbook.Worksheets 
    ShtNamesArr(i) = ws.Name 
    i = i + 1 
Next ws 

For i = 2 To 10 
    If data.Range("A" & i).Value <> "" Then ' ignore blank cells 
     sheet_name = data.Range("A" & i).Value 
     If Not IsError(Application.Match(sheet_name, ShtNamesArr, 0)) Then ' use Application.Match to see there is a sheet with this name 
      With ThisWorkbook.Sheets(sheet_name) 
       'Operations on the worksheet 
      End With 
     Else ' No Match 
      MsgBox sheet_name & " doesn't exists in your workbook" 
     End If 
    End If 
Next i 

End Sub 
関連する問題