こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBAの実行時エラー'9'について

こんばんは
下記マクロで FNameというファイルのグラフの数を数えて名前を取得しGnameというファイル
に同名のシートを作成したいのですが
実行時エラー'9'、インデックスが有効範囲にありません.と出てしまいます。
どなたかご存知の方ご教示お願いいたします。
Workbooks(FName).Activate
 For  s = 1 To Charts.Count

Windows(GName).Activate

Worksheets.Add

ActiveSheet.Name = Charts(s).Name

 Next s

投稿日時 - 2013-08-06 00:38:33

QNo.8207684

困ってます

質問者が選んだベストアンサー

#1です。

>ActiveSheet.Name = Charts(s).Name

ActiveSheet.Name = Workbooks(FName).Charts(s).Name
としてください。


Charts(s).Name
はどちらのブックに対しての操作なのかを考えてみてください。
頭に何も書かないとアクティブなブック(今回の場合ではGNameのほう)に対しての操作となります。
グラフシートがあるのはFNameのほうですから、明示的にWorkbooks(FName).Charts(s).Nameと書きます。

投稿日時 - 2013-08-06 14:29:58

ANo.3

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

>新規作成したシートはアクティブなのでそのシートの名前を
>Charts(s).Nameに変更したいのでしようとしているつもりなのですが・・・

#1さんが既に回答済みなんですが、、、

Charts(s).Nameは命令した時にアクティブになっている
ブックから取ってこようとするコマンドなので、
新規作成したシートのグラフを探しにいっています。
新規作成したシートにグラフは無いでしょう?

グラフ名を変数に退避しておくとか、ブックから
ちゃんと指定して命令するとかすればいいわけです。

投稿日時 - 2013-08-06 13:56:59

ANo.1

アクティブなブックがどちらなのかを常に気をつけていないといけません。

>ActiveSheet.Name = Charts(s).Name

右辺のCharts(s).Name はアクティブブックのそれを見に行こうとしています。が、ありませんからエラーとなるのだと思われます。

投稿日時 - 2013-08-06 10:50:26

お礼

お忙しいところありがとうございます。
新規作成したシートはアクティブなのでそのシートの名前を
Charts(s).Nameに変更したいのでしようとしているつもりなのですが・・・
どこがいけないのでしょうか?

投稿日時 - 2013-08-06 12:45:48

あなたにオススメの質問