• ベストアンサー

VBAのユーザーフォームについて

ユーザーフォームのコマンドボタンのリストの イニシャルにWorkSheetの全てのシート名を入れるにはどうしたらいいのでしょうか? 戻り値や引数でデータの受け渡しで行うにはどうしたらいいのでしょうか? 初心者でよくその受け渡しがわかりません。 どうぞご教授よろしくお願いします。

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

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

>でシート名を配列に入れたあと、 プロシージャ外(モジュールの先頭)で変数宣言を行うことで、パブリック変数(共用変数)として利用できます。 ユーザーフォームモジュールの先頭で宣言すれば、ユーザーフォームのどのプロシージャからも参照できます。 標準モジュールにPublic 宣言を付けて変数を宣言すると、他のモジュールからも参照できる変数になります。 >この配列SheetName()のデータをユーザーフォームへ受け渡しがうまくいかないのです。 配列データ(シート名)を効率的にボタン名に設定できないと言うことでしょうか? Controls("コントロール名").Caption = "AA" のような方法があります。 コマンドボタンの名前が1から始まっていると、下記のように応用できます。 For i = 1 To Ubound(SheetName) Controls("CommandButton" & i).Caption = SheetName(i) Next i や UserForm_Initialize()で For i = 1 To Worksheets.Count Controls("CommandButton" & i).Caption = Sheets(i).Name Next i とすれば、フォーム起動時にボタンにシート名が設定できます。 ボタンの数が多くなった場合は、「擬似コントロール配列」という方法でボタンをグループ化できます。 (VBでは普通にコントロール配列が使るので、VBAでは擬似となっています。) http://www.moug.net/skillup/opm/opm08-01.htm

参考URL:
http://www.h3.dion.ne.jp/~sakatsu/Breakthrough_P-Ctrl_Arrays.htm
komusemari
質問者

お礼

返答遅くなりすみません;; 回答ありがとうございます。 擬似コントロール配列というのがあるのですね。 初めて聞きました。 今の私には少々レベルが高いように感じられますので、 今後の勉強にさせて頂きます。 情報ありがとうございました!

その他の回答 (1)

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

>WorkSheetの全てのシート名を入れるにはどうしたらいいのでしょうか? 目的が良く解りませんが、シート名の取得は簡単に可能です。 http://www2s.biglobe.ne.jp/~iryo/vba/VBA07.html (参考7-1 ブック内複数シート名の取得) >戻り値や引数でデータの受け渡しで行うにはどうしたらいいのでしょうか? サブルーチン(引数を元に処理する・もしくは引数無し:値は返さない) sub Work1(引数) 処理 end sub 呼出方法 call Work1(引数) 関数(引数を元に処理・もしくは引数無し:値を返す事が可能) function Job1(引数) 処理 job1=○○ :関数名に戻り値を設定 end function 呼出方法 変数=Job1(引数)

komusemari
質問者

補足

回答ありがとうございます。 補足させていただきますと、 For i = 1 To Worksheets.Count SheetName(i) = Sheets(i).Name Next i でシート名を配列に入れたあと、この配列をユーザーフォームのコマンドボタンにリスト表示させたいのです。 この配列SheetName()のデータをユーザーフォームへ受け渡しがうまくいかないのです。 ユーザーフォームをあまり使ったことがないので、 この受け渡し方法がよくわかりません。 ちなみに配列も受け渡せますよね? すみませんが、よろしくお願いします。

関連するQ&A

  • ExcelVBAでユーザーフォームが勝手に閉じてしまいます。

    ExcelVBAでユーザーフォームが勝手に閉じてしまいます。 ExcelVBAを独学で始めてまだ2週間足らずの超初心者です。 Excelワークシートにコマンドボタン配置してそのコマンドボタンを押すとユーザーフォーム1が開き、ユーザーフォーム1に配置してあるリストボックスからリストをダブルクリックで選択すると、ユーザーフォーム2が開くように設定しています。ただ、ユーザーフォーム1のリストをダブルクリックして選択した時点でユーザーフォーム1が勝手に閉じてしまいます。ユーザーフォーム1を勝手に閉じさせないでコマンドボタンで閉じるようにしたいのですがどうしたらよいのでしょうか。レベルの低い質問かもしれませんが困っています。宜しくお願い致します。

  • EXCEL ユーザーフォームを使ったマクロ

    データの登録をするのにユーザーフォームを使おうと思うのですが、なかなかうまくいきません。教えてください。 ユーザーフォームにはコンボボックス、テキストボックス、コマンドボタンが貼り付けてあります。(コンボボックスのリストには呼び出したいシートの名前が入っています) コンボボックスのリストの中から呼び出したいシートを選択し、テキストボックスに入力した内容を、コマンドボタンを押すことで選択されたシート上の、あるセルに登録したいのですがどうすればよいでしょうか?

  • エクセルVBA ユーザーフォームの終了について

    エクセルVBAでユーザーフォームを作成しています。 コマンドボタンにVBAマクロを割り当てしているのですが 思うように動いてくれないので質問します。 コマンドボタンをクリックしたら望む動作 1、ワークシートを選択 2、その後、ユーザーフォームを消す。 と言う動作にしたいのですが、2の ユーザーフォームを消す方法、書き方が分かりません どなたか教えていただけないでしょうか 1の動作は以下のように書いています。その後の書き方を お願いします。 Private Sub CommandButton8_Click() ブック名 = "VBA演習" シート名 = "sheet1" Workbooks(ブック名 & ".xls").Worksheets(シート名).Activate End Sub (ユーザーフォームの名前は"テストフォーム"としてます)

  • Excelユーザーフォームでのデータ検索

    初心者の質問で申し訳ございません。 ユーザーフォームを利用して検索ボタンを作ろうと考えています。 ユーザーフォームでテキストボックスを2個と コマンドボタン1個を作成し、 テキストボックス1に検索したい氏名を入力して コマンドボタンを押すと、 ワークシート(ワークシート名、データ)に作成されたデータのD列から 一致するものを検索し、 一致したデータのA列にある「番号」をテキストボックス2、 表示する。 というマクロが書けず困っています。 よろしくお願いします。

  • EXCEL VBAのユーザーフォームに引数を渡す方法について

    すいません、EXCEL VBAのユーザーフォームに引数を渡す方法についてご質問があります。 シート上にコマンドボタンを2つ用意する。 コマンドボタン1を押すと変数mは1 コマンドボタン2を押すと変数mは2 としてユーザーフォームを呼び出す。 Public m As Integer Private Sub CommandButton1_Click()  m = 1  Call フォーム呼び出し(m) End Sub Private Sub CommandButton2_Click()  m = 2  Call フォーム呼び出し(m) End Sub Sub フォーム呼び出し(m As Integer)  UserForm1.Show End Sub 次にユーザフォームにコマンドボタンを1個置き、 ボタンを押したとき、mが1であれば「ボタン1」 mが2であれば「ボタン2」 とメッセージボックスを出し、ユーザーフォームを閉じる。 Private Sub CommandButton1_Click()   If m = 1 Then    MsgBox "ボタン2"   ElseIf m = 2 Then    MsgBox "ボタン2"   End If  Unload UserForm1 End Sub プロシージャ間の引数渡しは色々なテキストに載っているのですが ユーザーフォームに引数を渡す方法はどうも見つからず、 Private Sub CommandButton1_Click(m) としても、コンパイルエラーとなってしまいます。 よろしくご教示をお願いいたします。

  • VBAでのユーザーフォームの使い方

    VBAのマクロでユーザフォームにボタンを配して、それによってエクセルシートのデータを更新するようなマクロを作りたいのですが、ユーザフォームの挿入でボタン配置まではできるのですけど、どのようにリンク付けするのかコーディング等、解りません。お教え下さい。簡単なサンプルコーディングがあれば助かります。

  • excelでVBAでユーザーフォームのリストBOX

    下記VBAの作成の仕方を教えていただけないでしょうか。 やりたいこと (1)sheet2のA1セル~A5セルまでの間の間をユーザーフォームのリストボックスに登録する (2)sheet1のA1セルをクリックすると、ユーザーフォームが起動し、任意のリストをクリックすると、 その値がA1セルに格納され。ユーザーフォームが終了する。 ※コマンドボタンは使わずにお願いします。なおexcel2000です。

  • VBA ユーザーフォームを使って

    簡素化して書きますがエクセルシートのA1からZ100までデータがあります。(行は増え続けます) A1からZ1までの1行のデータをまとめて1画面に表示したくてユーザーフォームで作ってみました。(ラベル使用) ユーザーフォーム上で「次へ」ボタンを作成し、それをクリックすると次は A2からZ2までを表示させたいのですがやりかたがわかりません。 (また、「戻る」ボタンを作成し、それをクリックすると1行上へ戻るようにしたいです) VBAは初心者もいいところでネットで調べまくってやっています。 が、なかなか思うような結果にならずみなさんのお力をお貸しいただきたいと思います。 実際のデータは色々複雑なのでソースをあえて載せていませんのでご了承ください。 こういうやり方があるよって事を教えて頂けたらと思います。 よろしくお願いします。

  • 【VBA】ユーザーフォームでvbYesNo

    VBA ユーザーフォームのコマンドボタンで「はい」「いいえ」を作成し、ダイアログボックスのvbYesNoと同等の事をしたいのですが、どうすればよろしいでしょうか? コマンドボタンを押すと「0」か「1」が返ってくるようにしたのですが、ユーザーフォームだけ表示され、回答を待たず次へ進んでしまいます。 ダイアログボックスのように選択の回答待ちのような状態にするにはどうすればよいかご教授おねがいします。

  • VBA シート毎にユーザーフォームを作成する方法

    VBAの初心者です。記載内容に不備があるかもしれませんが、ご了承下さいませ。 エクセルのシート毎に異なったデータを簡単に入力したいと思っています。それをVBAを使って作成したいのですが、シート毎のユーザーフォーム作成方法(オブジェクトのWorksheetやモジュールの記載内容など)がわかりません。一つのシートに対しては、なんとかユーザーフォームを作成でき、データ集計できています。 ネットで検索しても、思い通りのサイトが見つかりませんでしたので、質問させていただきます。 教えて下さい。宜しく御願い致します。