[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『EXCEL VBAでユーザーフォームを作成中です』(たかさん)
独学で勉強しながら作成を行っていましたが行き詰ってしまったので質問します
・情報を表示させるフォーム
・検索フォーム
この2つを作成しておりまして。
検索フォームで検索を行い、結果をダブルクリックをするとフォームに反映されるものなのですが
検索の結果表示(リストボックス)には
【行番号】と【氏名】が現状表示されています。
ですが本来の希望は行番号ではなくユーザーナンバーをリストボックスに表示をさせたいのです。
そこでVBAを編集しようと思ったのですが
下記コードの←修正必要?の部分をユーザーナンバー記載されているWorksheets(データ").Cells(wRow, 1)
に2か所変更すると確かにリストボックス上はユーザーナンバーが表示されるのですが
ダブルクリックをしても情報が表示されません。
Private Sub SetListBox() '← リストに表示する処理追加
Dim wRow As Long
Dim wLstRow As Long
Me.検索候補.Clear
wLstRow = 0
For wRow = 2 To Worksheets("データ").Range("A1").CurrentRegion.Rows.Count
If Me.サーチ = "" Then
Me.検索候補.AddItem
Me.検索候補.List(wLstRow, 0) = wRow←修正必要?
Me.検索候補.List(wLstRow, 1) = Worksheets("データ").Cells(wRow, 2)
wLstRow = wLstRow + 1
Else
If InStr(1, Worksheets("データ").Cells(wRow, 2), Me.サーチ, vbTextCompare) > 0 Then
Me.検索候補.AddItem
Me.検索候補.List(wLstRow, 0) = wRow←修正必要?
Me.検索候補.List(wLstRow, 0) = Worksheets(データ").Cells(wRow, 2)
wLstRow = wLstRow + 1
End If
End If
Next
End Sub
簡単ですがこちらで解決策がお分かりの方いらっしゃいましたらご教示いただけませんでしょうか
< 使用 Excel:Office365、使用 OS:Windows10 >
何をダブルクリックするのですか。
どこに、情報表示するのですか。
行番号の場合は、ダブルクリックで表示できるのですか?
(マナ) 2020/09/21(月) 11:08
ちょっと見づらかったのでコードを整理しました
Private Sub SetListBox() '← リストに表示する処理追加 Dim wRow As Long Dim wLstRow As Long
Me.検索候補.Clear wLstRow = 0
For wRow = 2 To Worksheets("データ").Range("A1").CurrentRegion.Rows.Count If Me.サーチ = "" Or InStr(1, Worksheets("データ").Cells(wRow, 2), Me.サーチ, vbTextCompare) > 0 Then Me.検索候補.AddItem Me.検索候補.List(wLstRow, 0) = wRow '←修正必要? Me.検索候補.List(wLstRow, 1) = Worksheets("データ").Cells(wRow, 2) wLstRow = wLstRow + 1 End If Next End Sub
そのうえで、「ダブルクリックをしても情報が表示されません。」とのことですが、ダブルクリックした際の処理はどのように書いているのでしょうか?
その部分を提示できませんか?
※見やすさを優先して条件を「or」で繋げましたが、処理速度を優先するならもとに戻してください。(僅差でしょうけど)
(もこな2) 2020/09/21(月) 11:11
rtnNo = Me.検索候補.Text Unload Me
ダブルクリックの部分です★
(たかさん) 2020/09/21(月) 11:55
Private Sub 検索候補_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
rtnNo = Me.検索候補.Text
Unload Me
こちらが入力されています
検索フォームというのが
テキストボックスに名前を入力するとしたのリストボックスに
行番号と名前が表示されます
上記の状態の場合、リスト内をダブルクリックすると
別のユーザーフォームに名前以外の情報が任意のテキストボックスに表示されます
これを
ユーザーナンバーと名前をリストボックスに表示するように質問本文の赤字のみを編集した場合
リストボックスにはユーザーナンバーと名前が表示されるがそれをダブルクリックしても
フォームには情報が反映されない状態になっています。
(たかさん) 2020/09/21(月) 11:57
(マナ) 2020/09/21(月) 13:00
行番号の場合は、ダブルクリックで表示できるのですか?
(マナ) 2020/09/21(月) 13:19
>wRow←修正必要? ↓ Worksheets("データ").Cells(wRow, 1)
(マナ) 2020/09/21(月) 13:30
本当にややこしくて申し訳ないのですがこの検索フォームに行くまでには
1情報表示のフォーム(結果を反映するフォーム)
このフォーム内に(検索)ボタンをセットしており
フォーム内には
Private Sub 検索_Click()
検索フォーム.Show vbModal If rtnNo > 1 Then
With Worksheets("データ") Me.コード = .Cells(rtnNo, 1) Me.個人名 = .Cells(rtnNo, 2) Me.内容A = .Cells(rtnNo, 3) Me.内容B = .Cells(rtnNo, 4) Me.内容C = .Cells(rtnNo, 5) Me.内容D = .Cells(rtnNo, 6) End With End If End Sub
これが記載されております
2検索フォーム
ここには先般ご相談の
Private Sub SetListBox() '← リストに表示する処理追加 Dim wRow As Long Dim wLstRow As Long Me.検索候補.Clear wLstRow = 0 For wRow = 2 To Worksheets("データ").Range("A1").CurrentRegion.Rows.Count If Me.サーチ = "" Or InStr(1, Worksheets("データ").Cells(wRow, 2), Me.サーチ, vbTextCompare) > 0 Then Me.検索候補.AddItem Me.検索候補.List(wLstRow, 0) = wRow '←修正必要? Me.検索候補.List(wLstRow, 1) = Worksheets("データ").Cells(wRow, 2) wLstRow = wLstRow + 1 End If Next End Sub
こちらが記載されております。
元来このVBAはネット上のテンプレートを改変して作成してきました。
今もいろいろな修正などを加えながら行っていたところ情報表示のフォームにこの内容が記載されているのが問題だったりするのでしょうか
本当にたびたびご相談になり恐れ入りますが、なにとぞよろしくお願い申し上げます
(たかさん) 2020/09/21(月) 14:00
(マナ) 2020/09/21(月) 14:09
ダブルクリックイベントで変数rtnNoに行番号が代入され、 変数rtnNoをもとにデータベースから取得し、別のユーザーフォームに 表示しているからでは? と予想します。
(tkit) 2020/09/21(月) 14:32
2つのユーザーフォームの構成がよくわかりません。
とりあえず、「rtnNo」とはなんですか?オブジェクトならそのタイプを、変数ならどこのモジュールで定義(宣言)しているか教えてください。
(もこな2) 2020/09/21(月) 14:35
(マナ) 2020/09/21(月) 14:37
修正をしようとする場合どのような情報をお送りすればよいでしょうか。。。
(たかさん) 2020/09/21(月) 14:41
>変更しても、リストボックスに、行番号が表示され
>ユーザーナンバーが表示されないということですか
これはどうでもよいのですか。
(マナ) 2020/09/21(月) 14:44
1番簡単な方法は、コードの変更はせず、
データベースの行番号にユーザーナンバーをコピーすれば
いけるのでは。
ただし、ユーザーナンバーに重複する番号があると
正常動作しません。
(tkit) 2020/09/21(月) 14:46
回答いたします
変更を行うと、リストボックスにはユーザーナンバーが表示されます
しかしダブルクリックをすると反応がありません。
また、rtnNoに関しては
標準モジュール内に
Public rtnNo As Long
の記載と
検索フォームに
Private Sub 検索フォーム_Initialize() '← フォームを表示した時の処理追加
rtnNo = 0 '← フォーム間のデータ受け渡し用変更の初期化 Call SetListBox '← リストボックスに表示する処理を実行(下部に処理記述) End Sub
の記載があります
(たかさん) 2020/09/21(月) 14:49
では、そう説明してください。
rtnNo = 検索候補.ListIndex + 1
(マナ) 2020/09/21(月) 14:51
これだめでした。
リストボックスを3列にして、1列目を非表示にするのがよいです。
こういうことです
Me.検索候補.List(wLstRow, 0) = wRow
Me.検索候補.List(wLstRow, 1) = Worksheets("データ").Cells(wRow, 1)
Me.検索候補.List(wLstRow, 2) = Worksheets("データ").Cells(wRow, 2)
(マナ) 2020/09/21(月) 15:03
Private Sub SetListBox() '← リストに表示する処理追加
Dim wRow As Long Dim wLstRow As Long
Me.検索候補.Clear
wLstRow = 0
For wRow = 2 To Worksheets("データ").Range("A1").CurrentRegion.Rows.Count If Me.サーチ = "" Or InStr(1, Worksheets("データ").Cells(wRow, 2), Me.サーチ, vbTextCompare) > 0 Then Me.検索候補.List(wLstRow, 0) = wRow Me.検索候補.List(wLstRow, 1) = Worksheets("データ").Cells(wRow, 2) Me.検索候補.List(wLstRow, 2) = Worksheets("データ").Cells(wRow, 3) wLstRow = wLstRow + 1 End If Next End Sub
このように変更しましたが
実行時エラー 381
List プロパティを設定できません。
プロパティの配列のインデックスが無効です
と表示されます
(たかさん) 2020/09/21(月) 15:15
を消してしまった?
(マナ) 2020/09/21(月) 15:23
今後とも過去ログなどで学ばせていただきます。
今後ともよろしくお願いいたします
(たかさん) 2020/09/21(月) 15:43
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.