7730
Excel 2013 で下記のマクロを実行しているときに

> 実行時エラー'9':インデックスが有効範囲にありません

と出ます。

```

    Sub test()
        Workbooks("Book2.xlsm").Worksheets("Sheet1").Visible = False
    End Sub
    
```

「Sheet1」があるのにも関わらず、上記のようなエラーが出ます。  
どうすれば「Sheet1」を非表示にできるのでしょうか？
CC BY-SA 3.0
2015-03-10T10:23:48.927
7728
2015-03-10T10:58:10.277
2015-03-10T10:51:12.003
7926
question
vba excel
Excel 2013の「実行時エラー'9'」について
まず、Workbooks("Book2.xlsm")でワークブック本体を取得するには、そのファイルを開いていないとダメです。  
そしてWorksheetsには名前ではなくindexを渡します。つまり何番目のシートかという数字です。  
1番目のシートであれば`.Worksheets(1)`でOKです。  
※一般的な言語の配列のように0から始まりません。

そしてもう一つ注意点。  
Excelでは全てのシートを非表示にできません。  
なのでSheet1しかそのファイルに存在していない場合、なんぼがんばっても非表示にできません。  
もう一つシートを追加してやれば非表示にできるハズです。

* * *

今調べてみたらWorksheets("名前")でも行けるみたいですね...出直してきます。(´・ω・`)

どうやら、ファイルを開いてないと`実行時エラー'9'`が出るみたいです。  
とりあえず、メソッドチェーンを使わずに、どの段階でエラーが起きているのか特定するのが良いかと思います。以下のようにして実行するとドコで落ちるでしょう？

```

    Sub Test()
      Dim wb As Workbook
      Set wb = Workbooks("Book2.xlsm")
      Dim ws As Worksheet
      Set ws = Worksheets("Sheet1")
      ws.Visible = False
    End Sub
    
```
CC BY-SA 3.0
2015-03-10T10:44:15.827
7730
2015-03-10T10:58:10.277
2015-03-10T10:58:10.277
2383
2383
7728
answer