2022年10月5日水曜日

”InputBox”関数を”Function”関数に仕込むという、ぶっ飛んだ荒業ですが、これが結構重宝したりするんだ ー InputBox・Function関数(VBA)

      
エクセルでタックシールを印刷するプログラムは、新機軸のアイデア満載です。
テキストボックスという”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 件のコメント:

コメントを投稿