• ベストアンサー

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

初歩的な質問ですいません。教えてください! 「sheetnameinput」フォーム Private Sub NextButton2_Click() sheetname = sheetname.Text このようにフォームを作成し、ユーザにシート名を入力させて、マクロの中でそのシート名を指定(選択)したいと思っています。 続きとして Dim sn As Variant Set sn = sheetnameinput.sheetname Sheets("sn").Select と作成してみたのですが 「インデックスが有効範囲にありません(エラー9)」 のメッセージが出てしまいます。 確かにその名前のシートはエクセル内に存在しているのですが、なぜエラーとなるのでしょう?そもそも指定の仕方が間違っているのでしょうか? みなさん、教えてください。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

sheetname = sheetname.Text <要らないような・ Dim sn As String sn = sheetnameinput.sheetname.Text Sheets(sn).Select としてみてはどうでしょうか

kakikukei
質問者

補足

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

その他の回答 (6)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.7

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

kakikukei
質問者

お礼

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

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.6

>「インデックスが有効範囲にありません(エラー9)」 コードに問題が無ければ、該当シート名があるブックがアクティブになっているかどうかです。 表示されているブック以外のシート名を指示した場合やブックに無いシート名を指示した場合もエラーになります。 Sheets().Select の前に該当のブック名を指示してください。

kakikukei
質問者

お礼

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

  • m2m10
  • ベストアンサー率0% (0/11)
回答No.5

>別の標準モジュールの中ではやっぱり出来ないんです フォーム以外でしたら フォーム名前を付けないと駄目です。 Private Sub NextButton2_Click() Sheets(フォーム.sheetname.Text).Select End Sub

kakikukei
質問者

お礼

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

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

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

kakikukei
質問者

お礼

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

  • m2m10
  • ベストアンサー率0% (0/11)
回答No.3

ユーザにシート名を入力させて、 でしたら、sheetname.Text 直接 されては   Private Sub NextButton2_Click() Sheets(sheetname.Text).Select End Sub

kakikukei
質問者

補足

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

  • m2m10
  • ベストアンサー率0% (0/11)
回答No.1

> Sheets("sn").Select シート名の sn になります。  Dim sn As Variant  で 数字ですので   Sheets(sn).Select  になります。

kakikukei
質問者

補足

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

関連するQ&A