エクセルVBAでフォームのListboxのリスト数を取得する方法

このQ&Aのポイント
  • エクセルVBAを使用して、フォームのリストボックスのリストの数を取得する方法について教えてください。
  • リストボックスのリストの数を取得するために、ActiveWorkbook.ListBoxes(Application.Caller)を使用しましたが、エラーが発生しました。
  • また、リストの2番目にセットされている項目の文言を取得する方法も知りたいです。
回答を見る
  • ベストアンサー

エクセルVBAでフォームのListboxのリストの数を取得するには?

ワークシート上に貼り付けたリストボックスがあります。 このリストボックスはOLEObjectではなくフォームのリストボックスです。 このリストボックスにリストが何項目セットされているのか取得したいのです。 Set myLb = ActiveSheet.ListBoxes(Application.Caller) MsgBox myLb.Name MsgBox myLb.ListIndex.Count とやってみたところ、名前は取得できましたが、項目数はエラーになってしまいました。 あと、可能ならListの2番目にセットされている項目の文言を取得する方法もあれば知りたいと思います。 宜しくお願いします。

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

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

下記を試してみてください。 MsgBox myLb.ListCount MsgBox myLb.ListIndex MsgBox myLb.List(myLb.ListIndex) MsgBox myLb.List(2)

merlionXX
質問者

お礼

ありがとうございます。 質問以外のところまで完璧なご回答をいただき感謝したします。 急いでいたのでとてもたすかりました!!

関連するQ&A

  • エクセルVBAでフォームのListboxをスクロールするには?

    エクセルVBAでフォームのListboxをスクロールするには? ワークシート上に貼り付けたリストボックスがあります。 このリストボックスはOLEObjectではなくフォームのリストボックスです。 For Each lb In .ListBoxes If lb.ListCount <= 4 Then lb.ListIndex = 1 Else lb.ListIndex = 16 ここで16番目が見えるようにスクロールしたいのです。 End If Next lb このスクロールさせる方法がわかりません。 ご教示いただければ幸いです。

  • エクセルVBA Dialogsheetについて

    何をいまさらダイアログシートなどとおっしゃらないで下さいませ。 今現在表示されているダイアログシートの名前を取得したいのです。 たとえばワークシート上にフォームのボタンを配置し、ボタンに以下のマクロを登録しておけば正しくシート名を返します。 Sub test01() MsgBox ActiveSheet.Name '1 MsgBox ActiveSheet.Shapes(Application.Caller).Parent.Name '2 End Sub ところが同じボタンをDialogsheetに配置し、そのダイアログを DialogSheets("Dialog1").Show  で、ワークシート上に表示した段階でボタンをクリックすると、1.ではワークシート名が帰り、2ではシート名が違うのでエラーになってしまいます。 (ワークシートをアクティブにしないで、ダイアログシート上で右クリックして「ダイアログの実行」でダイアログを表示させれば1,2ともにDialog1とDialogSheet名を返しますが) もちろん以下のようにDialogsheet名を明記すれば正しく返りますが、Application.Callerからダイアログシートの名前を取得したいのにDialogsheet名を明記するのでは無意味です。 Sub test02() MsgBox ActiveSheet.Name '1 MsgBox DialogSheets("Dialog1").Shapes(Application.Caller).Parent.Name '2 End Sub 何か良い方法はないでしょうか? 現在はやむをえずダイアログを表示させる際、以下のように変数に格納していますが、これもApplication.Callerからダイアログシートの名前を取得するにはあまり意味がないように思います。 Dim DS Sub D1_Start() DS = "Dialog1" DialogSheets("Dialog1").Show End Sub Sub test03() MsgBox ActiveSheet.Name '1 MsgBox DialogSheets(DS).Shapes(Application.Caller).Parent.Name '2 End Sub エクセル2000です。 宜しくお願いします。

  • エクセルVBA フォームのDropDownのリストが幾つあるか取得するには?

    いつもお世話様です。エクセル2000です。 コントロールツールボックスではなく、フォームのコンボボックス(DropDown)のリストが幾つ設定してあるかをVBAで取得する方法を教えてください。ためしに下記のようにやったらエラーでした。 Sub TEST01() MsgBox Worksheets("入力").DropDowns("Drop Down 1").ListIndexes.Count End Sub

  • エクセルVBAでOptionButtonのオンオフ取得

    ワークシート上に貼り付けてあるオプションボタンの状態の取得ですが、フォームのオプションボタンなら 例えば、 MsgBox ActiveSheet.OptionButtons("Option Button 44").Value で、オンなら1、オフなら-4146が返ります。 またActiveSheet.OptionButtons("Option Button 44").Value=xlOnで オンに出来ます。 ところがフォームじゃないコントロールツールボックスのオプションボタンは MsgBox ActiveSheet.Shapes("OptionButton30").Valueでも MsgBox ActiveSheet.Controls("OptionButton30").Valueでもエラーになります。 どうやって取得すればいいのでしょうか? どうやてOn Off を指示すればいいのでしょうか?

  • Excel VBA ListBoxについて

    お世話になります。 Excelで以下のようなフォーム画面を作成しております。 1.フォーム画面には、リストボックス、テキストボックス、登録ボタンを設定 2.リストボックスには、Sheet1のデータが表示される。 3.リストボックスのレコードを選択すると、選択した値がテキストボックスに表示される。 4.登録ボタンをクリックすると、テキストボックスのデータが、Sheet1に反映される。 今1~3まではできましたが、4で悩んでおります。 テキストボックスの値を取得してセルに反映させようと以下のコードを書きました。 'リストボックスで選択したレコード数 ListNo = Me.ListBox1.ListIndex 'TextBox1の値を、Sheet1のセルにセット Sheets("sheet1").Cells(ListNo, 1).Value = Me.TextBox1.Value  これを実行すると、何故かここから3のリストボックスのレコードをクリックしたイベントを呼びます。 Private Sub ListBox1_Click() クリックしてもいないのですが、Private Sub ListBox1_Click() を呼ばないようにしたいので、 ListBoxをEnableプロパティをfalseにしても、呼んでました。 呼びにいかない方法をご教授いただけますでしょうか。 よろしくお願いいたします。

  • エクセルでObjectがあるセル番地を取得するマクロは?

    エクセルのワークシート上にフォームのチェックボックスが多数配置されています。そのチェックボックスのTOPにあたる位置がセル番地で言えばどこになるのかを取得する方法はないでしょうか? TOP位置は以下のようにチェックボックスに登録したマクロで簡単に取得できるのですが・・・。 セル番地を取得して、やりたいことは、そのセルの右隣のセルの値を取得することです。もし、そのセルの右隣のセルの値を簡単に取得できるなら別にTOP位置のセル番地が取得できなくともかまいません。 Sub test01() MsgBox ActiveSheet.CheckBoxes(Application.Caller).Top End Sub

  • EXCELのユーザーフォームのリストについて

    WinXP(sp3) EXCEL2003 いつも本当にお世話になっております。 また、1つ教えていただきたいのですが、ユーザーフォームのリストボックよりデータ取得で、必ずクリック(選択) しなければ、エラーになると思うのですが、ここを選ばない場合は、1行目選択としたいのですが、 どうもうまくいきません。 どなたかご教授いただけないでしょうか? いかにコードを転記いたします。 Private Sub CommandButton1_Click() gy = UserForm.ListBox1.ListIndex If gy = -1 Then MsgBox "1行目選択" Worksheets("データ入力シート").Cells(1, 2).Value = ListBox1.List(2, 35)←ここで実行時エラー381 Else                                          Listプロパティの値を取得で                                            きません。プロパティのインデッ                                             クスの配列が無効ですと                                              なります。   Worksheets("データ入力シート").Cells(1, 2).Value = ListBox1.List(ListBox1.ListIndex, 35) End If Unload Me End Sub

  • excel vba listboxについて

    EXCELのVBA LISTBOXに関することで質問です。 ワークシート1のA2-5セルに取引先名を入力してあります。 UF1という名前のユーザーフォームの中にリストボックスを作成し、ワークシート1のA2-5の取引先を表示するには、 Private Sub UserForm_Initialize() Dim torihiki As String torihiki = Worksheets(1).range("A2:A5") UF1.ListBox1.List() = torihiki End Sub と打ち込んでいます。 ちなみに、ユーザーフォームは以下のようにOKボタンで閉じるようにしました。 Private Sub CommandBottan1_Click() unload UF1 End Sub 質問したいのはここからですが、 上のユーザーフォーム内のリストボックスで選択された取引先をTRHKという変数に代入したい場合、どうしたらいいのでしょうか? 私の少ない知識を振り絞って以下のように考えてみたのですが、 TRHK = UF1.ListBox1.List() としても代入されていないようです。 List()ではないメソッドが必要なのだと思うのですが・・・・ .Selectedとかでしょうか? どなたか、ご教授願います! 宜しくお願い致します。

  • エクセル2013のリストボックス

    エクセル2010でワークシート上に配置したリストボックスがあります。 ActiveXではなくフォームコントロールのリストボックスです。 これに11項目のリストを設定してあります。 2010ではまったく問題がないのですが、エクセル2013で開くと下の2項目が選択できません。 2010と2013では互換性がないのでしょうか?

  • VBAでオプションボタンなどそれぞれの数を調べたい

    エクセル97です。 ワークシート上にテキストボックス、コンボボックス、オプションボタン、ラベルが配置されています。 すべて、ツールバーのフォームから出したものです。 これら全部の数をもとめるには Sub TEST() Dim x As Integer x = ActiveSheet.Shape.Count MsgBox x End Sub これで出てきますし、テキストボックスならshapesをTextboxes、ラベルならLabelsに変えればいいのですが、オプションボタンやコンボボックスの場合、どう変えれば良いのかわかりません。教えてください。特にオプションボタンは数が多くて困っています。

専門家に質問してみよう