问题
我有这个十年前的Excel工作簿,里面有大量的VBA代码,其中一些我需要更新。所以我有一个在Ruby中编写单元测试的疯狂想法......
问题
如何从Ruby调用Excel宏?
到目前为止我有什么
我有
此外,这个Excel工作簿
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.
我按照here所述启用了Excel中的所有宏。
Excel正在启动,“Test.xlsm”已打开。这条线肯定有问题:
excel.run "Sheet1!WriteToA1"
我也试过这个:
excel.run "Sheet1!Module1.WriteToA1"
答案 0 :(得分:1)
您需要提供的所有OLE模块都是宏名称
excel.run('WriteToA1')
另请注意,如果要运行带有争论的宏,请使用:
excel.run('MarcoWithArgs', "Arg")