UWSCでVBAを実行する方法を教えてください

下記コードでUWSCからVBAを実行しようとしても、エラーが出ます。
最後の行をExcel.Application.Run "C:\Users\abc\Desktop\AA.xlsx!Module1.BB"としてもダメでした。
よろしくお願い致します。

path="C:\Users\abc\Desktop\AA.xlsx"
EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.visible = True
Excel.WorkBooks.Open(FileName:=path)
sleep(2)
Excel.Application.Run "Module1.BB"

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2016/06/25 19:37:46
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント300pt

こんな感じになるんじゃないでしょうか(試してないけど)。

path="C:\Users\abc\Desktop\AA.xlsb"
EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.Visible = True
EXCEL.Workbooks.Open(FileName:=path)
sleep(2)
EXCEL.Run "BB"
  • ワークシートは「バイナリブック」で保存。なので、拡張子も .xlsx → xlsb(マクロ有効ブックでも良いし、97-2003 ブックでも可)
  • 一応、変数(オブジェクト)の大文字/小文字を統一
  • プロパティも大文字/小文字をきっちりと合わせる
    • EXCEL.visible → EXCEL.Visible
    • EXCEL.WorkBooks → EXCEL.Workbooks :
  • VBA でいう Application は、CREATEOLEOBJ したオブジェクト(なので、.Application は要らない)
  • Run メソッドの引数はサブルーチン名だけ


AA.xls に引数なしのサブルーチン BB があることが大前提です。

Sub BB()
    ...
End Sub

あと、デジタル署名をつけるか、セキュリティレベルを下げる必要があると思います。
セキュリティレベルを下げるのは「開発」リボン→「マクロのセキュリティ」で、「すべてのマクロを有効にする」を選択して保存。

他2件のコメントを見る
id:consultation10

ご回答ありがとうございます。

UWSCのコードとExcelブックはお試し用です。
EXCEL.Run("BB")でマクロを実行することができました!ありがとございました。

ちなみに、(PERSONAL.XLSB)に入っているサブルーチンBBを実行する方法がありますでしょうか?



path="C:\Users\abc\Desktop\AA.xlsx"
EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.Visible = True
EXCEL.Workbooks.Open(FileName:=path)
sleep(2)
EXCEL.Run ("BB")



やりたいことはデーターベースからデスクトップに出力されたAA.xlsxを編集するため、UWSCから(PERSONAL.XLSB)に入っているサブルーチンBBを実行することです。
質問時の説明が足りなくて大変申し訳ございませんが、もし可能であればよろしくお願い致します。

2016/06/25 12:48:03
id:a-kuma3

ここから先は、UWSC は関係ない話です。
その PERSONAL.xlsb のサブルーチン BB は、デスクトップにある AA.xlsx をどうやって扱いますか?
大きく分けて、ふたつのパターンがあると思います。

ひとつは、PERSONAL.xlsb のマクロが AA.xlsx を分かっている、もしくは見つけられるケース。
PERSONAL.xlsb で Workbooks.Open を使って、AA.xlsx を開いて、手に入った Workbook オブジェクトを操作します。

Sub XX()    ' PERSONAL.xlsb の VBA

    Set target_book = Workbooks.Open("C:\Users\abc\Desktop\AA.xlsx")
    Set sheet = target_book.Sheets(1)   ' AA.xlsx の一番目のシート
    Set cell = sheet.cells(1,1)         ' AA.xlsx の一番目のシートの A1 セル
        ...

UWSC からは、PERSONAL.xlsb のサブルーチンを呼び出します。

もうひとつは、AA.xlsb から PERSONAL.xlsb のサブルーチンを呼び出すケース。
UWSC のコードと同じで、Application.Run メソッドを使います。

Sub BB()    ' AA.xlsb の VBA
    Set personal_book = Workbooks.Open("D:\foo\PERSONAL.xlsb")
    Application.Run "PERSONAL.xlsb!XX"
        ...

データが吐き出された方のブックでマクロが動くようにしてあげる必要があります。

データが吐き出された AA.xlsx の方では、マクロは持たずにデータだけにしておきたい、ということであれば、前者の方を使うことになります。

2016/06/25 13:57:19

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません