プロが教えるわが家の防犯対策術!

Accessのテーブルをexcelで外部データとしてクエリーで利用する。通
常はAccessの運用でグラフだけをexcelで利用する。Accessのグラフ作
成でAccessを終了してexcelを起動する。この時の起動オプションで
waitフラグをtrueにして実行待ちをしている。

Accessでexcelは正常に起動する。逆に今度はexcelを閉じる時にAccess
を起動したい。この時の起動オプションにはwaitフラグは無いので。
excelが終了する前にAccessが起動しているので。

前のexcelがAccessのテーブルを専有していると言う事でAccessが読み
取り専用で開く。これは不味い。excleでAccessを開く時の起動オプ
ションにwaitフラグは無いのでしょうか。

このexcelでAccessを開く時にwaitフラグをセット出来ないとこの問題は
解決しません。waitフラグをセットする方法を教えて下さい。

excelの起動はshell関数を使っています。excelのvbaではwshの
CreateObjectは動くのでしょうか。それで問題は解決しそうですか。

よろしく回答願います。

質問者からの補足コメント

  • うーん・・・

    下記の様に簡単にして、Accessのみを起動しての実験も動きません。
    エラーはファイルが無いとの様ですが。エラーは-2147024894です。

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim wshsell
    Dim retval
    Dim st
    st = "C:\Program Files (x86)\Microsoft Office\Office12\MSACCESS.exe "
    Debug.Print st
    Set wshshell = CreateObject("WScript.Shell")
    retval = wshshell.Run(st, 1, True)
    End Sub
    このコードを動く様にしたい。
    よろしくお願いします。

      補足日時:2016/12/23 10:35
  • うーん・・・

    st="notepad.exe"とすると、正常にnotepad.exeが開きます。
    と言う事は、stの中の式の記述がおかしいと言う事になりますが。

    式のどこがおかしいのでしょうか。

      補足日時:2016/12/23 10:41

A 回答 (1件)

以下の修正が必要になるかと。


1)
Dim wshsell

Dim wshshell
に変えてください。
2)
st = "C:\Program Files (x86)\Microsoft Office\Office12\MSACCESS.exe "
の最後の空白をとってください。
3)空白を含むパスをRunで実行する場合は、ダブルクオートでくくる必要があります。
st = """C:\Program Files (x86)\Microsoft Office\Office12\MSACCESS.exe"""
のようにしてください。
下記URLが参考になります。
http://jutememo.blogspot.jp/2014/03/vbscript-2.h …
    • good
    • 0
この回答へのお礼

有難う御座います。

お礼日時:2016/12/23 18:53

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