VBAをRubyでテストする(4)

今回 テスティングフレームワークRSpec を使用します。

RSpec をインストール

コマンドプロンプトを起動し、Rubyのバージョンを確認する。
f:id:jsuo:20131121171016p:plain

コマンドプロンプトに install コマンドを入力する。

>gem install rspec

RSpecが無事にインストールされていることを確認する。
f:id:jsuo:20131121172206p:plain


exlap.rb

Rubyから直接Excelを扱うのは多少やり辛いため 何かないかと探したことろ
T. Yoshiizumi氏 作成の exlap という良さげなライブラリが見つかりました。
使わさせて頂きます。ありがとう T. Yoshiizumi氏
T. Yoshiizumi - Excel用ライブラリexlap.rbの使い方

DLした exlap.rb を受注検索.xlsmと同じフォルダに保存し練習としてテストコードを書いてみます。
受注検索.xlsmに標準モジュール Module1 を追加し
Module1 に sayHelloプロシージャを書きます。
見てのとおり引数を渡すと ヘロー!{名前} と返すだけの処理です。

Option Explicit
Function sayHello(ByVal str As String) As String
    
    If Trim(str) = "" Then str = "名無し"
    
    sayHello = "Hello! " & str

End Function


sayHello_spec.rb を新規作成し sayHelloプロシージャのテストコードを書きます。

コマンドプロンプトから rspecコマンドでテストを実行します。

>rspec -fs sayHello_spec.rb

実行結果は 0 failures でした。問題ないようです。
f:id:jsuo:20131121224036p:plain


社員モデルクラスのテストコードを書く

テストを実行します。

>rspec -fs mdlEmployee_spec.rb

実行結果です。問題ないようです。
f:id:jsuo:20131122220200p:plain


RSpecに関しては「The RSpec Book」が参考になりました。


VBAをRubyでテストする(3)

[受注検索] カスタムタブの社員IDと社員氏名はプルダウンでリスト表示する仕様にするため、リストの値をデータベースの [社員] テーブルから取得します。

まずはADOコネクションを管理するヘルパークラスを作ります。

hlpAdoConnect クラス

※フォントが妖しげな色になっていますがGistによるものです。ご了承下さい。



次に社員のモデルクラスを作ります。

mdlEmployee クラス

VBAをRubyでテストする(2)


受注検索.xlsm を作成

1. Excel2010を起動する。

2. [ファイル] > [名前を付けて保存]を選択する。

3. ファイルの種類を [Exce マクロ有効ブック (*.xlsm)] に設定し ファイル名を入力し [保存] ボタンを押します。
f:id:jsuo:20131116160048p:plain

4. Alt + F11キーを押して Visual Basic Editor をする。

5. 今回はデータベースとの接続に ActiveX Data Objects というAPIを使います。
Visual Basic Editor の[ツール] > [参照設定]を押してライブラリのリストから[Microsoft ActiveX Data Objects 6.1 Library]というヤツを探しチェックを入れて[OK]ボタンを押します。
f:id:jsuo:20131116161539p:plain

6. Excelに戻ります。UIとして[受注検索]というカスタムタブを用意しました。社員情報等の検索条件を入力し[実 行]ボタンを押すと検索結果がシートに出力される仕様とします。
カスタムタブの作成は Office Ribbon Editor というアプリを使用しました。
私はバージョン4.4.2を使いましたが、このアプリには若干のバグがあるようで、使うには注意が必要です。
f:id:jsuo:20131116163004p:plain


[受注検索] カスタムタブのXMLです。

VBAをRubyでテストする(1)

Visual Basic for Applications (以下 VBA) は規模が小さいツール等を作るには

便利です。しかし規模が大きいものを作る場合は色々と困難が生じます。

困難の一つにはテストのしづらさが上げられます。

そこでVBA単体テストRubyで実施する手法を考えてみました。

題材としてMS-Accessのサンプルデータベース Northwind を使用し

Excel VBANorthwindからデータを取得するプログラムを作成することにします。

そのプログラムの単体テストRubyのテスティングフレームワークで行います。


Northwind の準備

1. Access2010を起動する。

2. [ファイル] > [新規作成] > [サンプル テンプレート]を選択します。

f:id:jsuo:20131108155526p:plain

3. [Northwind] を選択し、[ファイル名]から保存先を指定し[作成]ボタンを押します。
f:id:jsuo:20131108160630p:plain

4. Accessの設定によってはセキュリティの警告が表示されます。[コンテンツの有効化]ボタンを押します。
f:id:jsuo:20131108161112p:plain

5. ログインダイアログが表示されました。[ログイン]ボタンを押します。
f:id:jsuo:20131108162128p:plain

6. 受注リストが表示されました。
f:id:jsuo:20131108163213p:plain



サンプルデータベースが準備できました。
次回は受注リストを Excel VBA で取得するプログラムを作ります。