
Subプロージャ―の変数にInputBoxなどから文字列を引き渡すことはよくあることだと思います。同じようなことをユーザーフォームで実現する方法を教えてください。
※ユーザーフォームには選択肢がセットされたリストボックスとコマンドボタンがあります
1、Subプロージャ―TESTを実行する
2、ユーザーフォームが開く
3、ユーザーフォームのリストボックスから値を選択
4、ユーザーフォームのコマンドボタンクリックでSubプロージャ―内の変数strにリストボックスで選択された値を格納すると同時にユーザーフォームを閉じる
5、Debug.Printでstrの値を確認する
といったようなことをしたいです。
No.2ベストアンサー
- 回答日時:
下記プロシージャは一例です
標準Module1
Option Explicit
' ユーザーフォームのリストボックスが選択された値を格納するパブリック変数
Public selectedValue As String
Sub TEST()
' ユーザーフォームを表示するコード
UserForm1.Show
'標準モジュール側で出力する場合
Debug.Print selectedValue
End Sub
FormモジュールUserForm1
Option Explicit
Private Sub CommandButton1_Click()
' ユーザーフォームのコマンドボタンがクリックされた時の処理
' リストボックスで選択された値を変数に格納
If Not ListBox1.ListIndex = -1 Then ' リストボックスが選択されているか確認
selectedValue = ListBox1.List(ListBox1.ListIndex)
End If
' ユーザーフォームを閉じる
Unload Me
End Sub
Private Sub UserForm_Initialize()
' ユーザーフォームが初期化された時の処理
' リストボックスに選択肢をセット
ListBox1.AddItem "選択肢1"
ListBox1.AddItem "選択肢2"
ListBox1.AddItem "選択肢3"
' ...選択肢を追加する場合は同様にAddItemメソッドを使用
' リストボックスの選択モードを単一選択に設定
ListBox1.MultiSelect = fmMultiSelectSingle
End Sub
'UserForm側で出力する場合
'Private Sub UserForm_Terminate()
' ' ユーザーフォームが終了する時の処理
' ' リストボックスで選択された値を出力
' Debug.Print "選択された値: " & selectedValue
'End Sub
各コントロールオブジェクト名は暫定です
変数strはVBA関数Strが存在する為 selectedValue としました
出力のタイミングは仕様にあわせてください
No.3
- 回答日時:
最高に手を抜いたコードの例です。
' UserForm1 のコード
' CommandButton1 は OKボタン
' CommandButton2 は キャンセルボタン
Private Sub CommandButton1_Click()
Dim rtn As String
If Me.ListBox1.ListIndex >= 0 Then
rtn = Me.ListBox1.Value
End If
Me.Tag = rtn
Me.Hide
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
Me.Tag = ""
Me.ListBox1.List _
= Array("リンゴ", "みかん", "いちご", "バナナ")
End Sub
' 呼び出し元のコード
Sub TEST()
Dim str1
str1 = SelectFromList()
Debug.Print str1
End Sub
' 標準モジュールに記述することが望ましい
Function SelectFromList()
Dim tmp
UserForm1.Show
tmp = UserForm1.Tag ' UserForm1 が閉じている場合、ここでロードされる
Unload UserForm1
SelectFromList = tmp
End Function
No.1
- 回答日時:
第108回.変数の適用範囲(スコープ,Private,Public)
https://excel-ubara.com/excelvba1/EXCELVBA408.html
パブリック変数 ・・・ 全てのモジュールの全てのプロシージャーで使用可能
上記の方法を用い標準モジュールで宣言された変数は、ユーザーモジュールでも使用可能であり、即ち代入された値は標準モジュールで呼び出す事も可能かと。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- JavaScript テーブルの中のセレクトボックスの値が0のとき、非表示にしたい 3 2022/05/29 10:13
- Access(アクセス) access フォーム 大分類、小分類 1 2022/08/11 18:03
- Windows 10 サブアカウントの名前変更 1 2023/02/11 01:27
- HTML・CSS HTMLのフォームについてお尋ねします 1 2022/12/03 21:47
- Visual Basic(VBA) VB.net フォーム 親子 1 2022/07/04 19:00
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Googleフォーム・複数人の申し...
-
VBAにてメッセージボックスを最...
-
リストボックスをクリックする...
-
accessで2つ以上のフォームを起...
-
VBA リストボックスをダブルク...
-
サブフォームの行ごとにコンボ...
-
Accessでフォームから別フォー...
-
C#でアプリの終了の仕方
-
Formの間に値を渡すことについて
-
複数の条件で検索したい!
-
dbOpenTableとdbOpenDynaset
-
サブフォームのイベント取得
-
AccessVBAでサブフォームの値チ...
-
ExcelVBAでユーザーフォーム内...
-
ACCESS VBAサブフォーム(DATA S...
-
ACCESSのサブフォームのフォン...
-
ユーザーフォーム上にアイコン...
-
Access:ストアドプロシージャ...
-
csvに保存しているデータをURL...
-
Access クエリ IN演算子について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Googleフォーム・複数人の申し...
-
VBA リストボックスをダブルク...
-
Accessでフォームから別フォー...
-
C# 別なフォームへ値を渡す (...
-
VBAにてメッセージボックスを最...
-
PDFフォームに本日の日付を自動...
-
アクセスVBA フォームのス...
-
サブフォームの新規レコードに...
-
メッセージボックスの背景色
-
VBプログラムの終了
-
メインフォームからサブフォー...
-
Access 無操作の場合、自動で閉...
-
子フォームから親フォームのオ...
-
リストボックスの選択解除
-
accessで2つ以上のフォームを起...
-
フォーム上の全てのコントロー...
-
ユーザーフォーム上にアイコン...
-
ExcelVBAでユーザーフォーム内...
-
ASP.NETとC#でWebフォームを呼...
-
PDFフォーム内で日付計算したい...
おすすめ情報