データベース(.accdb)の自動更新をスケジュールする方法についてのコメントを募集しています。設定したプロセスにあまり慣れていないためです。
現在、次のように機能します。
手順が多すぎると思います。データベースに関連し、システムに保存されている2つの外部ファイル(.Batおよび.vbs)が必要なため、手順が失敗するリスクが高くなります。
どうやら(しかし、私が間違っているとどのように変更できるか教えてください).vbsはサブルーチンを呼び出すことはできず、マクロのみを呼び出すことができます。ユーザーがデータベースの環境VB=次に、サブルーチンを呼び出します。
一部の人が手順を短縮して、最終的に.batと.vbsに乗る方法を知っていることを願っています
私の知る限り、Windowsスケジュールタスクが「Access VBAで何か便利なことをする」ための最短パスは次のとおりです。
データベースに(Subではなく)パブリック関数を作成します。例えば:
Option Compare Database
Option Explicit
Public Function WriteToTable1()
Dim cdb As DAO.Database
Set cdb = CurrentDb
cdb.Execute "INSERT INTO Table1 (textCol) VALUES ('sched test')", dbFailOnError
Set cdb = Nothing
Application.Quit
End Function
データベースにマクロを作成して、関数を呼び出します。
適切なパラメーターでMSACCESS.EXEを呼び出すWindowsスケジュールタスクを作成します。
上記のダイアログボックスでは、値は次のとおりです。
プログラム/スクリプト:
"C:\Program Files\Microsoft Office\Office14\MSACCESS.EXE"
引数を追加 (オプション):
C:\Users\Public\schedTest.accdb /x DoSomething
Vbsスクリプトは、次を使用して標準のvba SUBROUTINEを呼び出すことができます。
dim accessApp
set accessApp = createObject("Access.Application")
accessApp.OpenCurrentDataBase("C:\MyApp\MultiSelect.mdb")
accessApp.Run "TimeUpDate"
accessApp.Quit
set accessApp = nothing
サブTimeUpDateは標準のVBAサブルーチンであることに注意してください。これは、autoexec marocrsとマクロがまったくないことを意味します-純粋なVBAサブ呼び出し+このvbsスクリプトのみ。
まだ機能するプロセスとして実行できるようにするために、アクセスの最初の年にさかのぼる少し知られているトリックがあります。 Accessは、起動時に常に「Autoexec」というマクロを探します。それが見つかると、すぐにこのマクロの実行を開始します。フォームを開く前にプログラムを初期化する必要がある場合、または元の質問者の場合のように、ユーザーI/Oなしでスケジュールされたプロセスとしてアクセスを実行する場合、これは非常に便利です。
約4時間、頭を壁に打ちつけた後、ようやくこれが機能するようになりました。
1)DOSバッチファイルを1行で作成します。この行は、a)Microsoft Accessへのフルパス(msaccess.exe)、b)コードを含むMicrosoft Accessデータベースのフルパス、c)Accessコマンドライン引数「/ x MacroName」の3つの部分で構成されています。 。最初の2つの項目は引用符で囲む必要があります。私のものは次のようになります。
"C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE" "C:\MyPrograms\ProdDB Reports\ProdDB Reports.accdb" /X DailyTestReportsRun
2)バッチファイルで使用した名前でマクロをAccess内に作成します。 RunCode
という1つのコマンドがあり、呼び出したいVBA関数の名前の引数があります。この後に、開き/閉じ括弧「()」が続くはずです。関数にパラメーターを渡そうとしませんでした。これには問題があると思います。
4)呼び出すVBA関数の最後にDocmd.Quit
コマンドがあること、またはこれをマクロの2行目として追加することを確認します。これらは、プロセスの実行後にAccessが開いたままにならないようにします。
5)Windowsタスクスケジューラで、「基本タスクの作成」を選択します(ウィザードを起動します)。プログラム名をDOSバッチファイルの名前に設定します。 「終了したらプロパティウィンドウを開く」などのラベルの付いた便利なチェックボックスがあります。それを確認して、プロパティウィンドウに移動します。
6)ユーザーがログオンしているかどうかに関係なく、タスクを実行するように設定します。また、ここで友人が提案した「最高の権限で実行する」ボックスもチェックしてください。
これで、スケジュールされたタスクを右クリックし、[実行]コマンドを選択して、すべてをテストできます。
アルバート・カラルの台本が好きで試してみました。私はそれをスケジュールしようとするまで、すべてがうまくいった。その後、なんらかの謎の理由で、スケジューラーはそれを開始しません。