エクセルでタックシールを印刷するプログラムは、新機軸のアイデア満載です。
テキストボックスという”Shape”オブジェクトを制御するのは全くの初めてだ。
だから、逆に使い方次第で、テキストボックスも使い勝手があると感じました。
このテキストボックスにデータを流し込みますが、この値は選択の必要がある。
なので、プロシージャのコードを書く中で、”InputBox”関数を使うことにした。
複数個の関数をこさえましたが、簡単に言うと入力用ダイアログボックスです。
ユーザーに文字例や数値を入力してもらい、その値を受けて処理する役目だな。
この入力用ダイアログボックス関数を、ファンクション(関数)化してしまう。
このプロシージャーは、特定の処理を実行して値を返すので単独では動かない。
なので、Subプロシージャーから呼び出されて、初めて働きだすという代物だ。
特に、記述の長いSubプロシージャでは、アルゴリズムを分かりやすくしたい。
だから、”InputBox”をFunction化して、入力した選択値をプロシージャに戻す。
Sub FnCtnCall() ’Function(関数)を呼び出すサンプルコード
Dim A As Variant
A = InptBx()
MsgBox A
End Sub
Function InptBx() As String '封筒シール・運送業者の選択
Dim Vrnt As Variant
Vrnt = Application.InputBox(Prompt:="配送業者を数字で指定してください" & vbCrLf & "1:日本通運、2:西濃運輸" & vbCrLf & "3:佐川急便、4:ヤマト運輸", Title:="配送業者指定", Type:=1)
Select Case Vrnt
Case 1
InptBx = "日本通運"
Case 2
InptBx = "西濃運輸"
Case 3
InptBx = "佐川急便"
Case 4
InptBx = "ヤマト運輸"
Case Else ’ "0" でもいいよ
InptBx = "未指定"
End Select
End Function
先頭に”Application”を付けますが、入力データタイプを指定する引数が選べる。
それが、Type で指定するのですが、1が数値、2が文字列 (テキスト)になる。
この二つだけでよいと思いますが、ちなみに文字の入力ではエラーメッセージ。
しかも、右上の[X]ボタンを押してしまうと、”未指定”の文字が出ることにした。
そして、キャンセルを押しても未指定が出るので、プログラムエラーは出ない。
このために条件分岐式の”Select Case”を仕込みましたが、"Case Else"が肝心。
キャンセルでもXボタンでも押せば"0"が出力されますが、1~4の範囲外だな。
だから、"0" または、”Else”の条件を付け加えておくことが関数化には必須です。
というわけで、”InputBox”関数と”Function”関数を使いこなせたらVBAのプロ。
プログラムのコードで多用する、ファイルの存在するパスなんかも”Function(関数)”で作っておいて、必要に応じて呼び出して使っていますが、これが便利でして、プログラムの中もすっきりするから、今後も使っておこうと思った自分なのでした。
0 件のコメント:
コメントを投稿