• ベストアンサー

フォームに引数を渡す方法のやり方

はじめまして ---------------------------- 配列Aにシート名を全て格納 ↓ フォームに引数を渡す ↓ UserForm_Initialize にて コンボボックスに引数を羅列させる ---------------------------- というようなマクロを作成しようと思っているのですが、フォームに引数を渡す方法がわからず困っています どなたかご教授をお願いします よろしくお願いします

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

  • ベストアンサー
回答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 イベント内でコンボボックスの値を元に他の初期化もすることはできませんので、コンボボックスに入れる値を使って初期化するコードはすべてこの独自プロパティの中で処理する必要があります。 ということで、初期化のコードが多い場合はコードが煩雑になる可能性があります。

その他の回答 (3)

noname#22222
noname#22222
回答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

noname#22222
noname#22222
回答No.2

Private Sub CommandButton1_Click()   UserForm1.ComboBox1.AddItem "AAA"   UserForm1.ComboBox1.AddItem "BBB"   UserForm1.ComboBox1.AddItem "CCC"   UserForm1.Show End Sub シート側で一気が判りやすいかと・・・。

masaki1976
質問者

お礼

この方法では、フォームを開くと同時に コンボボックス内にアイテムが表示されないので 解決にはつながらなさそうです 回答ありがとうございました

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答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

masaki1976
質問者

お礼

この方法でも問題ないと思いますが この方法では、再度Worksheetのset を行わなくてはならないので避けたい方法です ちなみに配列に格納されているsheet名は別Bookのsheet名全てです 回答ありがとうございました

関連するQ&A