12 Apr 2014, 12:37

ExcelVBAのコードをimport/exportする

Excel VBAの最大の課題が、保守性。 Excelの中にコードが縛られている。このコードを外に出すと、

  • バージョン管理ができる
  • VimやEmacsなどのエディタで開発できる
  • テスト駆動開発できる

などなど。

レガシーなExcelVBAもバージョン管理、テスト、自動化という 現代ソフトウェア開発の三種の神器に従って開発ができる。

調べてみると、同じようなことを考えている人たちがいた。

これらの方法を利用してもいいのだが、 現在VBA絶賛勉強中のため、自分の学習も兼ねて、 VBAのコードをExcel内からimort/exportするコードを書いてみた。

苦労した点とか

Rubyの win32oleがつかえなかった

<div class="outline-text-3" id="text-1-1">
  <p>
    はじめはRubyでやっちゃえと思ったけど、どうもwin32oleではメソッドがみつからなかった。
  </p></p>
</div></p>

Excel Objectについて

<div class="outline-text-3" id="text-1-2">
  <p>
    標準モジュール、クラスモジュールはImpot/Exportができるのだが、 ThisWorkbookやSheetなどのExcel Objectはそれができない。 これらは、行の削除と挿入で対応した。
  </p>

  <pre><code>Private Sub InsertLines(myFile As String)

Dim myFSO As New FileSystemObject Dim myBaseName As String: myBaseName = myFSO.GetBaseName(myFile)

With ThisWorkbook.VBProject.VBComponents(myBaseName).CodeModule .DeleteLines StartLine:=1, count:=.CountOfLines .AddFromFile myFile

' Delete header lines
.DeleteLines StartLine:=1, count:=4

End With

Set myFSO = Nothing End Sub

自分で自分をリロードできない

<div class="outline-text-3" id="text-1-3">
  <p>
    VBAで書くと、自分自身のコードをimport/exportすることができない。
  </p>

  <p>
    なので、ThisWorkbookとFileManagerという二種類のファイルに処理を分けて 2段階でインポートすることにした。
  </p></p>
</div></p>

Environment

<div class="outline-text-3" id="text-1-4">
  <ul class="org-ul">
    <li>
      Windows 7 64bit
    </li>
    <li>
      Excel 2010
    </li>
  </ul>

  <p>
    </div>
  </p>
</div></p>

最後に

<div class="outline-text-2" id="text-2">
  <p>
    このベージの解説が素晴らしい。本当に、Special Thanks.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://rsh.csh.sh/text-scripting-vba/">vi で書こう VBA — Text Scripting on VBA</a>
    </li>
  </ul>
</div></p>