プロが教える店舗&オフィスのセキュリティ対策術

Win/XP エクセル2002使用です。

VBSからエクセルのマクロを有効にして立ち上げたいのですが、
上手くいきません。

バッチファイル側
 cd /D c:\
 C:\***.vbs
 exit /B

VBS側
'エクセル起動
 Set WshShell = CreateObject("WScript.Shell")
 WshShell.CurrentDirectory = "C:\***"
 WshShell.Run "C:\***\***.xls",3
 WScript.Sleep(5000)
 WshShell.SendKeys("E") '←マクロを有効にする
 WScript.Sleep(5000)
 WshShell.SendKeys("U") '←データソースへのリンクを更新

エクセル側(マクロ)
 Sub Auto_open()
  Application.OnTime TimeValue("13:00:00"), "Action"
 End Sub
 Sub Action()
   ・・・(省略)・・・
 End Sub

-----------------------------

また、エクセルマクロは、VBSではなく手動で立ち上げますと、
問題なく時間になった時(13時)に作動します。

VBSのRunメソッドが、
エクセルマクロの
Application.OnTime を待たずに走ってしまうことで、
エクセルマクロが無効になってしまっているのではないか?

もしくは、データ更新のための
sendkey("U")によって
マクロが無効になってしまっているのはないか?

と思っています。

恐れ入りますが、
よろしくアドバイスの程お願いします。

A 回答 (2件)

こんにちは。



VBS を使うなら、Excel のインスタンスを作り、Workbooks.Open で
ブックを開けばマクロのセキュリティー警告は表示されません。

 # Open メソッドの第二引数でリンクの更新も指定できますし

SendKeys を使った方法より確実ですよ。一例です。


REM ■ Sample.bat ------------------------------------------
cd /D c:\
C:\test.vbs
exit /B


' // ■ VBS --- C:\test.vbs --------------------------------
Dim xlApp
Dim xlWbk

Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True

' // Memo: Workbooks.Open Filename, UpdateLinks ...
' // リンクを更新させて開く
Set xlWbk = xlApp.Workbooks.Open("C:\test.xls", True)


' // ■ Excel --- C:\test.xls -------------------------------

' // ThisWorkbook Module ( Auto_Open 不可では不可)
Private Sub Workbook_Open()
  Application.OnTime Now() + TimeValue("00:00:03"), "Action"
End Sub

' // Standard Module
Sub Action()
  MsgBox "Hellow!", vbInformation
End Sub
    • good
    • 0

#1 です。

失礼。下記意味不明なことを口走ってますが、、

> ' // ThisWorkbook Module ( Auto_Open 不可では不可)

Auto_Open ではなく、ThisWorkbook の Workbook_Open を使って下さい
との意味です。
    • good
    • 0
この回答へのお礼

KenKen_SP 様 早速のご回答ありがとうございます。

むっちゃ速! です(^・^)

ご教授いただいた上に、速い、確実!
最高です。 快調に動きだしました。

今後ともよろしくお願いします。
本当にありがとうございました。

お礼日時:2008/03/04 15:56

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

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


このQ&Aを見た人がよく見るQ&A