Quick Start: Text Scripting VBA

1. ファイルのダウンロード

下記ファイルをダウンロードして、同じフォルダに置く。

  • txt-scripting.xlsm (マクロ本体)

    Note

    もしくは、手元で空の xlsmファイルを作成して、下記のソースファイルを読み込んでもよいです。(文字コードがあってなくてもコメントが文字化けするだけです。)

    • source code (UTF8) (マクロソースファイル: UTF-8テキストファイル本体)
  • libdef.txt (モジュールリスト)

  • main.bas (サンプルモジュール1: テキストファイル)

  • modSample.bas (サンプルモジュール2: テキストファイル)

2. バージョン管理の開始

2.1. 分散バージョン管理システムへの登録

下記のテキストファイルを 分散バージョン管理システムに追加する。

  • libdef.txt

  • main.bas

    command sample (mercurial):

    % hg add libdef.txt main.bas modSample.bas

2.2. ignoreファイルの作成

分散バージョン管理システムの ignoreファイルを作成する。

./.hgignore sample (mercurial):

.sw.$
txt-scripting.xlsm

Note

ソースコードを全て外部のテキストファイルから読み込むので、txt-scripting.xlsm 自体はバージョン管理する必要は基本的にはありません。

シートをデザインしている場合は、その部分だけ別途管理が必要かも.. (> シートをデザイン含めてエクスポートする方法はある?)

3. マクロの動作確認

3.1. txt-scripting.xlsm の起動

txt-scripting.xlsm を起動する。

Note

マクロ実行に関する警告が表示された場合、「マクロを有効にする」を選択してください。

../../../_images/warning-macro.png

Note

  • ファイルを開いた時点で、libdef.txt に記載された外部ライブラリ(テキストファイル)を読み込みます。

3.2. マクロの一覧確認

  • メニューバーから [開発] を選択する。

    ../../../_images/mac-toolbar-develop.png

    Note

    メニューバーに [開発] が表示されていない場合は、リボンの設定で [開発] にチェックを入れる。 VBA: add development to menu

  • メニューバーから [マクロ] を選択する。

    Note

    実行可能なマクロの一覧が表示される。

    ../../../_images/mac-dialog-macro.png
    • text-scripting 標準のマクロ
      • ThisWorkbook.reloadModule(): libdef.txt/モジュールのリロード (開発作業で頻繁に利用する)
      • ThisWorkbook.exportThisWorkbook(): text-scriptingのソースコードをテキストエクスポート
    • main.bas に記述
      • showRevision: リビジョン表示
    • modSample.bas に記述
      • dispOS: OS表示
      • dispVersion: Officeバージョン表示

4. ソースコード(テキストファイル)を変更してみる

dispVersion の表示が寂しいので、書き替えてみる。

Warning

vi でも Emacs でも、慣れているエディタを使いましょう。

4.1. modSample.bas の修正

./modSample.bas:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Attribute VB_Name = "modSample"

Option Explicit


Sub dispOS()
  Dim nameOS As String 
  nameOS = Application.OperatingSystem

  If nameOS Like "Windows *" Then
    ' Windows (32-bit) NT 6.01
    MsgBox "This is Windows OS. [" & nameOS & "]"

  ElseIf nameOS Like "Macintosh *" Then
    ' Macintosh (Intel) 10.8
    MsgBox "This is Mac OS X. [" & nameOS & "]"

  End If
End Sub


Sub dispVersion()
  MsgBox Application.Version
End Sub

変更点 (23行目付近 diff):

- MsgBox Application.Version
+ MsgBox "Office version is " & Application.Version

4.2. 変更の反映

  • ツールバー > [開発] > [マクロ]

  • マクロの一覧から "ThisWorkbook.reloadModule" を選択し、[実行](ボタン)をクリックする。

    Note

    • ctrl + r でもリロードできます (v1.0.0 検証中)

4.3. 反映の確認

  • ツールバー > [開発] > [マクロ]
  • マクロの一覧から "dispVersion" を選択し、[実行](ボタン)をクリックする。
../../../_images/result-dispVersion-custom.png

Note

バージョン番号の前に "Office version is " という文字列が追加されていることを確認します。

5. ライブラリリスト(テキストファイル)を変更してみる

modSample の動作確認ができたので、ライブラリリストから削除する。

Warning

vi でも Emacs でも、慣れているエディタを使いましょう。

5.1. libdef.txt の修正

./libdef.txt:

'main
./main.bas

'modules
./modSample.bas

変更点 (diff):

- ./modSample.bas
- './modSample.bas

5.2. 変更の反映

  • ツールバー > [開発] > [マクロ]

  • マクロの一覧から "ThisWorkbook.reloadModule" を選択し、[実行](ボタン)をクリックする。

    Note

    • ctrl + r でもリロードできます (v1.0.0 検証中)

5.3. 反映の確認

  • ツールバー > [開発] > [マクロ]
../../../_images/mac-dialog-macro-custom.png

Note

マクロの一覧から "dispVersion" と "dispOS" が消えていることを確認します。

6. Let's coding VBA with your vi or Emacs

あとは、 libdef.txt に自作モジュールのパスを追記して、

  • 自作モジュールを vi/Emacs で更新、
  • reloadModule() (もしくは Ctrl + r) でリロード
  • モジュール実行(動作確認)

を繰り返すだけ!

7. VBAマクロの開発サイクル

別途記述予定ですが、自分は vi & git/mercurial で概ね下記のようなサイクルを実施しています。 (テストはあまりできてない...)

  1. 試作フェイズ
  • 空のモジュールファイル(.bas もしくは .cls) を作成する。
  • 新モジュールに対するテストをviで書く。
  1. 開発フェイズ
  • 新モジュールとテストをバージョン管理システムに add する。
  • libdef.txt をviで更新し、バージョン管理システムに commit する。
  • 以下を繰り返す
    • 新モジュールの中身をviで書く。
    • reloadModuleを実行し、テスト/動作確認を実行する。
    • 動作結果が想定通りであれば、バージョン管理システムに commit する。
  1. リリースフェイズ
  • バージョン管理システムにコミットする。
  • ThisWorkbook モジュールの中身を全削除して、ファイル名を配布(配置用)ファイル名に変更する。
  • リリースする。(リリース先に配置する。)

Note

ThisWorkbook モジュールの中身を全削除して、保存されたマクロファイルは単独でどこでも動作します。 (再読み込みをしなくなるため、最後に読み込みをした状態になる。)