• ベストアンサー

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

はじめまして ---------------------------- 配列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

  • VBA のフォームでTxtボックスとコンボボックス

    エクセル2013で、やっとのことでマクロのフォーム(txt入力のみを5項目)を完成させることができました。 次に、そのうちの一つは曜日の入力なのでこれをコンボボックスにして、一覧を出してマウスで選択するように変更したいのですがどうもうまくいきません。マクロは初めてなので基本的な考え方ができていないのです。   そこで質問なのですが、参考書には  Private Sub UserForm_Initialize End Sub にマクロを記入するとなっていますが、これをもとの曜日入力ボックスと置き換えることはできないのでしょうか。それとも、終了ボタンのマクロと同じように、別のプロシージャにしないといけないのでしょうか。 それから、これはあまり重要ではないかもしれませんが、私がコンボボックスを作成するとマクロに Combbox_Changed のようなプロパティ(?)が表示されて、ヘルプを見てもよくわかりません。これはどういうことなのでしょうか。 よろしくお願いします。

  • 教えてください。

    vba初心者です。 エクセルのマクロです。 userformをでコンボボックスとテキストボックスを作りました。 userformを起動させ、コンボボックスで1~20のどれかを選択し、 テキストボックスに何か記入し、完了をおすと、コンボボックスで選択したシートにテキストボックスの内容を記録させたいのです。 コンボボックスには1~20までの数字を登録します。 その1~4を選択したときはシート1 5~10はシート2 6~15はシート3 15~20はシート4 と振り分けられるようにしたいのです。 現在の状況は。 userform作成 テキストボックス作成 コンボボックス作成 完了のコマンドボタン作成 完了を押すとテキストボックスが記録される ここまできています。 あとはコンボボックスの使い方がわかりません。 わかりにくい説明ではあったとは思いますが、どなたかご教授お願い致します。 よろしくお願い致します。

  • エクセルVBAのユーザーフォームのコンボボックス

    エクセルVBAのユーザーフォームのコンボボックスの入力と ファイルの保存で質問です。 エクセルVBAで ユーザーフォームのコンボボックスを使用して 1月から12月までを選択してもらい、 選択した月を コマンドボタン押した際に、 セルにその値を入力するような マクロを作成しようとしています。 またコンボボックスは標準で6月が表示されるようにしたいと思います。 ユーザーフォームのコードの一部です。 Private Sub UserForm_Initialize() Dim m As Integer For m = 1 To 12 UserForm1.ComboBox1.AddItem m Next ComboBox1.ListIndex = 6 Private Sub CommandButton1_Click() 'ユーザーフォームを閉じる Unload UserForm1 mold  '↑フォームを閉じた後に実行される標準モジュールのマクロ名です End Sub 標準モジュールのコード 名称 「mold」 Sub mold() ActiveWorkbook.SaveAs _ Filename:="C:\_" & UserForm1.ComboBox1.Text & "月", _ FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close ThisWorkbook.Activate ' End Sub の様に作成して実行してみたのですが、 コンボボックスで11月を選択しても 6月のままのファイルになってしまいます。 どのようにしたら、 コンボボックスで選択した値を ファイル名として保存できるでしょうか? 全部のコードを記載しますと 長くなってしまうと思い、 関連するコードを記載して質問しました。 分かりづらい所もあるかと思いますが よろしくお願いします。

  • VBA 引数にcombobox,Range

    おはようございます。 質問内容が明確?で無い点が多いかもしれませんが、 質問させていただきます。 まず、Excel2003を使い、フォーム上にはコンボボックスを置いています。 プロシージャ?の中の引数?として コンボボックスの名前を使いたいと思っています。 Private Sub UserForm_Initialize()  Call TEST(Combobox1,"A1") End sub Sub TEST(Byval ComboboxName,Byval TEST_Range)  ComboboxName.AddItem "A"  TEST_Range="テスト" End Sub 適当に作成してみましたが… TESTを実行したら、 引数にあるコンボボックスに”A"という値を追加し、 TEST_Rangeに"テスト"と入力したいです。 引数として宣言する際、Stringは違うと思うのですが、 どうやって宣言?すれば良いのでしょうか。 上記例では、TESTを実行したら Combobox1に"A"という値が追加され、 A1に"テスト"と入力されるようになっています(それを目的とします) 分からない点がありましたら、どんどん聞いてください。 よろしくお願いします!

  • Excel コンボボックス2つ以上の時のコード

    ユーザーフォームでコンボボックスを2つ作ったのですが、1つだけのときはうまくいったのですが、二つ目をつくったら、エラーが出てしまいました。 コード入力は、Initializeに入力してあります。 Private Sub UserForm_Initialize() ComboBox1.Style = fmStyleDropDownCombo ComboBox1.RowSource = "sheet1!F2:F7" ComboBox1.ListIndex = -1 End Sub Private Sub UserForm_Initialize() ComboBox2.Style = fmStyleDropDownCombo ComboBox2.RowSource = "sheet2!B2:B3" ComboBox2.ListIndex = -1 End Sub コンボボックス1だけはうまくいったのですが、コンボボックス2をつくったら名前が適切でありませんとエラーがでました。 どのようにしたらいいですか?教えてください。

  • Excel:「フォーム」のボタンで引数を渡すプロシージャは呼べないですか?

    Win2K、Excel97-2000-2002を使用しています。 Book1.xlsに固定文字列のメッセージボックスを表示するプロシージャ "A" を作成しました。 Book2.xlsのSheet1上に「フォーム」コントロールボックスのボタンを貼り付けました。 マクロの登録でBook1.xls!Aを指定しました。 ボタンを押下すると、固定長文字列のメッセージボックスが表示されます。 このプロシージャ "A" に引数を持たせ、 任意のセルの値を渡したいと思っているのですが、 「フォーム」コントロールのボタンでは、引数を渡すことは不可なのでしょうか。 御教授、御鞭撻の程、何卒宜しくお願い致します。

  • Excelマクロのコンボボックスについて

    初めてマクロを扱います。 マクロに詳しい方、コードをご教授ください。 Excelマクロを使い下記の機能をシートに盛り込みたいと考えております。 【実現したいこと】 ・シート上にコンボボックスを作成し、コンボボックスで選択した項目で絞り込めるようにする。 ・コンボボックスに格納される項目は、A列の重複を除外し、昇順で並べ替えたもの。 ・またコンボボックスに格納する項目は日々レコード追加されるため、コンボボックスの中身にも随時反映するようにしたい。 ・コンボボックスには「全て表示」というアイテムを追加し、「全て表示」を選択すると、フィルターが解除される。 わかりにくいかもしれませんが上記のことを実現したいと考えております。 どうかお知恵をお貸しください!! よろしくお願いします!!

  • コンボボックスで名前を指定後、新規シート名に使用する方法

    お世話になります。 UserFormでコンボボックスを作成しました。 そこでリストを選択した後、 新規シートを作成するマクロまではできたのですが、 その新規シートにリストで選択した名前を入力させるには、 どのようなマクロを組めばよいのでしょうか?

  • Excel vbaでフォームの起動が失敗する

    Excelシート上に設置したユーザフォームを開くボタンを実行するとフォームが開かずに新規のExcelシートが開いてしまいます。 以前までは正常に作動していたんですが••• ちなみにボタンの実行前に vbaの編集画面を一度でも開いた後はボタンを押したら正常にフォームが開くんです。 フォームを開くコード sub 起動() UserForm1.Show End Sub フォームのInitializeはコンボボックスのみです。 原因がわかりましでしょうか?

  • エクセルVBA コンボボックス

    今データ入力用のフォームmainがあります。 そこで複数のデータを入力していくのですが、そこでわからなくなりました。 入力用コンボボックスがひとつだけのときは Private Sub userform_Initialize() Dim 配列(2) 配列(0) = "データ1" 配列(1) = "データ2" 配列(2) = "データ3" 入力用コンボ.List = 配列 End Sub Private Sub 入力用コンボ_Change() MsgBox 入力用コンボ.ListIndex End Sub としていたのですが、複数になった場合の理屈を含めわかりません。 一つの入力用フォームにコンボボックスが複数あった場合はどうすればよいのですか?