VBSに不足するGUI機能を補う独自関数「SelectArray」

どーもボキです。

標準UIを工夫すれば専用UIを作らなくてもユーザ入力を促せますよ。


vbsには、InputBox関数やMsgBox関数といったユーザ入力を促すダイアログ関数があります。これら関数をうまく使えば、ある程度のUIはカバーできます。
この記事で紹介するSelectArray関数は、InputBoxを拡張した独自関数になります。

Arrayを引数に、数値選択ダイアログを実現します。
iMode<>0とすれば、数値選択ダイアログとしてだけでなく、ユーザ入力UIとしての機能も兼ねることができます。

以下の記事からダウンロードできるツールでは、このSelectArray関数を利用して、数値選択ダイアログ&文字列入力ダイアログを兼ねたUIを使っています。



サンプルソース

'MsgBox SelectArray(Array("a","b","c"), "数値入力専用ダイアログ", 0, 0)
'MsgBox SelectArray(Array("a","b","c"), "数値+任意併用ダイアログ", 0, 1)
'-------------------------------------------------------------------------------
' 指定した配列で選択リストを作成する
' iArray :表示するアイテム
' sTitle :ダイアログのタイトル
' vDefault :デフォルト値
' iMode :戻り値モード、=0ならば非該当は-1を返す、<>0ならば非該当は入力値を返す
'-------------------------------------------------------------------------------
Function SelectArray(iArray, sTitle, vDefault, iMode)
SelectArray = -1
If VarType(iArray) < vbArray Then Exit Function ' 配列ではない
If UBound(iArray) = -1 Then Exit Function ' 空の配列である
Dim r
Dim i, s, t
For i = 0 To UBound(iArray)
s = s & i & " | " & iArray(i) & vbLf
Next
t = InputBox(s, sTitle, vDefault)
' 数値変換
i = -1
On Error Resume Next
If t <> "" Then i = CInt(t)
On Error GoTo 0
If i >= LBound(iArray) And i <= UBound(iArray) Then
r = i
Else
If iMode = 0 Then
r = -1
Else
r = t
End If
End If
SelectArray = r
End Function


利用サンプルとイメージ

以下ソースや図は「指定した名前のプロセスを強制終了するツール ver2」でダウンロードできるソースの一部。

下図ダイアログでは引数にて、
arr = Array("outlook,ms-teams", "excel", "firefox", "msedge")
Const cTitle = "プロセスの強制終了"
を渡しています。

' 設定履歴が2つ以上
s = SelectArray(arr, cTitle & "(№ or プロセス名を入力)", 0, 1)
If s = "" Or s = -1 Then WScript.Quit

実行すると下図のようなダイアログが表示されます。
キャンセルでは「””」を戻し、配列の範囲外の数値の入力では「-1」を返します。
VBSに不足するGUI機能を補う独自関数「SelectArray」_a0021757_20312884.png


にほんブログ村 IT技術ブログへ
にほんブログ村




SelectArrayを利用したプログラムを紹介した記事






名前
URL
削除用パスワード

※このブログはコメント承認制を適用しています。ブログの持ち主が承認するまでコメントは表示されません。

by yozda | 2025-06-23 22:20 | ボキ、しごとのヒント集める | Comments(0)

ボキの興味、書き散らかします


by ボキ
カレンダー
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28