Excel VBAなどの開発環境は、たいていVisual Basic Editorです。
しかし、なんでもEmacs上でやらないと病気になってしまう、 もやしな人間たちにとってはEmacsでVBAが書きたいところ。
というわけで、無謀にもEmacsでVBAの開発がでいないものか、調べてみました。
visual-basic-mode.el
visual-basic-mode.elというものを見つけました。
emacswikiからダウンロードして、ロードパスの通った場所に配置します。init.elにも以下を記述。
(autoload 'visual-basic-mode "visual-basic-mode" "Visual Basic mode." t)
(setq auto-mode-alist (append '(("\\.\$latex frm\\|bas\\|cls\$$" .
visual-basic-mode)) auto-mode-alist))
VBAのファイルがハイライト表示される。
text-scripting-vba
Excel VBAのコードのインポート・アウトポートを簡単にできる。そうすると、
- ViやEmacsでコードがかける
- バージョン管理ができる
- TDDでコーディングができる
と、いろいろなメリットがある。
本サイトは、以下。
使い方
xlsm拡張子のExcelデータを新規作成。test.xlsm
開発タブからVBE起動(Alt+F11でも)。 開発タブはデフォルトで隠されているので、表示されていなければオプションから表示させる。
ツールバーのファイル -> インポートを選択。 以下から落としてきたThisWorkbook.clsをインポート。
ちなみに、文字コードがUTF-8なので、Shift-Jisに変換したほうがよい。変換方法は以下。
nkf -s ThisWorkbook.cls > ThisWorkbook_sjis.cls
ExportThisNotebokとReloadModuleのマクロが追加される。
標準Moduleに追加されるので、その内容をThisWorkBookに切り取り・貼り付けをする。
コードを書く
サンプルとしてコンナコードを書く。./src/hello.bas
Sub Hello()
MsgBox ("Hello VBA")
End Sub
libdef.txtを作成。ここに読みこむソースのパスを相対パスで記述。
./src/hello.bas
マクロ(F5 or Alt+F8)のReloadModuleを実行すると、 先ほど作成したhello.basが取り込まれる。
こんなふうにすれば、Emacsで編集して取り込んでテストということが可能。
VB Lite Unit
VBAで TDDを実施するためのツールとして、VB Lite Unitがある。
詳しくは過去記事参照。
vbasense.el
vbasenseなるものは、オムニ補間ができるとのこと。Special Thanks.
el-getからインストールします。init.elにも以下を追加。
(require 'vbasense)
;; キーバインド
(setq vbasense-popup-help-key "C-:")
(setq vbasense-jump-to-definition-key "C->")
;; 必要に応じて適宜カスタマイズして下さい。以下のS式を評価することで項目についての情報が得られます。
;; (customize-group "vbasense")
;; 推奨設定を行う
(vbasense-config-default)
M-x vbasense-load-libraryを実行したときに、 [VBASense] Not yet regist TLBINF32.DLLというエラーがでることがある。
ただし、自分の環境ではどうも動かし方がわかりませんでした。 TLBINF32.DLLの登録方法がわからずに導入は挫折、残念。
windows7 64bitだと、ダメなのかな?
C:\Windows\SysWOW64>regsvr32.exe TLBINF32.DLL
vbasense-tli-filesに自分の環境のパスを変更しても、うまくパスをみつけてくれない。 chkTLI.vbsをNop応答にして、だましで少しつかってみる。
Excelenium
この記事とはまったく関係ないけれども、このツールがとてもおもしろそうなので、memo。
ExcelとSeleniumを組合せたもので、Excelのテスト仕様書からSeleniumを実行できる。しかも、OSSとか。