隔日でブログを更新しているのですが、今朝は寝ぼけて失念してしまいました。
なので、出社してきて投稿原稿を書いているなど、職務怠慢の極みであろうか。
いやあ、これから書いておくことは業務の忘備録なので、それに当たりません。
なぜなら、VBAで業務改善のプログラムで、最近発見したことを書き残します。
だから、さぼっていることにはならないと、我田引水をしてしまうことにした。
現在、VBAでプログラムを書いているのは、出荷シールを作成することなんだ。
ダウンロードしたデータをベースにしますが、エクセルのシートは使いません。
代わりにシート上を印刷領域に見立てて、そこにテキストボックスを配置する。
そのテキストボックスに印字する内容を流し込んで印刷するというプログラム。
ざっくり、説明するとこうなるのですが、圧縮ファイルの読み込み解凍が大変。
中でも、ダウンロードフォルダに必要なファイルが存在すれのか、確認します。
存在が認められれば、別のフォルダにある特定フォルダに移動させて解凍する。
それで、こういった手順のプログラムをコードに書けば、プロシージャが複雑。
記述を分解・簡素化する必要もあって、先ずは、別のプロシージャへコールだ。
それで、作業した結果の値を戻す必要もあり、ファンクション(関数)を多用。
このファンクションコードで、再度ファンクションを呼出すこともできました。
つまり、ロシアのマトリョーシカ人形のように、値戻しの階層化が可能なんだ。
コードでは、二段ぐらいの実施で済みましたが、それ以上でもできるでしょう。
Sub FleExstsRslt()
If FleExsts() = True Then ' ファンクション(関数)を読んで値を取得
MsgBox "あるよ"
Else
MsgBox "ないよ"
End If
End Sub
Public Function FleExsts() As Boolean
Dim Str As String, b As Boolean
Str = Dir(PthMkng)
If Str <> "" Then
FleExsts = True ' True なら存在している
Else
FleExsts = False
End If
End Function
Public Function PthMkng() As String
Dim Strng As String
Strng = ""
Strng = Strng & "C:\Users\"
Strng = Strng & Environ("username")
Strng = Strng & "\Downloads\HOGEHOGE.csv"
Strng = Strng & ""
PthMkng = Strng 'ファイルをフルパスで定義
End Function
このコードでは、特定のフォルダーに必要なファイルがあるのか確認するもの。
プロシージャで、ファンクションを呼び出しますがて、その値がブーリアンだ。
調べた結果が正しければ、”真”で”True”になり、違うと”偽”で”False”を返す。
この変数の値戻しをするファンクションが、改めてファンクションを呼ぶんだ。
つまり、ファイルの存在するパスを、ファンクションに仕込んで値を返します。
この手の工夫は、使用する複数のパスを作って、ファンクションで呼べますな。
というわけで、このアイデアをVBAのマトリョーシカ戦術と呼ぶ事にしました。
これは、プロシージャから、プロシ―ジャをコールして作業させるようなアイデアなのですが、今回は、コードのパーツ化を一層進めてプログラム全体を作り込んでいく方法に特化して、まるでプラスチックモデルの作製みたいだなと思ったのでした。
0 件のコメント:
コメントを投稿