• ベストアンサー

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

初歩的な質問ですいません。教えてください! 「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/17068)
回答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

  • エクセルVBA ユーザーフォームからシートの操作

    エクセルでユーザーフォームを用いて 顧客管理データーベース入力フォームを作成しています。 ユーザーフォーム上で入力した値を複数のシートに またがってデーターを入力していくつもりです。 それで困っていることなのですが、 ユーザーフォームを起動したときに、それぞれの シートの空白の場所を変数で記憶させているのですが 以下に示す部分でエラーが発生します。 エラーの原因は、アクティブシートでないので セルを取得できないようなのですが、アクティブでない 場合のselectに変わるやり方ってありませんか? -----sheet1がアクティブな状態で-------------------------------- Dim myRowNo As Integer Dim myRowNoS As Integer --------------------------------------------------------------- Private Sub MyRowNo1()  myRowNo = 4  Sheets("sheet1").Cells(myRowNo, 1).Select  Do Until ActiveCell.Value = ""   myRowNo = myRowNo + 1   Sheets("sheet1").Cells(myRowNo, 1).Select  Loop End Sub ---------------------------------------------------------------- Private Sub MyRowNo2()  myRowNoS = 4  Sheets("sheet2").Cells(myRowNoS, 1).Select <<<<<<<<エラー箇所  Do Until ActiveCell.Value = ""   myRowNoS = myRowNoS + 1   Sheets("sheet2").Cells(myRowNoS, 1).Select  Loop End Sub --------------------------------------------------------------- Private Sub OpenButton2_Click() 'ユーザーフォームボタンをクリック  Call MyRowNo1  Call MyRowNo2 End Sub --------------------------------------------------------------- MyRowNo1と2の間に「Worksheets("sheet2").Select」を入れる と動くようなのですが、呼び出さずに動かす方法ってありますか? 宜しくお願いいたします。

  • Excel ユーザーフォームの入力値をシートに転記

    Excelでユーザーフォームを作りました。 ユーザーフォームには、テキストボックスを2個、ボタンを1個("記入"という文字が入っています)置いてあります。 テキストボックスに入れた数値をSheet1のセル"C24","C25"に転記したいので、ユーザーフォームのコードを次のようにしましたが、エラーメッセージは出ないかわりに何も動いてくれません。 「どこ」と「なに」が違いどうするのが正しいのか教えて下さい。よろしくお願いします。 Private Sub Tbox1_Change() a = Tbox1.Value End Sub ---------------------------- Private Sub Tbox2_Change() b = Tbox2.Value End Sub ---------------------------- Sub 記入Button_Click() '入力値をSheet1に転記 Dim a As Range Dim b As Range Sheets("Sheet1").Select Set a = Range("C24") Set b = Range("C25") End Sub

  • 最終シートからその手前まで5シートの選択したい

    最終シート名が「基本」、その前が「種別」、さらにその前が「一覧」と言うシート名になっています。 またその「一覧」の前2ケは、シート名をindexで指定したいです。 以下のコードを実行してもうまく、シートを除外してくれません。どうしたらよろしいでしょうか。 Sub 各シートに関数を入力() Dim EXCEPT_NAME As String EXCEPT_NAME = " 一覧  種別  基本" & Worksheets(Sheets.Count - 4).name & Worksheets(Sheets.Count - 5).name Application.ScreenUpdating = False ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path Dim list, sheetName For Each sheetName In ActiveWorkbook.Worksheets If InStr(EXCEPT_NAME, sheetName.name) = 0 Then Sheets(sheetName.name).Activate ActiveSheet.Unprotect Call 関数貼付 End If Next End Sub

  • シートの選択表示が、正常にできない

    excel2007でマクロ作成中の初心者です。 困ってます助けてください。 現在、Sheets("合計表")というシートがアクティブになっています。 そして、 Private Sub CommandButton4_Click() Sheets("単価表").Select End Sub のコードを実行すると、Sheets("単価表")というシートがアクティブになります。 ところが、これに MsgBoxをつけると -------------------------------------- Private Sub CommandButton4_Click() Sheets("単価表").Select Dim myBtn As Integer Dim myMsg As String, myTitle As String myMsg = "単価表を編集しますか?" myTitle = "単価表の確認" myBtn = MsgBox(myMsg, vbYesNo + vbExclamation, myTitle) If myBtn = vbYes Then ’ 単価表の編集 Sheets("単価表").Select End If End Sub --------------------------------- Sheets("合計表")というシートが表示されたままで、メッセジボタンが表示され、Sheets("単価表")に変更されません。 そして、Noボタンを押すと、はじめて、Sheets("単価表").が表示されます。 そこで、最初に Sheets("単価表")が表示されてから、Msgボタンが表示されるように したいのです。どうコードをかえたらいいでしょうか。

  • Excel VBA セルの値をシート名にしたいのです。

    こんばんは 新しくシートを挿入させて、「シート2」の値のみをコピーさせたいと考えています。 その新しく挿入させたシート名を「シート1」のせるA3とA4の文字列をあわせたものにしたいのですが、どうしたらよいのでしょうか。 途中まで考えたところでいきずまってしまいました。 どうか英知をお貸しください。 宜しくお願い致します。 A3には日付、A4には名前が入力されています。 Dim sheetName As String Worksheets("月度集計").Activate Sheets.Add After:=Sheets(Sheets.Count) ActiveSheet.Name = Worksheets("Sheet1").Cells(3, 3).Value On Error Resume Next Worksheets(1).Name = sheetName On Error GoTo 0 Range("f2").Select

  • エクセルのVBユーザーフォームがうまく組めません

    会社でエクセルを使ってデータをまとめているのですがVBのユーザーフォームで作ろうとしています。今困っていることはoptionbuttonを4個使い選択式にし選択したら「OK」buttonを押すことで各optionbuttonに対応したsheetへ飛ぶようにしたいのですがうまくいきません。 現状ですが Private Sub CommandButton1_Click() dim str as string str=optionbutton1.caption select case str case "****" sheets("1234").select ・    ・    ・ end select End Sub としています。 間違いがありましたら指摘してください。 ちなみに3日前に始めてVBを教えてもらいました。

  • エクセル シートのコピーとシート名の問い合わせ

    エクセルで日報を作っています。 PC初心者の方がいるので、なるべく簡単なものを作ろうとしています。 まず、各曜日のフォームを6つ作成し、シート1に各曜日のコマンドボタンを置いて、月曜日なら、その曜日のボタンをクリックしてもらうようにしています。 <例 月曜日> Private Sub CommandButton1_Click() Sheets("月").Copy After:=Sheets(Sheets.Count) End Sub で、お聞きしたいのは、シートを挿入する際にダイアログボックスでシート名を問い合わせるものを作りたいのです。 で、調べていたら、下記のようなものが見つかりました。 Private Sub Workbook_NewSheet(ByVal Sh As Object) Dim strSheet strSheet = Application.InputBox("シートの名前を入力してください" & vbCr & vbCr & _ "キャンセルでシートの挿入を取り消します") Select Case strSheet Case False Application.DisplayAlerts = False Sh.Delete Application.DisplayAlerts = True Case Else Sh.Name = strSheet End Select End Sub 別にこれを使わなくてもいいのですが、この2つが合わさったものをつくりたのですが、どうすればいいのでしょうか。 教えてください。

  • シートを選択したい vba

    自身のファイルを読み取り専用で新たに立ち上げて、シートを選択したいのですが Private Sub cmd_読み取り専用で開く_Click() Dim xlApp As Object Dim xlBook As Object Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(ActiveWorkbook.FullName) xlApp.Visible = True xlApp.xlBook.Sheets("メイン").Select Set xlApp = Nothing Set xlBook = Nothing End Sub だと xlApp.xlBook.Sheets("メイン").Selectでエラーになります。 文法が間違ってると思うのですが、修正案をご教授ください。

  • EXCEL マクロ リストボックスよりシート名を選択してシートを選択

    こんばんは. エクセルを使って備品の管理システムを構築したいと考えております. マクロを使います. VBAは初心者です. ・備品を20種類ほどに分類し,シートも同様に20作りました. ・ウィンドウを2つに分割し,上下に並べています. ・上ウィンドウの最初のシート(シート名:備品一覧)のB2セルにリストボックスを設け,そのリストで20種の備品の中から一つを選択できるようにしています. ・リストボックスの側にマクロ対応のボタンを設置しております やりたいこととしては・・・ 『上ウィンドウのリストボックスで備品を選択し,ボタンをクリックすることによって,下ウィンドウでその選択した備品名のシートに移動する』 です. 私が組んでみたマクロは下記です. ---------------- Sub 備品を選択     Dim sheetname As String 'リストボックスからシート名を取得する sheetname = Range("B2").Value '下ウィンドウをアクティブにしてシートを選択する Windows(2).Activate Worksheets("sheetname").Select End Sub ------------------ エラーは,『Worksheets("sheetname").Select』のところで 【実行値エラー'9' インデックスが有効範囲にありません.】 参考書やグーグルで調べてもわかりませんでした. ご教授いただければ幸いです. よろしくお願い致します.

  • ユーザーフォームの使い方、データ取得で困ってます。

    '作業用シート Private Sub CommandButton1_Click() Dim shinaName As String Dim shinaNo As String Dim sName As String Dim cName As String shinaName = InputBox("商品名を入力") shinaNo = InputBox("商品Noを入力") shinaDiv = InputBox("分類") sName = shinaName cName = shinaNo dName = shinaDiv 'ひな形シートをコピーし、シート名を商品名に Sheets("sheetnew").Select Sheets("sheetnew").Copy Before:=Sheets(1) Sheets("sheetnew (2)").Name = sName '各セルに商品名と商品コードを Worksheets(sName).Activate With ActiveSheet .Range("A2") = sName .Range("A3") = cName .Range("A4") = dName End With End Sub 構文が正しいのかわかりませんが、ビギナーなりに作ってみました(^^;; 作業用シートのボタンをクリックし、入力情報をもとに シートを新規追加していくのですが、この作業をInputBoxではなく、 ユーザーフォームを呼び出して、入力作業を1回で終わらせたいのです。 ユーザーフォーム1()内に下記5項目を作りました テキストボックス1() '商品名 テキストボックス2() '商品No リストボックス1() '分類1~3 登録ボタン() キャンセル() コマンドボタン1をクリックし、ユーザーフォーム呼び出しはOKです。 フォーム内のキャンセルボタンも機能します。 登録ボタンをクリックすると、どうもテキスト、リストボックス内容が 読み込めないみたいでエラーします。 sName = shinaName cName = shinaNo dName = shinaDiv このインプットボックスのように、変数にすると構文的(宣言の仕方?)に 駄目なのでしょうか? ユーザーフォームを見真似で作ってみたのですが、 どこに、どうセットして、どう呼び出して? また、入力されたデータをどう取得して、構文に組み込むのか? 、、、なんかこの辺りがゴチャゴチャしてわかりません。 追って説明して頂けると助かります、構文の作り方教えてください。

専門家に質問してみよう