ファイルを開くダイアログについてプロシージャ化を考える
最近ExcelのVBAでツールを作る機会が増えてきたので、少しVBAの話をしようと思います。
Excelの作業を自動化しようとすると、必ずファイルを開くダイアログを使うはずです。
というのは自動化させる対象のExcelファイルはいつも決まっているものではないからです。
月1回異なるファイルがあり、その変動をExcelで分析するなど用途は様々です。
基本的に固定されたファイルにだけ、VBAを使うことはありません。
そこでファイルを開くダイアログを分離して、1つのプロシージャとして扱うと、今後作成するVBAツールの工数削減に役立つと思ったからです。
試しにプロシージャ化したプログラムを作ってみる
上記の考察からファイルを開くダイアログのプロシージャ化ソースを作ってみました。
それが以下になります。
Sub fileOpen(fileFilter As String, fileTitle As String) ‘ファイルを開くダイアログボックスを出す ‘ファイル名 Dim fileName As Variant ChDir ThisWorkbook.Path fileName = Application.GetOpenFilename(fileFilter:=fileFilter, Title:=fileTitle) If fileName = False Then Exit Sub End If Workbooks.Open fileName End Sub引数のfileFilterはファイルの形式(xlsxファイルやcsvファイルなどの種類を選択する文字列)、fileTitleは文字どおりダイアログの左上にあるタイトルのことです。
ChDirはダイアログを開いたときのパスを、特定のパス指定にするための命令です。
次からのfileName= Application~Workbooks.Openのところは実際にダイアログを開くプログラムで、If分のところは「キャンセル」をしたときの処理を書いています。
ここではExit Subと書いています。
つまり「キャンセル」ボタンを押したときにプログラムが終了するようにしています。
これを書かないと、「キャンセル」を押したときにプログラムのエラーになって終了します。
以上の処理を任意のファイルを開くときに何度でも使うので、プロシージャとして分離することでこれをコピペして使えます。
もしくはbasファイルとしてエクスポート→他のVBAファイルにインポートして活用します。
まとめ
以上プログラマからしたら「こんなのあたり前だろ」という内容ですが、事務職からすると試行錯誤しながら重複部分を取り除くので、新鮮味が違います。
このような成功体験を少しずつ積んでいって、プログラムもできる事務職として新しい方向性を見出そうと思います。
ご参考になれば幸いです。
コメント