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

解決済みの質問

フォームでユーザが入力したシート名を選択したい

初歩的な質問ですいません。教えてください!

「sheetnameinput」フォーム
Private Sub NextButton2_Click()
sheetname = sheetname.Text

このようにフォームを作成し、ユーザにシート名を入力させて、マクロの中でそのシート名を指定(選択)したいと思っています。

続きとして
Dim sn As Variant

Set sn = sheetnameinput.sheetname

Sheets("sn").Select

と作成してみたのですが
「インデックスが有効範囲にありません(エラー9)」
のメッセージが出てしまいます。
確かにその名前のシートはエクセル内に存在しているのですが、なぜエラーとなるのでしょう?そもそも指定の仕方が間違っているのでしょうか?

みなさん、教えてください。

投稿日時 - 2005-08-31 13:03:04

QNo.1617256

すぐに回答ほしいです

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

sheetname = sheetname.Text <要らないような・

Dim sn As String
sn = sheetnameinput.sheetname.Text
Sheets(sn).Select
としてみてはどうでしょうか

投稿日時 - 2005-08-31 14:07:30

補足

教えていただいたように直してみたのですが、stringにすると「コンパイルエラー オブジェクトが必要です」のエラーが最初のSubの行(Module1)で出てしまいました。
そこでvariantに戻して
sn = sheetnameinput.sheetname.Text
Sheets(sn).Select
のみ指定しましたが、やはり「インデックスが有効範囲にありません」となってしまいました。

デバックでカーソルを「sn」にあわせてみると、入力したシート名がポップアップしてるので、大丈夫そうに見えるのですが・・・

投稿日時 - 2005-08-31 14:31:38

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

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

回答(7)

ANo.7

これはエクセルVBAの問題ですか。「Sn」シートが別ブックにあって、そのブック名、さらにはそのブックのあるフォルダのPATH名が指定されtいないからではないですか。

投稿日時 - 2005-08-31 21:21:39

お礼

ご指摘ありがとうございました!

投稿日時 - 2005-09-01 10:18:46

ANo.6

>「インデックスが有効範囲にありません(エラー9)」

コードに問題が無ければ、該当シート名があるブックがアクティブになっているかどうかです。
表示されているブック以外のシート名を指示した場合やブックに無いシート名を指示した場合もエラーになります。

Sheets().Select の前に該当のブック名を指示してください。

投稿日時 - 2005-08-31 16:04:25

お礼

>表示されているブック以外のシート名を指示した場合やブックに無いシート名を指示した場合もエラーになります。

了解しました。注意するようにします。

投稿日時 - 2005-09-01 10:21:15

ANo.5

>別の標準モジュールの中ではやっぱり出来ないんです

フォーム以外でしたら

フォーム名前を付けないと駄目です。

Private Sub NextButton2_Click()
Sheets(フォーム.sheetname.Text).Select
End Sub

投稿日時 - 2005-08-31 15:40:39

お礼

大変参考になりました。ありがとうございます。

投稿日時 - 2005-09-01 10:16:11

ANo.4

#2です、ウチで試してみたところ#2でうまく行きました。
なので、エラーになる原因はよくわかりません。
できたら、部分のコードでなくて、該当部分(1つのSub)を補足で挙げていただけませんでしょうか

投稿日時 - 2005-08-31 15:24:41

お礼

すいません、私のコードの書き込みに誤記がありました。
ちゃんと動きました!ありがとうございます。

投稿日時 - 2005-08-31 18:32:37

ANo.3

ユーザにシート名を入力させて、

でしたら、sheetname.Text 直接 されては  

Private Sub NextButton2_Click()
Sheets(sheetname.Text).Select
End Sub

投稿日時 - 2005-08-31 15:03:58

補足

同じフォームの中であれば、この指定の仕方で出来ました!
ただ、別の標準モジュールの中ではやっぱり出来ないんです。

投稿日時 - 2005-08-31 15:14:04

ANo.1

> Sheets("sn").Select
シート名の sn になります。

 Dim sn As Variant  で 数字ですので

  Sheets(sn).Select  になります。

投稿日時 - 2005-08-31 13:54:13

補足

教えていただいたように直してみたのですが、やはり同じエラーとなりました。。

ちなみにシート名は半角英数字を仮定しています。最初stringで宣言したのですがうまくいかず、variantにしたのですが、これは数字になってしまうのでしょうか?たしか、文字列、日付、時間、ブール値、または数値だったと思うので数字のみでなくても大丈夫でしょうか?

投稿日時 - 2005-08-31 14:25:39

あなたにオススメの質問