「みんな教えて! 選手権!!」開催のお知らせ

エクセルで記載したVBAマクロをVBSから起動しようとしてもうまく動作しません。
VBA単体で動かすときちんと動作しますが、VBSから起動するとどうもうまくいきません。
月初めにタスクで複数シートのある範囲のセルの値を消したいだけなのですが、ご教授いただけると助かります。

ExcelVBA(C:\hoge\hoge.xlsm)
sub 処理()
Dim i As Integer
For i =1 To 31
worksheets(i).select
range ("A1:B9").ClearContents
next i
End sub

VBS
Dim ExcelApp
Dim ExcelBook
Dim FilePath

FilePath = "C:\hoge\hoge.xlsm"

Set ExcelApp=CreateObject("Excel.Application")
Set ExcelBook= ExcelApp.Workbooks.Open(FilePath)
ExcelApp.ActiveWorkbook.Worksheets("1").select

ExcelApp.visible = false

ExcelApp.Run "処理()"

ExcelBook.Close True
ExcelApp.quit

Set ExcelApp=Nothing
Set ExcelBook=Nothing

A 回答 (2件)

No,1の方と同じですが、マクロが


For i =1 To 31
worksheets(i).select
・・・
next i
なので
ExcelApp.ActiveWorkbook.Worksheets("1").select は 不要?

Set ExcelApp=CreateObject("Excel.Application")
ExcelApp.Workbooks.Open(FilePath)
ExcelApp.visible = True

ExcelApp.Run "処理()"

で一度、試してみれば
原因がわかれば
ExcelApp.visible = False に
    • good
    • 0

こんにちは。



Excel側のマクロについては、そのままにしておきますが、
VBS側は、2点気になる部分があります。

>ExcelApp.ActiveWorkbook.Worksheets("1").select
("1") というのは正しいですか。 Worksheets(1) ではありませんか?
Excel側のマクロが、i をインデックスとして使っているのなら、VBS側も同じ扱いのほうがよいです。(本来は不要のはずです)

そして、オブジェクトを作ったのですから、
それは、ExcelBook.Worksheets(1).Select
と同等の意味のはずです。

>ExcelApp.Run "処理()"
処理()というマクロが、標準モジュールにおいてあることが条件と、
動かない場合は、

ExcelApp.Run "'"&ExcelBook.Name& "'!処理()"
と、ブックから、まとめて呼び出したほうがよいです。
同名のプロシージャー・マクロがある時は、Module 名も付けます。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報