- ベストアンサー
Excel_VBAで、Windows名の羅列
Excelのウィンドウの名前をコンボボックスのListに設定する方法を模索しています。下記の方法では、上手く行きません。どなたか詳しいかたがいらっしゃいましたら教えて頂けないでしょうか? 宜しくお願い致します。 Private Sub UserForm_Initialize() Dim MyList() As String Dim MyWin As Windows Dim i As Integer ReDim MyList(1 To Windows.Count) i = 1 For Each MySh In Windows MyList(i) = MyWin.Name i = i + 1 Next Me.ComboBox1.List = MyList End Sub
- wan_wan
- お礼率34% (114/329)
- オフィス系ソフト
- 回答数3
- ありがとう数2
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 お久しぶりになります。 For Each MySh In Windows 'MySh ではなくて、MyWin ですね。 MyList(i) = MyWin.Name 'プロパティはCaption です。 i = i + 1 Next でも、通常は、以下のように、Windowsよりも、Workbooks のWorkbook を取ったほうがよいですよ。開いた順に並んでいきます。 Private Sub UserForm_Initialize() Dim MyList() As String Dim MyWb As Variant '一応、Variant型にしています。 Dim i As Integer ReDim MyList(1 To Workbooks.Count) i = 1 For Each MyWb In Workbooks MyList(i) = MyWb.Name i = i + 1 Next Me.ComboBox1.List = MyList End Sub
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17068)
Sub test01() Dim MyList() As String Dim MyWin As Object Dim i As Integer ReDim MyList(1 To Windows.Count) i = 1 MsgBox Windows.Count For Each MyWin In Windows MsgBox MyWin.Caption i = i + 1 Next End Sub のようにすると、表示されるものでよいですか。 時間がないので >コンボボックスのListに設定はまた。 > MySh はおかしくないですか。 シート名の一覧をリストするのですか。
お礼
おはようございます。 Captionでやってみます。 しかし、Text、Value、Name、Captionと同じような名前が出てきて頭がごちゃごちゃになっちゃいますね? ありがとうございました。
- pbforce
- ベストアンサー率22% (379/1719)
Me.Combobox1.AddItem MyList
関連するQ&A
- エクセルVBAのコンボボックス
エクセル2002使用です。 生年月日とかを入力できるコンボボックスを作っているのですが、同じコンボボックスを5つ作ろうとしています。例えば和暦を入力するには Private Sub userform_initialize() With ComboBox(1) .AddItem "昭和" .AddItem "平成" End sub でうまくいくのですが、2個目から5つ目まで同じものを作成する場合、 With ComboBox(2) ・・・ With ComboBox(3) ・・・ と、コードを記述していかないと駄目なのでしょうか? できれば With ComboBox(1: 5) とか、 変数を使って Private Sub userform_initialize() Dim i As Integer For i = 1 To 5 With ComboBox(i) .AddItem "昭和" .AddItem "平成" End With Next End sub といった具合にまとめたいのですが、コンパイルエラーとなってしまいます。 初歩的な質問で申し訳ないのですが、よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- VBAのComboBoxについて
UserForm1にComboBoxが8個(ComboBox1~8)あります。 各ComboBoxはSheet1の下記列に入力されているリストを表示します。 ComboBox1 : A列 ComboBox2 : B列 ComboBox3 : C列 ComboBox4 : D列 ComboBox5 : E列 ComboBox6 : F列 ComboBox7 : G列 ComboBox8 : H列 ComboBox9 : I列 ComboBox10 : J列 そこで、UserForm1の各ComboBoxでデータ選択する際に、リストにある場合はそれを選択し、リストにない場合はComboBoxに新しいデータを入力し、UserForm1のCommandButton1を押下時にその新しいデータをSheet1の各列に追加したいのですが、どのようにしたらよいのでしょうか。 Sheet1にあるリストをComboBoxに表示するところまではできています。 ※ComboBoxの番号とリストの列番号を一致させています。 --------------------------------------------------------------- Private Sub UserForm_Initialize() Dim lastrw As Integer, retu As Integer, i As Integer For retu = 1 To 10 lastrw = Sheet1.Cells(1, retu).End(xlDown).Row For i = 1 To lastrw - 1 Controls("ComboBox" & retu).AddItem Sheet1.Cells(i + 1, retu).Value Next i Next retu End Sub ---------------------------------------------------------------
- ベストアンサー
- Visual Basic
- EXCEL VBA 多種のコンボボックス操作
こんばんは。 現在ユーザーフォーム上に10個のコンボボックスを配置しています。 1-8は共通リストを、9と10は別々のリストを表示させたいのですが・・ Private Sub UserForm_Initialize() Dim X, No, Y As Integer With UserForm2 For No = 1 To 8 For X = 0 To 7 .Controls("ComboBox" & No).AddItem Worksheets("Letter").Cells(X + 1, 10).Value Next Next For Y = 0 To 7 .ComboBox9.AddItem Worksheets("Letter").Cells(Y + 1, 11).Value .ComboBox10.AddItem Worksheets("Letter").Cells(Y + 1,12).Value Next End With End Sub 上記のコードですが、エラーが出てどうにも行き詰っています。 Private Sub UserForm_Initialize() Dim X, No As Integer For No = 1 To 8 For X = 0 To 7 UserForm2.Controls("ComboBox" & No).AddItem Worksheets("Letter").Cells(X + 1, 10).Value Next Next End Sub ↑だと1-8まで問題なく動くのですが・・・ すみませんが、アドバイスお願いいたします。
- 締切済み
- オフィス系ソフト
- VBA オブジェクトが必要です エラー424
VBA初心者です。 初歩的な質問で申し訳ありません。 ユーザーフォームのコンボボックスにユーザーリストを読みこみプルダウンする構文です。 以下を実行すると 実行時エラー 424 オブジェクトが必要です という警告が出ます。 どこを直せばいいのかわかりません。 詳しい方教えて下さい。宜しくお願いします。 private sub userform_initialize() dim 最終行 as integer dim i as integer 最終行 = worksheets(゛meisai″).cells(Row.count,8).end(xlup).Row for i = 1 to 最終行 combobox1.addItem worksheets(″meisai゛).value next i end sub
- 締切済み
- オフィス系ソフト
- VBAから変更した時だけイベントを発生させない方法
Excel VBA で、コンボボックスの選択をユーザーが変更した時はイベントハンドラが呼び出されて処理をしていますが、VBAのコードからコンボボックスの選択を変更した時には、このイベントハンドラが呼び出されないようにしたいのですが、どのように記述すればよいでしょうか。 例えば、下記のコードの (A) の部分で、VBAのコードからコンボボックスの選択を変更していますが、ここでイベントが発生しないようにしたいのですが、Application.EnableEvents = False を記述してもイベントが発生していますがなぜでしょうか。どのように記述すれば (A) の部分でイベントが発生しなくなりますでしょうか。 よろしくお願いします。(Windows7 , Excel2010 ) ---Module1---------- Option Explicit Sub main() UserForm1.Show End Sub ---UserForm1-------- Option Explicit Private Sub UserForm_Initialize() Dim i As Integer ComboBox1.Style = fmStyleDropDownList For i = 1 To 30 ComboBox1.AddItem Format(i, "00") Next i End Sub Private Sub CommandButton1_Click() Dim num As Integer Dim index As Integer num = ComboBox1.ListCount index = ComboBox1.ListIndex If index = num - 1 Then Application.EnableEvents = False ComboBox1.ListIndex = -1 '<----------(A) Application.EnableEvents = True Else ComboBox1.ListIndex = index + 1 End If End Sub Private Sub ComboBox1_Change() MsgBox ("ComboBox1_Changeイベント発生") End Sub ------------------------------------
- ベストアンサー
- Excel(エクセル)
- 連携する複数のコンボボックスに同じリストを設定
初心者なので質問がトンチンカンでしたらすみません ユーザーフォームにコンボボックスを計12個配置しています ComboBox1で選択した値に応じてComboBox2のリストが選ばれる ComboBox3で選択した値に応じてComboBox4のリストが選ばれる ・・・・・・・ ComboBox11で選択した値に応じてComboBox12のリストが選ばれる という風に設定したいのですが、コンボボックスの数だけリストの設定を するのが大変なので見よう見まねで下記の様にしてみたのですが全く 動きません。 UserForm_Initializeでイベント発生させてるので動かないのでしょうか? どこがおかしいのかご教授お願いします。 Private Sub UserForm_Initialize() Dim i As Variant Dim Ari As Variant Ari = Array("1", "3", "5", "7", "9", "11") For Each i In Ari If UserForm4.Controls("ComboBox" & i).Value = "車いす" Then With UserForm4.Controls("ComboBox" & i + 1) .ColumnCount = 5 .List = Worksheets("商品マスタ").Range("車いすテーブル").Value End With ElseIf UserForm4.Controls("ComboBox" & i).Value = "車いす付属品" Then With UserForm4.Controls("ComboBox" & i + 1) .ColumnCount = 5 .List = Worksheets("商品マスタ").Range("車いす付属品テーブル").Value End With ElseIf UserForm4.Controls("ComboBox" & i).Value = "特殊寝台" Then With UserForm4.Controls("ComboBox" & i + 1) .ColumnCount = 5 .List = Worksheets("商品マスタ").Range("特殊寝台テーブル").Value End With End If Next End Sub
- ベストアンサー
- Visual Basic
- ExcelVBAでのユーザーフォームについて
ご回答ありがとうございました。 これといった資料がなく(探し方が悪いのかもしれませんが)、少ない経験値で複雑なというか面倒な処理のマクロ(VBA)を組まされることになり、困っているところです。当初の話だと「勉強しながらでよい」ということだったのですが、いろいろと仕事が次々と舞い込んできて、そんな余裕もなくせっぱ詰まり少ない知識で必死にやっています。 先にご回答いただいた内容で是非アドバイスをいただきたいと思い、新たに質問させていただきました。 ユーザーフォームでマルチページを作っています。そこでもコンボボックスを使うのですがそこの記述方法をアドバイス下さい。やっぱり記述場所がおかしいのか、クリックするとリストの内容がコンボボックスをクリックした分だけ繰り返してしまうことがあります。 ////////////////////////////////////////////////////// Private Sub UserForm_Initialize() Dim sh As Worksheet Set sh = Worksheets("対象年") Dim i As Integer Dim lastRow As Integer lastRow = sh.Cells(Rows.Count, 1).End(xlUp).Row With ComboBox1 For i = 2 To lastRow If ComboBox1 = "" Then .AddItem sh.Cells(i, 1).Value End If Next i End With End Sub ////////////////////////////////////////////////////// Private Sub ComboBox1_DropButtonClick() Dim sh As Worksheet Set sh = Worksheets("対象年") Dim i As Integer Dim lastRow As Integer lastRow = sh.Cells(Rows.Count, 1).End(xlUp).Row With ComboBox1 For i = 2 To lastRow If ComboBox1 = "" Then .AddItem sh.Cells(i, 1).Value End If Next i End With End Sub ////////////////////////////////////////////////////// とまぁ、結局コードは同じなのですが。 それと、結果をラベルに出させる場合には回答で記述いただいた ////////////////////////////////////////////////////// Private Sub ComboBox1_Change() Dim vTgYear As Variant vTgYear = ComboBox1.Value Label1.Caption = vTgYear - 1 & "~" & vTgYear + 1 & "年" End Sub ////////////////////////////////////////////////////// で、よいでしょうか? よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- win7 コンボボックス複数配置
VBA初心者です。 ユ-ザ-フォ-ムにてコンボボックスを3箇所配置し、それぞれ別シ-トを参照しA列にコンボ1、B列にコンボ2、C列にコンボ3にするにはどうしたらいいでしょうか、教えてください。 Private Sub UserForm_Initialize() Dim i As Integer combobox1.Clear For i = 1 To Worksheets("項目デ-タ").Cells(Rows.Count, 1).End(xlUp).Row combobox1.AddItem Worksheets("項目デ-タ").Cells(i + 2, 1).Value Next End Sub この文章は1つはできますが2つ3つ・・・の文章がわかりません。お願いします。 エクセル2010を使用してます。
- ベストアンサー
- Excel(エクセル)
- 同じコンボボックスを二つ以上作る方法
今同じ内容を表示するコンボボックスを二つ作ろうと思っているのですがつくり方がわかりません。 どのようにすれば一つのプログラムで二つのコンボボックスを作れるのでしょうか 例: 表示では はい いいえ プログラム: Private Sub UserForm_Initialize() ComboBox1.AddItem "はい" ComboBox1.AddItem "いいえ" End Sub Private Sub UserForm_Initialize() ComboBox2.AddItem "はい" ComboBox2.AddItem "いいえ" End Sub ↑のような作り方ではなく簡略化して Private Sub UserForm_Initialize() ComboBox●.AddItem "はい" ComboBox●.AddItem "いいえ" End Sub ●部を変更できれば一つのプログラムでコンボボックスを2つ操作できると思うのですがどのようにすればよろしいでしょうか?
- ベストアンサー
- Visual Basic
- Excel2010 VBA ユーザーフォーム
コンボボックスのリストに表示されているときはA列とB列が表示されているのに、 1つをクリックして選択した後はA列しか表示されません 選択した後もそのまま表示を維持したいのですが… ↓こんな感じでやりました Private Sub UserForm_Initialize() Dim lRow As Long With Worksheets("Sheet1") lRow = .Range("A" & Rows.Count).End(xlUp).Row End With With ComboBox1 .ColumnCount = 2 .ColumnWidths = "50" .RowSource = "Sheet1!A2:B" & lRow End With End Sub よろしくお願いします
- ベストアンサー
- オフィス系ソフト
お礼
おはようございます。 本当にお久しぶりです。ただでさえ、サンデープログラマーなんですが、最近は、少し.NET(VSTO)に手を出していて、余計頭がごっちゃまぜになっている状況です。 Windowsにしたのには、訳があって、一つのブックを新しいウィンドウを開く(Book1:1、Book1:2)となった場合に、Workbooksでは、取得出来ないウィンドウが出てくるためです。 MyShとなっていたのは、同時にシート名の羅列のComboBoxも作っていてコピーをたためです。自分の中では、Shのまま使っていて、投稿するときに急遽winに書き換えたので、残骸です。 Captionで、やってみましたところうまくいきました。 ありがとうございました。