アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBA初心者です。現在仕事でエクセルを利用してツールを作成しておりますが、作業に詰まってしまったため、詳しい方教えていただけないかと思い質問させていただきます。

Userform1に、テキストボックス【txt】とコマンドボタン【btn】があり、Userform2にコンボボックス【cmb】があったとします。そして、Userform1の【btn】をクリックするとUserform2が開く作りだとします。
【cmb】のRowSourceには、あらかじめ名前の定義で指定したセル範囲が設定されており、リストは

一列目   二列目
 a1    あああ
 b1    かかか
 b2    ききき
 c2    ししし
 d4    ててて
 ・      ・
 ・      ・
 ・      ・

で、ColumnCount = 2 、ColumnWidths = 0pt ; 10pt
という設定です。

そこで質問ですが、Userform1の【btn】をクリックした時に【txt】に入力されている値に応じて、Userform2の【cmb】の初期値を決定するにはどのようにすればよいでしょうか?なお、【txt】に入力する値は【cmb】のリストの一列目のいずれかである必要があるとします。

私で考えられる対応方法としては、下記のような記述ならうまくいくのかな??とは思うのですが、実際の【cmb】のRowSourceはそれなりに大きいリストであるため、もう少しスマートにやる方法があれば是非教えていただきたいと思っています。どうぞよろしくお願いします。

---------------------------------------------------------------------------------------------------------
Public b As Integer           '標準モジュール
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Private Sub btn_Click()         'Userform1

 Dim a As Strin

 a = txt.Text

 Select Case a
  Case a1
   b = 0
  Case b1
   b = 1
  Case b2
   b = 2
  Case c2
   b = 3
    ・
    ・
    ・
 End Select

 Open Userform2 (オブジェクト名)

End Sub

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Private Sub UserForm_Initialize()     'Userform2

 cmb.listindex = b

End Sub

A 回答 (1件)

以下のようにしてください。


尚、Private Sub UserForm_Initialize()     'Userform2で
cmb.listindex = b は、Sub btn_Clickでbの値を設定する前にUserForm_Initializeが実行されますので
bに正しい値を設定しても、その値がcmb.listindexに反映されません。
従って、
①Private Sub UserForm_Initialize()     'Userform2 では何もしない。
②Private Sub Btn_Click()で直接、cmb.listindexを書き換える。
ことが必要です。
あと、userformの表示はopenでなく、showを使用します。
---------------------------------------
Private Sub Btn_Click()
Dim text As String
Dim i As Long
text = Txt.text
UserForm2.Cmb.ListIndex = -1
For i = 0 To UserForm2.Cmb.ListCount - 1
If text = UserForm2.Cmb.List(i, 0) Then
UserForm2.Cmb.ListIndex = i
End If
Next
If UserForm2.Cmb.ListIndex = -1 Then
MsgBox ("該当なし")
Exit Sub
End If
UserForm2.Show
End Sub
    • good
    • 0
この回答へのお礼

ありがとう

早々のご回答ありがとうございす。返事が遅くなって申し訳ありませんでした。
ご回答いただいた内容大変参考になりました。詰まっていた箇所もうまくいきましたし、今後の作業でも活用できそうです。
今回は本当にありがとうございした。

お礼日時:2018/08/24 06:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!