问题
我有一个有着数万行VBA代码的Excel工作簿,它已经十几岁了,其中一些代码需要更新。所以我想疯狂地使用Ruby编写单元测试...
问题是
我该如何从Ruby中调用Excel宏?
到目前为止我所拥有的
我有:
- 名为 "C:\temp\Test.xlsm" 的Excel工作簿
- 一个名为 "Sheet1" 的工作表和
- 一个单元格 "A1"
此外,这个Excel工作簿还包含:
- 一个名为 "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"
excel.run "Test!WriteToA1"
- Siddharth Rout