インプットボックスで入力値を取得[InputBox関数]|CATIAマクロの作成方法
今回は『InputBox関数』についての内容です。
メッセージを一方的に表示するMsgBox関数に対し、InputBox関数ではユーザーが入力した値をマクロ側に受け取らせることが出来ます。
InputBox関数とMsgBox関数は似ている部分が多いので、合わせて学習することをお勧めします。
どちらの関数もマクロのユーザーと”会話”することのできる非常に汎用性の高い機能なので必ず覚えておきましょう。
今回学べる内容は以下のとおりです。
InputBox関数の使い方(インプットボックスでユーザーの入力値を取得する方法)
インプットボックスで[Cancel]ボタンが押された時はどうなるのか
InputBox関数
『InputBox関数』とはインプットボックスを使って、ユーザーが入力した文字列を変数に入れることのできる関数です。基本的にはInputBox関数で取得する値は文字列となっていますが、数字を取得することも可能です。(少し処理内容を変える必要がある場合もあります)
インプットボックスを使ってユーザーに値を入力させるには以下の構文を使います。
InputBox (prompt, [ title ], [ default ], [ xpos ], [ ypos ], [ helpfile, context ])
※[]で囲まれているものは省略可
※helpfile, context はMsgBox関数と同様に使う機会があまりないためここでの説明は割愛します。
興味のある方は「InputBox helpfile」等で検索してみて下さい。
ユーザーが入力した値を取得するには下記のように文字列型の変数を宣言し、その変数に代入する形で上記の構文を書きます。これにより変数(下記の場合InputSTR)がインプットボックスで入力された文字列を受け取ることができます。
Dim InputSTR As String ‘文字列型
InputSTR = InputBox (prompt, [title], [default], [xpos], [ypos], [helpfile, context])
取得した文字列は以下のようにマクロの様々な処理に利用することができます。
・入力された文字列が名前の形状セットを作成
・入力された数値を座標として点を作成
・入力された数値の数だけループ処理を行う
prompt
promptの部分にはインプットボックスに表示するメッセージを入力します。
MsgBox関数と同様、ダブルクォーテーション[“]を使って以下のように書きます。
InputSTR = InputBox (“作成する形状セットの名前を入力してください。“)
上記のコードを実行すると以下のようなインプットボックスが立ち上がります。
メッセージが長くなり、改行したい場合は「vbLf」を使って以下のように書きます。
(「vbLf」の代わりに「Chr(13)」にしても改行することができます)
InputSTR = InputBox (“作成する形状セットの” & vbLf & “名前を入力してください。“)
2行改行したい場合は「& vbLf & vbLf &」とその行数文の改行コードを入力します。
メッセージが長くなり、変な所で改行される場合は改行コードをうまく利用しましょう。
promptに入力する文字列はダブルクォーテーション[“]を使ってInputBox関数の構文内に直接書かずに、文字列型の変数を使って以下のように書くこともできます。
Dim InputSTR As String
Dim msg As String
msg = “作成する形状セットの名前を入力してください。“
InputSTR = InputBox (msg)
title
titleにはインプットボックスのタイトルを入力します。
titleの入力も必須ではないため何も書かないで省略することができます。
省略した場合は上記のようにタイトルが「CATIA V5」となります。
titleにはpromptと同様にダブルクォーテーション[“]を使って以下のように入力します。
(文字列型の変数での入力も可)
InputSTR = InputBox (“作成する形状セットの名前を入力してください。“,“名称入力”)
上記のコードを実行するとインプットボックスは以下のようになります。
default
defaultにはインプットボックスにはじめから入力しておく文字列を入力します。
ここに「入力頻度の高い文字列」や、「入力の例」などの文字列を入力しておくことで、より使いやすいマクロを作成することが出来まます。
defaultにもprompt、title同様に文字列を入力するため、ダブルクォーテーション[“]もしくは変数を使って以下のように書きます。
Dim InputSTR As String
Dim msg As String
Dim Titl As String
Dim Def As String
msg = “作成する形状セットの名前を入力してください。“
Titl = “名称入力”
Def = “NEW形状セット”
InputSTR = InputBox (msg,Titl,Def)
上記のコードを実行すると以下のようなインプットボックスが立ち上がります。
入力する場所に、defaultで入力した文字列が入っていることがわかります。
xpos / ypos
xpos / yposにはインプットボックスの表示される位置を入力します。
xposには画面の左端からインプットボックスの左端までの水平方向の距離を入力します。
yposには画面の上端からインプットボックスの上端までの縦方向の距離を入力します。
ここで入力する距離の単位はtwipという聞きなれないものになっているので、実際に数値を入力しながら微調整していきましょう。
Dim InputSTR As String
Dim msg As String
Dim Titl As String
Dim Def As String
msg = “作成する形状セットの名前を入力してください。“
Titl = “名称入力”
Def = “NEW形状セット”
InputSTR = InputBox (msg,Titl,Def,10,10)
上記のコードの場合、画面の左上付近にインプットボックスが表示されます。
(正確にいうと画面の左端から10twip、上端から10twipがウィンドウの左上となる位置)
[Cancel]ボタンを押された場合
インプットボックスには[OK]ボタンのほかに[Cancel]ボタンがあります。
[OK]ボタンが押された場合はもちろん、入力されている値が変数(本ページでいうInputSTR)に代入されますが、[Cancel]ボタンを押された場合も実はある値が変数に代入されます。
[Cancel]ボタンが押された場合は入力スぺースに何が入力されていたとしても、長さ0の文字列 (“”)が変数に代入されます。
つまり、InputBox関数では「入力スペースに何も値を入力しないで[OK]ボタンを押した場合」と「[Cancel]ボタンを押した場合」というのは全く同じ結果になるということです。
上記の場合、どちらも変数(InputSTR)に長さ0の文字列 (“”)が代入されます。
よってInputSTRの中が長さ0の文字列 (“”)の場合にある処理を行うような条件分岐をさせれば、Cancelボタンが押された時の処理も指定することができます。
具体的にはIf文を使って以下のように書くことで、[Cancel]ボタンが押されたときの処理を指定することができます。
以下の場合は[Cancel]ボタンが押されると、「キャンセルしました。」とメッセージが表示されます。
If InputSTR = “” then
MsgBox “キャンセルしました。”
End If
先にも述べているとおり、入力スペースが未入力の状態で[OK]ボタンを押した場合も同じく「キャンセルしました。」とメッセージが表示されます。
まとめ
今回はInputBox関数についての内容でした。
最後のIf文(条件分岐文)については専用ページでで解説するので、
ここでは[OK]ボタンが押された場合のみを考えておけば大丈夫です。
InputBoxはユーザーが入力した値を取得する方法の中では一番シンプルなものです。
VBAには一気に複数の値を取得することのできるユーザーフォーム(UserForm)という機能もありますが、初心者のうちはわかりりやすいInputBoxから使い始めることをオススメします。
InputBox関数はExcelマクロでも使用するものなので、情報は多く転がっています。
本ページで理解できなかった方は検索すると様々なサイトで説明されているのでそれらも参考にしてみて下さい。
参考:VBA開発元のMicrosoft社のInputBox関数の説明ページ
→InputBox 関数 (Visual Basic for Applications) | Microsoft Docs
CATIAマクロを本気で勉強するなら