- ベストアンサー
エクセルVBA リストビュー選択項目を別フォームへ
- エクセル2013のVBA初心者ですが、リストビューで選択した項目を別のユーザーフォームに反映させる方法が分かりません。
- リストビューの情報がネット上にも少なく、正しいコードがわからないため困っています。
- Userform1上のListview1で選択した項目の駅名・顧客名・店舗名をUserform2のTextbox1・Textbox2・Textbox3に反映させたいです。どなたかヒントをいただけますか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 > Listview1はSheet1を呼び込んだものが反映されており > 左から駅名・顧客名・店舗名が記載されています。 > Listview1でどれかを選択してコマンドボタン1を押したら > Listview1で選択した項目の > 駅名をUserform2のTextbox1に > 顧客名を〃のTextbox2に > 店舗名を〃のTextbox3に反映したいのですが こんな感じのこと? ' ' /// Private Sub CommandButton1_Click() With Me.ListView1.SelectedItem UserForm2.TextBox1.Value = .Text UserForm2.TextBox2.Value = .SubItems(1) UserForm2.TextBox3.Value = .SubItems(2) End With ' UserForm2.Show vbModeless End Sub ' ' /// UserForm_Initialize に書く場合は、 Me を UserForm1 に UserForm2. を 省く だけで要領は一緒です。 ただ、以上は、行ラベルが[駅名]である場合の話で、 [駅名]:[顧客名][店舗名]のような配置を想定しています。 説明にはないけれど、もしも、行ラベルが他にあって、 [行ラベル]:[駅名][顧客名][店舗名]のような配置である、という場合は、 ' ' /// Private Sub CommandButton1_Click() With Me.ListView1.SelectedItem UserForm2.TextBox1.Value = .SubItems(1) UserForm2.TextBox2.Value = .SubItems(2) UserForm2.TextBox3.Value = .SubItems(3) End With ' UserForm2.Show vbModeless End Sub ' ' /// というようなことなのかも知れません。 その違いを判断する情報がなくて回答が付き難かったのかも知れませんが、 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10144671605 知恵袋の方では[施主]:[駅][店舗]という配置だったりもして、 尚更混乱してしまいました。 リンク先のコードを例に(以下、リンク先より引用・抜粋) With ListView1 .ColumnHeaders.Add , "施主", Sheet1.Range("B2").Value, 120 .ColumnHeaders.Add , "駅", Sheet1.Range("A2").Value, 50 .ColumnHeaders.Add , "店舗", Sheet1.Range("C2").Value, 80 For i = 2 To LastRow With .ListItems.Add .Text = Sheets("検索").Cells(i, 2).Text ' ★1 .SubItems(1) = Sheets("検索").Cells(i, 1).Text ' ★2 .SubItems(2) = Sheets("検索").Cells(i, 3).Text ' ★3 End With Next End With (以上、リンク先より引用・抜粋) ★1の記述の左辺に対応して ListView1.SelectedItem.Text ★2の記述の左辺に対応して ListView1.SelectedItem.SubItems(1) ★3の記述の左辺に対応して ListView1.SelectedItem.SubItems(2) のように、実際のリスト設定の記述を参照するようにすれば、 迷うことなく、求めるプロパティが取得できるのではないでしょうか。 蛇足ですが、一応、この手の質問では、 実際の記述を見た人 か 開発者本人 にしか判らない情報については、 質問を読んだ人が状況を再現できる程度に、はっきり示せるよう、 これから質問する際には留意してみてください。 尚、当方のメインの開発環境(xl2010 x64 = 64ビットエクセル)では、 common controls(mscomctl.ocx) は標準的に使用不可です。 ProgressBar, TreeView, ListView, ,,, 等を扱う場合は、 使えない環境もあるということを意識しておいた方が好いでしょう。 とりあえず、以上です。 補足があれば、書いてみて下さい。 環境を用意するのに時間が掛かるので、短時間での返信は難しいですが、 不足があれば、なるべく、お応えします。
お礼
realbeatinさん 相変わらず質問がダメダメでお手数をおかけし申し訳ありませんでした。 Userform2を開いた時にUserform1のリストビューでの選択情報を 読み込んでくる・・というのをやりたかったのですが Userform1のPrivate Sub CommandButton1_Click()にて Userform1を閉じてUserform2を開く、をやってしまっていたので UserForm_Initializeで何とかやるしかない、 でもUserform1は閉じちゃってるし・・・と延々と悩んでいました。 Private Sub CommandButton1_Click()に [行ラベル]:[駅名][顧客名][店舗名]のような配置である、という場合の方の やり方を記載してやりたい動作が出来ました。 言葉足らずの質問でここまで読み解いて回答していただき感謝しています。 自分のやりたい事は決まっているのに 何をやれば良いのか、何が分からないか分からない・・・ こんな状態で藁にもすがる思いで質問してしまいましたが もしまた行き詰って質問する場合がございましたら もっと分かりやすい質問が書けるように気を付けます。 この度は本当にありがとうございました。