スプレッドシートまたはアクセス データベースに記述した VBA マクロを 1 日 1 回自動的に実行するようにコンピュータをセットアップしたいと考えています。
では、バッチ ファイルなどから VBA マクロを呼び出す方法はありますか?
もちろん。コマンド ライン スイッチを使用します。提供されるリンクは、コマンド ライン スイッチに関するページです。Accessの場合、Excelの場合
msaccess ファイルをロードし、保存されたマクロを実行する .bat ファイルの例を次に示します。
start msaccess "%localFolder%%localFileName%" /x %macroName%
この状況%localFolder%%localFileName%
では、含まれている mdb/accdb ファイルのフル パスに加算され%macroName%
、マクロの名前になります。
Excel の場合は、実行したいものをWorkbook.Open
イベントに配置するだけです。次に、次のようなコマンドを使用してロードします。
start excel %workbookPath%
これにより、Excel の新しいインスタンスが作成され、ブックが開かれ、Workbook.Open
イベントがトリガーされます。ワークブックを開いている可能性があると思われる場合は、読み取り専用パラメーターを渡して、/r
ユーザー入力なしでブックを再度開くこともできます。
.bat ファイルをセットアップしたら、Windows スケジューラでそれらをスケジュールするだけです。
個人的には、スクリプトが Access または Excel 固有のものでない限り、.VBS でスクリプトを書き直して、Excel または Access のオーバーヘッドなしで実行できるようにし、それをスケジュールすることをお勧めします。:)
スプレッドシートまたは Access データベースのデータを変更する場合は、VBS と DAO オブジェクトを使用できます。
Set Dbe = CreateObject("DAO.DBEngine.36")
データの更新に DAO を使用する利点は、Excel や Access アプリケーションよりもはるかに小さく、高速で軽量なオブジェクトであることです。より堅牢に、より安定に。クラッシュ時にメッセージ ボックスを表示しません: GUI ログイン ユーザーは必要ありません。
DAO (または ADO) だけを使用することの欠点は、オブジェクトがはるかに小さく、高速で、軽量であることです。印刷や VBA のようなことはできません (ただし、セルを読み取り、VBS 計算を実行してから挿入することはできます)。データ)。
特に、DAO/ADO オブジェクトは、Excel にセル値を再計算させることはできません。そのためにはエクセルが必要です。また、Access では UDF を使用できません。そのためにはアクセスが必要です。
(VBS を使用して Access/Excel を自動化できますが、それは Access/Excel の上に別のレイヤーを追加するだけなので、多くの場合、お勧めできません。)