問題
私はこの 10 年前の Excel ワークブックを持っており、VBA コードの膨大な行が含まれており、そのうちのいくつかを更新する必要があります。そこで、Ruby で単体テストを作成するというクレイジーなアイデアを思いつきました...
質問
Ruby から Excel マクロを呼び出すにはどうすればよいですか?
私がこれまでに持っているもの
私は持っている
- 「C:\temp\Test.xlsm」という Excel ワークブック
- 「Sheet1」というシートと
- セル「A1」。
さらに、このエクセルブック
- 「Module1」というモジュールが含まれています
- と呼ばれるマクロ
WriteToA1()
で - と呼ばれる別のマクロ
ClearA1()
さらに、次のような Ruby スクリプトがあります。
require 'test/unit'
require 'win32ole'
class TestDemo < Test::Unit::TestCase
def testExcelMacro
# Arrange
excel = WIN32OLE.new("Excel.Application")
excel.Visible = true
excel.Workbooks.Open('C:\temp\Test.xlsm')
# Act
excel.run "Sheet1!WriteToA1"
# Assert
worksheet = excel.Workbooks.ActiveWorkbook
assert_equal("blah", worksheet.Range("A1").Value)
excel.Quit
end
end
例外
この例外が発生します
WIN32OLERuntimeError: (in OLE method `run': )
OLE error code:800A03EC in Microsoft Excel
Cannot run the macro 'Sheet1!WriteToA1'. The macro may not be available in this workbook or all macros may be disabled.
HRESULT error code:0x80020009
Exception occurred.
ここで説明されているように、Excel ですべてのマクロを有効にしました。
Excelを起動中、「Test.xlsm」を開きます。次の行に何か問題があるはずです。
excel.run "Sheet1!WriteToA1"
私もこれを試しました:
excel.run "Sheet1!Module1.WriteToA1"