ExcelVBAの「条件付きコンパイル引数」をプログラムから操作できるか調べてみたけど駄目だった
■目的
ExcelVBAの「条件付きコンパイル引数」をプログラムから操作できるか調べる。
b0232065_0463186.png


以下のようにコンパイル引数でコードを区別できます。

Public Sub test2()
#If (UNIT_TEST) Then
Debug.Print "Yes"
#Else
Debug.Print "No"
#End If
End Sub


今回は、コンパイル引数をプログラムで変更できるか調べてみました。

■結果
b0232065_0511951.jpg


わかりませんでした。 てへぺろ(・ω<)





■経緯
1. VBProjectオブジェクトにはそれらしいメソッドは存在しない。
Application.VBE.ActiveVBProject で VBProjectオブジェクトが取得できます。
ここにはプロジェクト名や説明はありますが、コンパイル引数はありません。


2. excel起動時のオプションで設定できないか?
excelの起動時にコンパイルオプションを指定できるかしらべました、がありませんでした。
 >参考:Excel のコマンド ライン スイッチ

3. たとえばコードからVBAをコンパイルしたときになんかできないか?
VBProjectオブジェクトにMakeCompiledFileというコンパイルに関係しそうなメソッドがありますが、ExcelのVBAでは使用できません。
このメソッドはType = vbext_pt_StandAlone = 101の場合のみ使用できます。
 >参考:http://www.office-archive.com/2-excel/b7f0f51e587b7b24.htm

また、コンパイルを行うタイミングはデフォルトでは次のとおりです。
 ・マクロをはじめて実行したとき
 ・デバッグ→VBAProjectのコンパイル を実行したとき。
この時コンパイルをするとp-codeとよばれる中間コードが作成されて、Excelファイルに挿入されます。
つまり、コンパイルするとサイズがでかくなります。
このあたりの詳細は下記を参照してください。
 >参考:VBAはインタプリタ?コンパイラ? www.h3.dion.ne.jp:sakatsu
       VBA CODE DECOMPILER AND COMPACTOR

■結論
おそらく変更できません。

変更するとしたら、XLSファイルのバイナリを直接いじって、かつ、コンパイルしなおさなければなりません。
超えるべきハードルが多すぎてしかも、MSDNで保障されないので、やるべきではないでしょう。

あるいは、VBEのウィンドウに対して直接、SendKeyを送ってダイアログを表示、変更したあとOKを押すということはできますが、これも反則くさいのでやめときます。
[PR]
by mima_ita | 2012-09-11 01:19 | VBA
<< DevelopersSummi... このままだと自殺を考えてしまう... >>



実験ですお
検索
カテゴリ
最新の記事
.NET4.5におけるasy..
at 2014-07-02 00:46
.NETでTwitterを検..
at 2014-06-29 00:49
Redmineのプラグインで..
at 2014-06-28 03:29
IO.popenのwrite..
at 2014-06-28 03:25
RedmineのWikiでU..
at 2014-06-28 03:16
以前の記事
最新のトラックバック
その他のジャンル
ブログパーツ