QA@IT
«回答へ戻る

回答を投稿

提示の例ですが個人用マクロブックのマクロを実行しようとしている格好でしょうか?
そうすると実行ユーザーが誰なのかも問題になるとおもいます。

全然検証はできていませんが
以下の様にしてブックに書いたマクロを呼び出してみた場合はどうなりますか?

  ExcelWorkbooks xlBooks=excel.Workbooks(); 
  ExcelWorkbook xlbook=xlBooks.Open(マクロ付ブック); 
  Object[] arg=new Object[1]; 
  arg[0]="test"; 
  xlbook.method("testmacro", arg); 
  xlbook.Close(false,null,false); 

マクロの方は

Public Sub testmacro(val as String)
  ' val で取り出す

または

Public Sub testmacro(val as Variant)
  ' val(ubound(val)) で取り出す

で取り出せるんじゃないかと思います。

ただMicrosoftは.NETにおいてサーバー側のExcelオートメーションを推奨していません。
Interopだったからかオートメーションそのものをだったかは記憶していませんがそのあたりは一応認識されておいたほうがいいかもしれません。
※ 禁止って意味ではなかったはず。

提示の例ですが個人用マクロブックのマクロを実行しようとしている格好でしょうか?
そうすると実行ユーザーが誰なのかも問題になるとおもいます。

全然検証はできていませんが
以下の様にしてブックに書いたマクロを呼び出してみた場合はどうなりますか?
```java
  ExcelWorkbooks xlBooks=excel.Workbooks(); 
  ExcelWorkbook xlbook=xlBooks.Open(マクロ付ブック); 
  Object[] arg=new Object[1]; 
  arg[0]="test"; 
  xlbook.method("testmacro", arg); 
  xlbook.Close(false,null,false); 
```

マクロの方は
```
Public Sub testmacro(val as String)
  ' val で取り出す
```

または
```
Public Sub testmacro(val as Variant)
  ' val(ubound(val)) で取り出す
```

で取り出せるんじゃないかと思います。


ただMicrosoftは.NETにおいてサーバー側のExcelオートメーションを推奨していません。
Interopだったからかオートメーションそのものをだったかは記憶していませんがそのあたりは一応認識されておいたほうがいいかもしれません。
※ 禁止って意味ではなかったはず。