05 Apr 2014, 11:33

EmacsでのExcel VBA開発環境を構築

Excel VBAなどの開発環境は、たいていVisual Basic Editorです。

しかし、なんでもEmacs上でやらないと病気になってしまう、 もやしな人間たちにとってはEmacsでVBAが書きたいところ。

というわけで、無謀にもEmacsでVBAの開発がでいないものか、調べてみました。

[toc]

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でコーディングができる

と、いろいろなメリットがある。

本サイトは、以下。

使い方

<div class="outline-text-3" id="text-2-1">
  <p>
    xlsm拡張子のExcelデータを新規作成。test.xlsm
  </p>

  <p>
    開発タブからVBE起動(Alt+F11でも)。 開発タブはデフォルトで隠されているので、表示されていなければオプションから表示させる。
  </p>

  <p>
    ツールバーのファイル -> インポートを選択。 以下から落としてきたThisWorkbook.clsをインポート。
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/tcsh/text-scripting-vba">tcsh/text-scripting-vba</a>
    </li>
  </ul>

  <p>
    ちなみに、文字コードがUTF-8なので、Shift-Jisに変換したほうがよい。変換方法は以下。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://futurismo.biz/archives/1331">Cygwinにnkfをインストールして文字化け攻略する! | Futurismo</a>
    </li>
  </ul>

  <pre><code>nkf -s ThisWorkbook.cls > ThisWorkbook_sjis.cls

  <p>
    ExportThisNotebokとReloadModuleのマクロが追加される。
  </p>

  <p>
    標準Moduleに追加されるので、その内容をThisWorkBookに切り取り・貼り付けをする。
  </p></p>
</div></p>

コードを書く

<div class="outline-text-3" id="text-2-2">
  <p>
    サンプルとしてコンナコードを書く。./src/hello.bas
  </p>

  <pre><code>Sub Hello()

MsgBox (“Hello VBA”) End Sub

  <p>
    libdef.txtを作成。ここに読みこむソースのパスを相対パスで記述。
  </p>

  <pre><code>./src/hello.bas

  <p>
    マクロ(F5 or Alt+F8)のReloadModuleを実行すると、 先ほど作成したhello.basが取り込まれる。
  </p>

  <p>
    こんなふうにすれば、Emacsで編集して取り込んでテストということが可能。
  </p></p>
</div></p>

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とか。