

No.4ベストアンサー
- 回答日時:
どうしても Initialize イベントで初期設定を行いたいのなら、標準モジュールに書いた Public な変数に情報を持つしかないと思います。
呼び出し元から、最初にシート名一覧を Public 変数である "配列A" にセットしてからフォームを Show する。
Initialize じゃなくても良いのなら、フォームに独自のプロパティを作成する方法。
例えばこんな感じとか。
' 呼び出し元のコード
Dim sheetNames As String
' シート名に使えない文字を区切り文字に使う
sheetNames = "a/b/c/d/e/f"
UserForm1.OpenArg = sheetNames
UserForm1.Show
' ユーザーフォームのコード
Option Explicit
Public Property Let OpenArg(aArg As String)
Dim argArray As Variant
argArray = Split(aArg, "/")
Dim arg As Variant
For Each arg In argArray
Me.ComboBox1.AddItem arg
Next
End Property
フォームを Show する前にプロパティを呼び出すので、その瞬間にますフォームの Initialize イベントが実行され、そのあとプロパティに値がセットされてコンボボックスに値が入ります。
したがって Initialize イベント内でコンボボックスの値を元に他の初期化もすることはできませんので、コンボボックスに入れる値を使って初期化するコードはすべてこの独自プロパティの中で処理する必要があります。
ということで、初期化のコードが多い場合はコードが煩雑になる可能性があります。
No.3
- 回答日時:
ウーン!
AddItem だけでは、表示されなくて当然です。
Private Sub CommandButton1_Click()
With UserForm1.ComboBox1
.AddItem "AAA"
.AddItem "BBB"
.AddItem "CCC"
.Value = "AAA" ' Value の設定が必要
End With
UserForm1.Show
End Sub
ただ、ドロップダウン表示するには、次の仕掛けも必要です。
Private Sub UserForm_Activate()
ComboBox1.DropDown
End Sub
なお、どうしても局所的な配列を渡したければ、<フォームのCaptionを経由して渡す>ことが可能です。
が、簡単なのは、広域変数を使うことです。
Private Sub CommandButton1_Click()
WSName(0) = "AAA"
WSName(1) = "BBB"
UserForm1.Show
End Sub
Private Sub UserForm_Activate()
With ComboBox2
.AddItem WSName(0)
.AddItem WSName(1)
End With
End Sub
No.2
- 回答日時:
Private Sub CommandButton1_Click()
UserForm1.ComboBox1.AddItem "AAA"
UserForm1.ComboBox1.AddItem "BBB"
UserForm1.ComboBox1.AddItem "CCC"
UserForm1.Show
End Sub
シート側で一気が判りやすいかと・・・。
この方法では、フォームを開くと同時に
コンボボックス内にアイテムが表示されないので
解決にはつながらなさそうです
回答ありがとうございました
No.1
- 回答日時:
VBカテですが、Excel-VBAですか?
こういう意味ではない?
Private Sub UserForm_Initialize()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ComboBox1.AddItem ws.Name
Next ws
End Sub
この方法でも問題ないと思いますが
この方法では、再度Worksheetのset を行わなくてはならないので避けたい方法です
ちなみに配列に格納されているsheet名は別Bookのsheet名全てです
回答ありがとうございました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
EXCEL VBAのユーザーフォームに引数を渡す方法について
Excel(エクセル)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
-
4
TextBoxコントロールを引数として渡すには?
その他(教育・科学・学問)
-
5
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
6
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
7
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
8
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
9
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
10
押したボタンの位置取得(共通のマクロ)
Excel(エクセル)
-
11
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
-
12
VBAもしくはVB6:クラスの中でクラスは使える?
Visual Basic(VBA)
-
13
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
14
excelのInitializeイベントとActivateイベントについて
Excel(エクセル)
-
15
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
16
VBAでのユーザフォームの表示有無の確認について
Visual Basic(VBA)
-
17
excel vba でユーザーフォーム入力ができない
Visual Basic(VBA)
-
18
VBA ユーザーフォーム ボタンクリック後にセルにフォーカス
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAのユーザーフォームの...
-
クリックイベントなのに、2回ク...
-
ユーザーフォームを表示中にシ...
-
Hideについて(.NET)
-
Microsoft Formsの「個人情報や...
-
ユーザーフォームのテキストボ...
-
Form_Load と Form_Activate の...
-
ユーザーフォーム上に現在日時...
-
Excelにて、ユーザーフォームで...
-
エクセルVBAのフォームを最...
-
VBAでユーザーフォームを再表示...
-
モーダルフォームとモードレス...
-
C# 2010 printPreviewDialogの...
-
VBAのテキストフォームの折り返...
-
Excel VBA ユーザーフォーム 複...
-
タスクバーにフォーム名を表示...
-
VBAでコントロールの数をカウン...
-
ExcelVBAのユーザーフォームでe...
-
複数モニタ使用時のフォームの...
-
エクセルのフォームをマクロで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
Microsoft Formsの「個人情報や...
-
Form_Load と Form_Activate の...
-
VBAでユーザーフォームを再表示...
-
クリックイベントなのに、2回ク...
-
ユーザーフォーム上に現在日時...
-
テキストボックス入力データの...
-
VBAのテキストフォームの折り返...
-
ACCESSのフォーム、開くんです...
-
Hideについて(.NET)
-
ユーザーフォームのテキストボ...
-
エクセルVBAのフォームを最...
-
モーダルフォームとモードレス...
-
EXCEL VBA ユーザーフォームの...
-
フォームのテキストボックスな...
-
コントロールの存在確認
-
パソコンの画面に合わせてユー...
-
フォームウィンドウを最前面に...
-
Accessで、一つのフォーム画面...
おすすめ情報