- ベストアンサー
VBAのユーザーフォームについて
ユーザーフォームのコマンドボタンのリストの イニシャルにWorkSheetの全てのシート名を入れるにはどうしたらいいのでしょうか? 戻り値や引数でデータの受け渡しで行うにはどうしたらいいのでしょうか? 初心者でよくその受け渡しがわかりません。 どうぞご教授よろしくお願いします。
- みんなの回答 (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
その他の回答 (1)
- hana-hana3
- ベストアンサー率31% (4940/15541)
>WorkSheetの全てのシート名を入れるにはどうしたらいいのでしょうか? 目的が良く解りませんが、シート名の取得は簡単に可能です。 http://www2s.biglobe.ne.jp/~iryo/vba/VBA07.html (参考7-1 ブック内複数シート名の取得) >戻り値や引数でデータの受け渡しで行うにはどうしたらいいのでしょうか? サブルーチン(引数を元に処理する・もしくは引数無し:値は返さない) sub Work1(引数) 処理 end sub 呼出方法 call Work1(引数) 関数(引数を元に処理・もしくは引数無し:値を返す事が可能) function Job1(引数) 処理 job1=○○ :関数名に戻り値を設定 end function 呼出方法 変数=Job1(引数)
補足
回答ありがとうございます。 補足させていただきますと、 For i = 1 To Worksheets.Count SheetName(i) = Sheets(i).Name Next i でシート名を配列に入れたあと、この配列をユーザーフォームのコマンドボタンにリスト表示させたいのです。 この配列SheetName()のデータをユーザーフォームへ受け渡しがうまくいかないのです。 ユーザーフォームをあまり使ったことがないので、 この受け渡し方法がよくわかりません。 ちなみに配列も受け渡せますよね? すみませんが、よろしくお願いします。
お礼
返答遅くなりすみません;; 回答ありがとうございます。 擬似コントロール配列というのがあるのですね。 初めて聞きました。 今の私には少々レベルが高いように感じられますので、 今後の勉強にさせて頂きます。 情報ありがとうございました!