![][1]
Excel VBAの最大の課題が、保守性。 Excelの中にコードが縛られている。このコードを外に出すと、
- バージョン管理ができる
- VimやEmacsなどのエディタで開発できる
- テスト駆動開発できる
などなど。
レガシーなExcelVBAもバージョン管理、テスト、自動化という 現代ソフトウェア開発の三種の神器に従って開発ができる。
調べてみると、同じようなことを考えている人たちがいた。
これらの方法を利用してもいいのだが、 現在VBA絶賛勉強中のため、自分の学習も兼ねて、 VBAのコードをExcel内からimort/exportするコードを書いてみた。
Rubyの win32oleがつかえなかった
はじめはRubyでやっちゃえと思ったけど、どうもwin32oleではメソッドがみつからなかった。
Excel Objectについて
標準モジュール、クラスモジュールはImpot/Exportができるのだが、 ThisWorkbookやSheetなどのExcel Objectはそれができない。 これらは、行の削除と挿入で対応した。
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
自分で自分をリロードできない
VBAで書くと、自分自身のコードをimport/exportすることができない。
なので、ThisWorkbookとFileManagerという二種類のファイルに処理を分けて 2段階でインポートすることにした。
Environment
- Windows 7 64bit
- Excel 2010
最後に
このベージの解説が素晴らしい。本当に、Special Thanks.