リストボックスの選択した内容をテキストボックスに反映させようと考えているのですが、
ヘルプを見てみるとForEachをつかっているようです。
以下ヘルプを引用
Sub RowsSelected()
Dim ctlList As Control, varItem As Variant
' リスト ボックスを示す Control オブジェクトを取得します。
Set ctlList = Forms!社員!在籍支社
' 選択項目を列挙します。
For Each varItem in ctlList.ItemsSelected
' 連結列の値を表示します。
Debug.Print ctlList.ItemData(varItem)
Next varItem
End Sub
そこでForEachを使う必要性はないんじゃ?と思い、
Debug.Print ctlList.ItemData(ctlList.ItemSelected)
としたのですがエラーになってしまいます。
なぜForEachを使う必要があるのでしょうか?
ご教示よろしくお願いいたします。
ctlList.ItemsSelectedは、Itemsと複数形になっているので
リストボックスで複数選択出来るようになっているからなのでは?
ご返答ありがとうございます。
説明不足でしたね。
選択項目はひとつなのですが私の書き方ではエラーになってしまいます。
ForEachの意味もいまいちわからないのですが、
分かりやすいサンプルなどありませんでしょうか?
検索サイトでFor Eachとは 等と検索しても全くHITしないので。
他力本願で申し訳ないですがどうかよろしくお願いいたします。
>Debug.Print ctlList.ItemData(ctlList.ItemSelected)
Debug.Print ctlList.ItemData(varItem)
ですね。。。
間違えました。
気にしないでください。
For Each varItem in ctlList.ItemsSelected
の意味ですが、
ctlList.ItemsSelectedで選択されているアイテムを
順番に、varItemに入れていくのです。
For Eachを使わない場合、次のコードに
なります。長いですよね、コード w
無駄なので、For Eachを使うわけです。
For i=0 to List1.ListCount -1
List1.Index = i
If List1.Selected = True Then
xxxx = List1.ItemData(i)
End If
Next i
もし、選択項目が1つならFor Eachを使わずに
Debug.Print ctlList.ItemData(ctlList.ItemsSelected(0))
で、OKです。
>>LESIA
GJ!
選択行がsingleならその通り!
おぉ!
親切にありがとうございます。
クラゲ様、なんとなくForEachの意味わかったきがします♪
LESIA様のコードで正しく動作しました。
皆様ありがとうございます。
クラゲ様のHPも拝見させていただきました。
色々な言語ができてすごいですね。
感謝感謝です。
ItemsSelected(0)というのが選ばれている項目の一件目ということなんですね。
私も勉強になりました。
ツイート | ![]() |