3

問題

私はこの 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"
4

1 に答える 1

2

OLE モジュールを提供するために必要なのは、マクロ名だけです

excel.run('WriteToA1')

また、引数を使用してマクロを実行する場合は、次を使用することに注意してください。

excel.run('MarcoWithArgs', "Arg")
于 2012-06-10T04:27:49.290 に答える