Excel (VBA) |
![]() ![]() |
(指定なし : 指定なし)
数値によるリストボックスの指定
投稿日時: 20/12/24 15:35:24
投稿者: rodeo540
|
---|---|
度々の連投すみません。
|
![]() |
投稿日時: 20/12/24 17:48:56
投稿者: WinArrow
|
---|---|
Listbox、Textboxはどこのコントロールでしょうか?
|
![]() |
投稿日時: 20/12/24 17:54:22
投稿者: WinArrow
|
---|---|
>Textbox→Listboxをする際にどのプロパティでListの選択ができるのか分かりません。
|
![]() |
投稿日時: 20/12/24 17:59:28
投稿者: rodeo540
|
---|---|
ユーザーフォームになります。
|
![]() |
投稿日時: 20/12/24 18:08:11
投稿者: WinArrow
|
---|---|
引用: なぜ Listboxを選択数必要があるのですか? TextBox1からListBox1への転記方法 例 Private Sub TextBox1_AfterUpdate() Me.ListBox1.List(Me.ListBox1.ListIndex, 1) = Me.TextBox1.Text End Sub |
![]() |
投稿日時: 20/12/24 21:24:59
投稿者: WinArrow
|
---|---|
また、Listで複数選択する際のプロパティはどのような形になるのでしょうか
|
![]() |
投稿日時: 20/12/24 23:31:19
投稿者: hatena
|
---|---|
引用: ご希望のことは下記のようなことでしょうか。 Private Sub TextBox1_AfterUpdate() On Error Resume Next Me.ListBox1.Value = Me.TextBox1.Value If Err <> 0 Then Me.ListBox1.Value = "" On Error GoTo 0 End Sub 引用: MultiSelectプロパティに fmMultiSelectExtended か fmMultiSelectMulti を設定すればいいでしょう。 |
![]() |
投稿日時: 20/12/25 09:44:34
投稿者: WinArrow
|
---|---|
>Listindexでは破線で選択できますが、青色のハイライトがついてきません
|
![]() |
投稿日時: 20/12/25 10:41:34
投稿者: rodeo540
|
---|---|
皆様、色々ありがとうございます。
|
![]() |
投稿日時: 20/12/27 13:50:41
投稿者: rodeo540
|
---|---|
お返事遅くなりました。
|
![]() |
投稿日時: 20/12/27 13:57:55
投稿者: rodeo540
|
---|---|
WinArrow さんの引用: それぞれのChangeイベントに対応するように、 フラグを立てて片方のboxが変わっているときは 一方はChangeに反応しないようにしているつもりです。。。 ご確認よろしくお願いいたします。 |
![]() |
投稿日時: 20/12/27 13:59:54
投稿者: rodeo540
|
---|---|
hatena さんの引用:引用: WinArrowさんの通り、LisBoxのvalueはNullとなってしまいます。 また、当然 fmMultiSelectExtended か fmMultiSelectMulti を指定した状態で、 テキストボックスの数字をListBoxに反映させるイメージです。 |
![]() |
投稿日時: 20/12/27 15:23:49
投稿者: WinArrow
|
---|---|
>⇒リストボックスのChangeはテキストボックスにうまく反映されます。
|
![]() |
投稿日時: 20/12/27 15:35:11
投稿者: WinArrow
|
---|---|
引用: このフラグが、余計に難しくしている。 フラグを使う意味はないと思いますが、 そもそも、複数選択を使おうとするならば、Changeイベントは不適当・・・一利もなし。 |
![]() |
投稿日時: 20/12/27 15:45:02
投稿者: rodeo540
|
---|---|
WinArrow さんの引用: ListBoxはfor〜Nextの所で回してますので、 複数選択した場合でもは、そのListIndexがそのままTextBoxに反映されます。 その時にTextChangeのフラグがFalseなのでTextBoxが変更になってもそのChangeイベントは発生しないです。 コマンドボタンに渡せばいいのですが、選択したリアルタイムでテキストボックスと リストボックスを同期させたいですが、いい方法は無いでしょうか。。。 ListIndexのNullの問題(青のハイライトを伴わせて実際に選択状態にしたい)も まだ解決できていないです。。 |
![]() |
投稿日時: 20/12/27 15:51:27
投稿者: rodeo540
|
---|---|
あと、コード中ではないですが、もちろん fmMultiSelectExtended
|
![]() |
投稿日時: 20/12/27 16:19:06
投稿者: hatena
|
---|---|
前回の解答は、複数選択不可のリストボックスという前提です。
Option Explicit Dim ListChanging As Boolean Dim TextChanging As Boolean Private Sub ListBox1_Change() If TextChanging Then Exit Sub 'テキスト変更中は抜ける ListChanging = True Dim s As String, i As Long For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(i) = True Then s = s & "," & ListBox1.List(i, 0) End If Next i TextBox1.Value = Mid(s, 2) ListChanging = False End Sub Private Sub TextBox1_Change() If ListChanging Then Exit Sub 'リスト変更中は抜ける TextChanging = True Dim i As Long For i = 0 To ListBox1.ListCount - 1 ListBox1.Selected(i) = False Next i On Error Resume Next Dim s As Variant For Each s In Split(TextBox1.Value, ",") ListBox1.Selected(CLng(s) - 1) = True Next TextChanging = False End Sub |
![]() |
投稿日時: 20/12/27 16:31:21
投稿者: WinArrow
|
---|---|
Listbox1_changeイベントをテストしても、
|
![]() |
投稿日時: 20/12/27 16:40:27
投稿者: WinArrow
|
---|---|
Textbox→Listbox転送の件
|
![]() |
投稿日時: 20/12/27 17:07:02
投稿者: hatena
|
---|---|
とりあえず、
ListBox1.Selected(インデックス) = True です。 Changeイベントは、フラグを立てて、イベントが連鎖しないように管理すれば、問題なく使えると思います。 (作成したサンプルではテキストボックスの入力に対してリアルタイムに反映されてます。) テキストボックスに数値以外や行番号の範囲以外の数値が入力された場合エラーになるので、対策が必要ですが、 On Error Resume Next で無視するというお手軽の方法をとりました。 提示されたコードでは1列目には行番号が格納されているようなので、その前提のコードです。 もし、行番号意外のデータが格納されているなら、一致する行を検索するという処理に変更する必要があります。 |
![]() |
投稿日時: 20/12/27 17:12:52
投稿者: WinArrow
|
---|---|
hatena さんのレスをみて
|
![]() |
投稿日時: 20/12/27 18:25:24
投稿者: WinArrow
|
---|---|
>Listindexでは破線で選択できますが
|
![]() |
投稿日時: 20/12/28 07:28:08
投稿者: rodeo540
|
---|---|
皆様、アドバイスありがとうございました。
|