gpt4 book ai didi

ruby - 如何从 Ruby 运行 Excel 宏?

转载 作者:数据小太阳 更新时间:2023-10-29 08:10:00 26 4
gpt4 key购买 nike

问题

我有这个十多年前的 Excel 工作簿,其中包含大量 VBA 代码行,其中一些我必须更新。所以我有了用 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 中启用所有宏 here .

正在启动 Excel,“Test.xlsm”已打开。该行一定有问题:

excel.run "Sheet1!WriteToA1"

我也试过这个:

excel.run "Sheet1!Module1.WriteToA1"

最佳答案

您只需要提供 OLE 模块就是宏名称

excel.run('WriteToA1')

另请注意,如果您想运行带有参数的宏,您可以使用:

excel.run('MarcoWithArgs', "Arg")

关于ruby - 如何从 Ruby 运行 Excel 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10963950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com