アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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 …
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/07/07 01:52

>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()のデータをユーザーフォームへ受け渡しがうまくいかないのです。

ユーザーフォームをあまり使ったことがないので、
この受け渡し方法がよくわかりません。
ちなみに配列も受け渡せますよね?
すみませんが、よろしくお願いします。

補足日時:2005/07/05 22:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!