sql >> データベース >  >> RDS >> Access

方法:MicrosoftAccessでスケジュールされたタスクを実行する

    自動スケジュールでAccessコードを実行したいと思ったことはありませんか?

    既存のAccessアプリケーションを使用して、タスクスケジューラを介して起動したときに正常に実行および終了し、エンドユーザーが起動したときに使いやすいユーザーインターフェイスを表示する方法を説明します。

    それを機能させるための鍵は、/cmdです。 フラグ。

    コマンドライン引数をアクセスに渡す

    アクセスするコマンドライン引数を渡すには、/cmdを使用します アプリケーション起動時のコマンドライン引数:

    コマンドラインに続くのは、コマンドによって返される値であることを指定します 働き。このオプションは、コマンドラインの最後のスイッチである必要があります。 / cmd の代わりにセミコロン(;)を使用できます 。

    このスイッチを使用して、Visual Basic for Applications(VBA)コードで使用できるコマンドライン引数を指定します

    /cmdに続いてコマンドラインで渡すテキストを取得するには 引数には、VBA.Commandを使用します 働き。

    起動時にこの関数を使用して、コードをリダイレクトし、定期的なタスクを実行できます。

    実際の例
    1. 新しいデータベースを作成する
    2. 次のコードを新しい標準モジュールに追加します。
    Public Function Startup()
        
        If Trim(VBA.Command) = "Nightly" Then
            Shell "winver", vbNormalFocus
            Application.Quit
        End If
        MsgBox "Start up"
       
    End Function
    
    1. 新しいマクロを作成する
    2. RunCode」を選択します 「[新しいアクションの追加]ドロップダウンから
    3. 「関数名」をStartup()に設定します
    4. マクロを閉じて「AutoExec」として保存します "
    通常のユーザーとして実行

    通常のユーザーとしてアプリケーションをテストするには、データベースを圧縮して修復するだけです。

    「起動します」というメッセージボックスが表示されます。

    スケジュールされたタスクとして実行

    スケジュールされたタスクとしての実行を模倣するには、データベースを閉じて、次のコマンドで起動します。

    "C:\Path\To\msaccess.exe" "C:\Path\To\MyDb.accdb" /cmd Nightly

    Accessが画面上で短時間点滅し、[About Windows]ダイアログボックスが表示され、Accessが自動的に閉じます。

    いくつかのメモ
    • AutoExec 起動時に自動的に実行される特別なマクロです
    • Startup()であっても ルーチンは値を返さないので、Functionとして宣言します Subを直接呼び出すことはできないためです Accessのマクロから
    • 通常の使用では、cmdウィンドウコードはスキップされます
    • Application.Quitを明示的に呼び出します ユーザーの操作を必要とするコード(私の例のMsgBoxコードなど)でAccessがハングするのを防ぐために、「Nightly」ブロック内
    • 私は常にTrim()を呼び出します VBA.Command周辺 コマンドラインの先頭または末尾の空白によって発生するバグを回避する機能
    • /cmdの代わりに 、/xを使用することもできます カスタムマクロの名前を切り替えて渡します(私は千の白い暑い太陽の情熱を持ってマクロを嫌うので、そうしません。私が今まで使用したマクロはAutoexecの2つだけです。 およびAutokeys 特別な機能を提供するため
    タスクスケジューラと他のOfficeアプリケーションの自動化に関する最後の注意事項

    夜間に実行するように設定したときにタスクが機能していないように見える場合は、スケジュールされたタスクオプションを[ユーザーがログオンしているときにのみ実行する]に切り替えてみてください。

    Officeアプリケーションは、Windowsが「非対話型」モードと呼ぶもので実行することを目的としていません。スケジュールされたタスクを「ユーザーがログオンしているかどうかに関係なく実行する」に設定すると、そのタスクは非対話型モードで実行されます。これは、特に定期的なプロセスの一部としてExcelを自動化する場合に、さまざまな問題を引き起こす可能性があります。

    最も簡単な解決策は、ログオフする代わりにワークステーションをロックし、オプションを「ユーザーがログオンしているときにのみ実行する」に設定したままにすることです。

    それはあなたの状況では実用的ではないかもしれませんが、知っておくべき重要な考慮事項です。警告されていると考えてください:

    Microsoftは現在、無人の非対話型クライアントアプリケーションまたはコンポーネントからのMicrosoftOfficeアプリケーションの自動化を推奨していません。


    1. AlteryxでのJavaデータの操作

    2. 集計関数またはGROUPBY句のいずれにも含まれていないため、選択リストの列が無効です

    3. SQLServerでログインとしてActiveDirectoryユーザーグループを追加する方法

    4. OracleDatabaseでサポートされている言語のリスト