Windowsあれこれ、サービス・SWあれこれ、会計・経理あれこれ、いまさら生活雑学、いまさら都市伝説などなど。
カレンダー
04 | 2025/05 | 06 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
カテゴリー
最新記事
(11/15)
(10/28)
(10/26)
(10/16)
(10/05)
最新トラックバック
プロフィール
HN:
erokazu
性別:
非公開
ブログ内検索
最古記事
(08/19)
(08/21)
(08/23)
(08/25)
(08/26)
さてさて。久しぶりにエクセルVBAを使って遊んでたわけなんです。
ちょろっと触ったことある人ならわかると思いますが、結構同じような処理を使うことはあるかと。
んでね、一般的なSE業における開発と同じで、
なるべく共通的な関数群だったりを作って、ちゃんとバージョン管理とか行っておくと便利なわけで。
一般的には共通モジュール(.basモジュールや.clsモジュール)とかにしておいて、新しいの作る時とかに流用したりするわけですが。
とはいえ、これらのモジュール群は通常エクセルブック内に包含されてしまっていて、
成果物が多岐にわたるとバージョン管理なんて難しくてしょうがないわけです。
いちいち毎回毎回インポート&エクスポートとかすればなんとかなりそうですが、
めんどくさくてやってられません。
つうことでこのプロセスを自動化しちゃえばオッケーてなわけですよ。
知ってる人も多いと思いますが、
これらの共通モジュール群をエクスポート&インポートできる関数があるんですねぇ。
なら使っておかない手はないでしょう。つうことでですね・・・。
↓↓↓
ちょろっと触ったことある人ならわかると思いますが、結構同じような処理を使うことはあるかと。
んでね、一般的なSE業における開発と同じで、
なるべく共通的な関数群だったりを作って、ちゃんとバージョン管理とか行っておくと便利なわけで。
一般的には共通モジュール(.basモジュールや.clsモジュール)とかにしておいて、新しいの作る時とかに流用したりするわけですが。
とはいえ、これらのモジュール群は通常エクセルブック内に包含されてしまっていて、
成果物が多岐にわたるとバージョン管理なんて難しくてしょうがないわけです。
いちいち毎回毎回インポート&エクスポートとかすればなんとかなりそうですが、
めんどくさくてやってられません。
つうことでこのプロセスを自動化しちゃえばオッケーてなわけですよ。
知ってる人も多いと思いますが、
これらの共通モジュール群をエクスポート&インポートできる関数があるんですねぇ。
なら使っておかない手はないでしょう。つうことでですね・・・。
↓↓↓
【対応のための手順サマリ】
①共通モジュール群の管理用のフォルダを設ける
②これらを利用するアプリ・ツールの起動時に、自動的に①たちをインポートさせる
③アプリ・ツールの終了時に、自動的に①たちをエクスポート(またはリムーブ)させる
なぁんてことにしておけば、成果物が多岐に渡ってしまっているような場合でも、
常に最新版のモジュールを管理しておくことが可能なわけです。
さらに、エクスポート時に、ファイル名に日時情報等を付与しておくことで、擬似的にバージョン管理を行うことも可能というわけ。
ということで、簡単な例をつかって上記②③を実装してみましょう。
【②】エクセル起動時に必要なモジュールを自動インポートさせる
ワークブックオブジェクトThisWorkbookのWorkbook_Open()を実装します。
Private Sub Workbook_Open()
'・・・前後略
Dim Val_ModulePath as String 'インポート対象モジュールのフルパス(*.basまで含める)
Application.VBE.VBProjects("VBAProject").VBComponents.Import ModulePath
'・・・前後略
End Sub
【③】エクセル終了時に管理対象のモジュールを自動エクスポートさせる
ワークブックオブジェクトThisWorkbookのWorkbook_BeforeSave()を実装します。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'・・・前後略
Dim Val_ModulePath as String 'エクスポート先のフルパス(*.basまで含める)
Application.VBE.VBProjects("VBAProject").VBComponents.Export ModulePath
'上を応用してフルパスに日時情報とかを含めればバージョン管理できる
Dim Val_ModuleName as String 'リムーブするモジュールの名称(*.basは含めない)
Application.VBE.VBProjects("VBAProject").VBComponents.Remove _
Application.VBE.VBProjects("VBAProject").VBComponents(Val_ModuleName)
'他成果物から最新化する可能性もあるので、必ずリムーブしておく
'・・・前後略
End Sub
はい、興味ない人には全然おもろない話題でしょうが・・・。
何気に内部統制とかで細かい話するとこれらVBAツール系の扱いとかで話題になったりしますよね。
たかがVBA。されどVBA。エクセルツール類も立派な会社の資産です。
みなさんもちゃんと管理してきましょう!
①共通モジュール群の管理用のフォルダを設ける
②これらを利用するアプリ・ツールの起動時に、自動的に①たちをインポートさせる
③アプリ・ツールの終了時に、自動的に①たちをエクスポート(またはリムーブ)させる
なぁんてことにしておけば、成果物が多岐に渡ってしまっているような場合でも、
常に最新版のモジュールを管理しておくことが可能なわけです。
さらに、エクスポート時に、ファイル名に日時情報等を付与しておくことで、擬似的にバージョン管理を行うことも可能というわけ。
ということで、簡単な例をつかって上記②③を実装してみましょう。
【②】エクセル起動時に必要なモジュールを自動インポートさせる
ワークブックオブジェクトThisWorkbookのWorkbook_Open()を実装します。
Private Sub Workbook_Open()
'・・・前後略
Dim Val_ModulePath as String 'インポート対象モジュールのフルパス(*.basまで含める)
Application.VBE.VBProjects("VBAProject").VBComponents.Import ModulePath
'・・・前後略
End Sub
【③】エクセル終了時に管理対象のモジュールを自動エクスポートさせる
ワークブックオブジェクトThisWorkbookのWorkbook_BeforeSave()を実装します。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'・・・前後略
Dim Val_ModulePath as String 'エクスポート先のフルパス(*.basまで含める)
Application.VBE.VBProjects("VBAProject").VBComponents.Export ModulePath
'上を応用してフルパスに日時情報とかを含めればバージョン管理できる
Dim Val_ModuleName as String 'リムーブするモジュールの名称(*.basは含めない)
Application.VBE.VBProjects("VBAProject").VBComponents.Remove _
Application.VBE.VBProjects("VBAProject").VBComponents(Val_ModuleName)
'他成果物から最新化する可能性もあるので、必ずリムーブしておく
'・・・前後略
End Sub
はい、興味ない人には全然おもろない話題でしょうが・・・。
何気に内部統制とかで細かい話するとこれらVBAツール系の扱いとかで話題になったりしますよね。
たかがVBA。されどVBA。エクセルツール類も立派な会社の資産です。
みなさんもちゃんと管理してきましょう!
PR
この記事にコメントする