- ベストアンサー
フォームでユーザが入力したシート名を選択したい
初歩的な質問ですいません。教えてください! 「sheetnameinput」フォーム Private Sub NextButton2_Click() sheetname = sheetname.Text このようにフォームを作成し、ユーザにシート名を入力させて、マクロの中でそのシート名を指定(選択)したいと思っています。 続きとして Dim sn As Variant Set sn = sheetnameinput.sheetname Sheets("sn").Select と作成してみたのですが 「インデックスが有効範囲にありません(エラー9)」 のメッセージが出てしまいます。 確かにその名前のシートはエクセル内に存在しているのですが、なぜエラーとなるのでしょう?そもそも指定の仕方が間違っているのでしょうか? みなさん、教えてください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
sheetname = sheetname.Text <要らないような・ Dim sn As String sn = sheetnameinput.sheetname.Text Sheets(sn).Select としてみてはどうでしょうか
その他の回答 (6)
- imogasi
- ベストアンサー率27% (4737/17069)
これはエクセルVBAの問題ですか。「Sn」シートが別ブックにあって、そのブック名、さらにはそのブックのあるフォルダのPATH名が指定されtいないからではないですか。
お礼
ご指摘ありがとうございました!
- hana-hana3
- ベストアンサー率31% (4940/15541)
>「インデックスが有効範囲にありません(エラー9)」 コードに問題が無ければ、該当シート名があるブックがアクティブになっているかどうかです。 表示されているブック以外のシート名を指示した場合やブックに無いシート名を指示した場合もエラーになります。 Sheets().Select の前に該当のブック名を指示してください。
お礼
>表示されているブック以外のシート名を指示した場合やブックに無いシート名を指示した場合もエラーになります。 了解しました。注意するようにします。
- m2m10
- ベストアンサー率0% (0/11)
>別の標準モジュールの中ではやっぱり出来ないんです フォーム以外でしたら フォーム名前を付けないと駄目です。 Private Sub NextButton2_Click() Sheets(フォーム.sheetname.Text).Select End Sub
お礼
大変参考になりました。ありがとうございます。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#2です、ウチで試してみたところ#2でうまく行きました。 なので、エラーになる原因はよくわかりません。 できたら、部分のコードでなくて、該当部分(1つのSub)を補足で挙げていただけませんでしょうか
お礼
すいません、私のコードの書き込みに誤記がありました。 ちゃんと動きました!ありがとうございます。
- m2m10
- ベストアンサー率0% (0/11)
ユーザにシート名を入力させて、 でしたら、sheetname.Text 直接 されては Private Sub NextButton2_Click() Sheets(sheetname.Text).Select End Sub
補足
同じフォームの中であれば、この指定の仕方で出来ました! ただ、別の標準モジュールの中ではやっぱり出来ないんです。
- m2m10
- ベストアンサー率0% (0/11)
> Sheets("sn").Select シート名の sn になります。 Dim sn As Variant で 数字ですので Sheets(sn).Select になります。
補足
教えていただいたように直してみたのですが、やはり同じエラーとなりました。。 ちなみにシート名は半角英数字を仮定しています。最初stringで宣言したのですがうまくいかず、variantにしたのですが、これは数字になってしまうのでしょうか?たしか、文字列、日付、時間、ブール値、または数値だったと思うので数字のみでなくても大丈夫でしょうか?
補足
教えていただいたように直してみたのですが、stringにすると「コンパイルエラー オブジェクトが必要です」のエラーが最初のSubの行(Module1)で出てしまいました。 そこでvariantに戻して sn = sheetnameinput.sheetname.Text Sheets(sn).Select のみ指定しましたが、やはり「インデックスが有効範囲にありません」となってしまいました。 デバックでカーソルを「sn」にあわせてみると、入力したシート名がポップアップしてるので、大丈夫そうに見えるのですが・・・