午後わてんのブログ

ベランダ菜園とWindows用アプリ作成(WPFとC#)

エクセルVBA、チェックボックス付きのListBoxのInputBox?を作ってみた

 
 
ユーザーからデータを受け取りたいときはInputBoxを使うんだけど
イメージ 11
これだと1つしか受け取れなくて事足りないときがある
 
そこでつくってみたのがこれ↓
イメージ 1
チェックボックス付きのリスト形式のInputBoxみたいなの
ボタンを押すとチェックの入った項目の配列を返す
 
イメージ 10
受け取った配列(Ash)の中身
チェックした「ささやき」と「いのり」が入っている
わてんはHighになりました
 
 
ユーザーフォーム
イメージ 2
ListBoxとボタンを追加しただけ
 
ユーザーフォームのコード

f:id:gogowaten:20191030142912p:plain

エラー処理していないので短い
 
ユーザーフォームを呼び出す標準モジュール

f:id:gogowaten:20191030142923p:plain

こっちもエラー処理していない
思いつくエラー処理は
ユーザーが何も選択しないでボタンを押したとき
ボタンを押さずにフォームのXボタンを押して閉じられた時
 
ユーザーフォームコード
Private myWords() As String

'ボタン押した時
Private Sub CommandButton1_Click()
    Call GetWords
    Me.Hide 'ユーザーフォームを非表示にする
End Sub

Private Sub UserForm_Initialize()
    'ListBoxの初期化
    With Me.ListBox1
        .AddItem "ささやき"
        .AddItem "えいしょう"
        .AddItem "いのり"
        .AddItem "ねんじろ!"
        .ListStyle = fmListStyleOption      'チェックボックスにする
        .MultiSelect = fmMultiSelectMulti   '複数選択可にする
    End With
End Sub

'チェックされたリストを配列に入れる
Private Sub GetWords()
    Dim i As Long, j As Long
    For i = 0 To Me.ListBox1.ListCount - 1
        If Me.ListBox1.Selected(i) Then
            ReDim Preserve myWords(j)
            myWords(j) = Me.ListBox1.List(i)
            j = j + 1
        End If
    Next
End Sub

'標準モジュールから呼び出す関数
'ListBoxでチェックされた項目名群を返す
Public Function doModal() As String()
    Me.Show
    doModal = myWords
End Function
 
 
標準モジュールのコード
Sub GetMyWords()
    Dim Ash() As String
    Ash = UserForm1.doModal
    Unload UserForm1 'ユーザーフォームはここで閉じる
End Sub
↑標準モジュールの
Ash = Userform1.doModal
ってのが呼び出しているところで、InputBoxなら
Ash = InputBox
こうなるところ
 
doModal関数のMe.Showでユーザーフォームが表示される
イメージ 5
ユーザーがリストを選んで
 
イメージ 6
ボタンを押すと
GetWordsが実行されて
 
イメージ 7
グローバル変数のmyWordsに選択された項目名が入る
 
ユーザーから見るとボタンを押した時点でユーザーフォームが閉じられるのが自然だけど、処理はまだ終わっていないので閉じることはできないので
Me.Hide
これで非表示にして閉じたように見せかけている
 
 
イメージ 8
ボタンを押したときの処理が終わるとここに戻ってくるんだけど
この流れがよくわからん、こうなってくれないと困るんだけどね。
これでユーザーフォームの方は終わりで取得したmyWordsは標準モジュールの方へ送られる
 
標準モジュール
イメージ 9
ユーザーが選択した項目名が取得できている
ここまで来てからユーザーフォームを閉じて完了
 
 
参照したところ
ここがなかったら今回のは作れなかった
 
 
ダウンロード
 
 
関連記事
午後ツールその53、ウィンドウの整列、異なるブック(ウィンドウ)の整列 ( Windows ) - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/14655664.html