この記事では、Microsoft Accessの起動スイッチの秘密に
- 起動スイッチとは何か
- 起動スイッチに関する関連情報
- 起動スイッチの詳細
という観点で迫ります
共有データベースの壁を打ち破り、データベースの修復や最適化の必要性を理解し、フォームやレポートを瞬時に起動可能なテクニックをご紹介します。
これらのテクニックを習得することで、あなたの思い通りにAccessを制御し、データベースを自在に操る方法を学びましょう。
目次
Microsoft Access起動スイッチとは
Microsoft Accessはバッチファイルやコマンドラインからの起動時に以下の様にスイッチやそのパラメータを指定することが出来ます。
"C:\Program Files\Microsoft Office\Office16\msaccess.exe" /x MacroName "C:\Path\to\YourDatabase.accdb"
例えばこのケースでは /x がスイッチ、そして MacroName がそのパラメータです。
以下に Office 365 版 Access でよく利用するスイッチ、パラメータの一覧を紹介します。
項番 | スイッチ | パラメータ | 説明 | 利用シーン |
---|---|---|---|---|
1 | なし | データベース |
指定したAccessデータベース、またはプロジェクトを開きます。 このデータベースは必要に応じパスを含めることが可能で、パスにスペースが含まれる場合は、引用符””で囲みます。 |
Access を個人で使用している場合に使用します。 |
2 |
/excl |
なし |
指定したAccessデータベースを排他モードで開きます。 マルチユーザー環境ではこのスイッチは省略します。 またAccessプロジェクトを除くデータベースのみに適用してください。 |
データベースの整合性を保つ必要がある場合や、データの競合を回避したい場合に使用します。 |
3 | /ro | なし | 指定したAccessデータベース、またはプロジェクトを読み取り専用で開きます。 | |
4 |
/runtime |
なし |
Access をランタイムモードで 起動します。 つまりテーブル・クエリ・フォーム・レポート・マクロ・VBAの新規作成・修正という、データベース開発は行わず、作成されたデータベースをユーザーとしてのみ利用ます。 |
特定の機能や設定を変更できないようにする必要がある場合に使用します。 |
5 |
/x |
マクロ |
/x スイッチの前に指定した Access データベースを開いて、指定したマクロを実行します。 |
データベースを開いたときにautoexec では無く /x のつぎに指定された特定のマクロを実行したいときに使用します。 |
6 | /cmd | パラメータ |
パラメータをAccessの VBA コードにコマンド ライン引数を渡すときに使用します。 このオプションは、コマンド ラインの最後のスイッチにする必要がありますす。 /cmd の代わりにセミコロン (;) を使用することもできます。 |
VBAコード中では渡されたコマンド ライン引数を Command() 関数で参照します。 |
7 | /compact | ターゲット データベースまたは Access プロジェクト |
/compact スイッチの前に指定された Access データベースまたは Access プロジェクトを圧縮して修復し Access を閉じます。 /compact スイッチの後のターゲット ファイル名を省略すると、ファイルは元の名前とフォルダーに圧縮されます。 別の名前に圧縮するには、ターゲット ファイルを指定します。 スペースを含むパスを含める場合は、パスを引用符で囲みます。 |
データベースが壊れている可能性がある場合や、データベースファイルのサイズを削減したい場合に使用します。 |
8 | /decompile |
データベースのVBAコンパイル済みコードを非コンパイル状態にリセットします。 |
VBAコードが正しく動作しない場合や、パフォーマンスを向上させたい場合に使用します。 |
ここに記載された起動スイッチの公式情報は下記を参照下さい。
起動スイッチに関する関連情報
アプリケーション名は省略可能
Windows 10 ではファイルの拡張子(例えば .accdb)に関連づけられて起動されるアプリケーションはレジストリ登録されているので、先ほどご紹介したバッチファイルは Access の実行パス
“C:\Program Files\Microsoft Office\Office16\msaccess.exe”
の記述を省略して、以下のように記述することも可能です。
"C:\Path\to\YourDatabase.accdb" /x MacroName
このファイル拡張子と起動アプリケーションの対応関係は
Windows > 設定 > 既定のアプリ > ファイルの種類ごとに既定のアプリを選ぶ
で確認できるので、必要に応じて確認しましょう。
ネットワーク上でデータベースを共有するには
ネットワーク上でデータベースを共有するには、.laccdb 等のロックファイルを作成し、データベース自身に更新をかけるため以下の2つの条件を満たす必要があります。
- データーベースを格納するフォルダが共有設定され、書き込み可能となっていること
- さらにその対象フォルダにアクセスを許可するユーザに対し以下のようにWrite権限が正しく設定されていること
こうしたデータベースを含むフォルダ、ファイルのネットワーク共有のやり方については、必要に応じて以下の公式資料で確認しましょう。
Runtime 版 Access を入手するには
Microsoft 365 Access Runtime は必要に応じて下記公式ページからダウンロードすることができます。
Runtime版Access起動後の画面表示は製品版Accessを /runtime スイッチ付で起動した画面と同じです。
データベースの修復や最適化が必要になるケースとは
Accessのデータベース修復や最適化が必要になるケースは以下のようにいくつかあります。
項番 | 発生原因 | 説明 |
---|---|---|
1 | データベースの損傷 |
Accessデータベースは、ネットワークの問題、電源の問題、データベースの異常な終了などの要因により損傷する場合があります。 このデータベースが損傷していると、エラーが発生し、データの一貫性が失われる可能性があるため、このデータベースの修復が必要になります。 |
2 | パフォーマンスの低下 |
Accessデータベースが成長するにつれ、テーブルやクエリ、フォーム、レポートなどのオブジェクトが増えていきます。 このような大量のオブジェクトや複雑な関係が存在すると、データベースのパフォーマンスが低下してしまうことがあるためデータベースの最適化が必要になります。 |
3 | インデックスの問題 |
Accessデータベースでは、インデックスを使用することでデータの検索や並べ替えの効率を向上させています。 しかしAccessデータベースが成長するにつれ、インデックスが大きくなりすぎパフォーマンスに悪影響を与える場合があるため、インデックスの再作成や最適化が必要になることがあります。 |
4 | メンテナンスの欠如 |
データベースの定期的なメンテナンスが行われていないと、不要なオブジェクトやリンク切れのテーブル、非効率化なクエリの蓄積されるリスクが増大します。 これらは総じてデータベースのパフォーマンスや安定性に悪影響を与えるため、メンテナンス作業が必要になります。 |
データベースの修復や最適化は、データの一貫性の確保やパフォーマンスの向上、データベースの安定性を確保するためにとても重要です。
従って定期的にメンテナンスを行い、必要に応じて修復・最適化作業を行い、データベースの品質と効率を維持するように心がけましょう。
起動時にスタートアップオブジェクトとしてフォームを起動するには
データベース起動時に特定フォームを起動する方法として、以下の手順でスタートアップオブジェクトとしてフォームを指定することができます。
ファイル > オプション > 現在のデータベース
を選択し
- アプリケーションタイトル(T):にアプリケーションのタイトルを記入します。するとタイトル部に絶対パス名が現れる等のセキュリティリスクを回避することができます。
- フォームの表示(D): リストから、初期表示したいフォーム名を選択します。
これにより、Accessデータベースが起動されたときに指定したフォームやレポートが自動的に表示または実行されるようになります。
起動スイッチの詳細
/excl スイッチ
Accessの起動スイッチ /excl
は、排他的なアクセスモードでデータベースを開くために使用します。
このスイッチを使用すると、同時に他のユーザーがデータベースにアクセスできなくなります。
具体的な使用例
以下にいくつかの /excl
の使用例を示します。
項番 | 使用目的 | 使用例の説明 |
---|---|---|
1 | データの整合性の確保 |
例えば、重要なデータの入力や更新を行ないたいとき、他のユーザーによる同時の変更や競合を防ぐために使用します。 |
2 | データベースのメンテナンスやバックアップ |
例えば、データベースの構造変更やインデックスの再構築、バックアップの作成などを行う際に使用します。 |
3 | データベースのリセットや修復 |
例えば、データベースが破損した場合やエラーが発生した場合に、他のユーザーからのアクセスをブロックしつつ、データベースを安全に修復することができます。 |
これらのケースでは、 /excl
スイッチを使用することでデータベースを排他的なモードで開き、同時アクセスを制限します。
ただし、この /excl スイッチの利用後、必要な作業が完了したら他のユーザーが再びアクセスできるようにすることを覚えておきましょう。
使い方
コマンドプロンプト、あるいはバッチファイルの中で /excl
オプションをつけてコマンドを実行します。
"C:\Path\to\MyDatabase.accdb" /excl
既にあるユーザーがこの /excl オプションを使ってオープン中のデータベースファイルを、同時間に他のユーザーがオープンしようとすると、以下のような警告ダイアログが現れこのデータベースファイルをオープンできません。
この仕組みによりこのデータベースファイルに対するアクセス権の衝突やデータの競合を回避することができるようになっています。
逆にこの /excl スイッチを使用せず、ネットワーク共有されたAccessのデータベースを開くと、別のユーザーが同時にこのデータベースにアクセス可能なので、便利な反面よくあるデータベースの破壊が起きやすい状態になります。
従ってこういった利用をあれる場合、利用時間帯を分ける、以下に紹介する/ro スイッチを使って更新権限を制限する等の運用上のルールを前もって適切に決めておくことが非常に重要です。
/ro スイッチ
ネットワーク共有されたPC上に配置されたAccessデータベースを複数ユーザーで使用するようなケースで /ro スイッチを使用すると、Accessはデータベースを読み取り専用で開くので、他のユーザーの更新作業に影響を与えません。
Accessの起動スイッチ /ro
は、読み取り専用モードでデータベースを開くために使用します。このスイッチを使用すると、データベースを更新するリスクを排除して情報を表示することができます。
具体的な使用例
以下にいくつかの /ro
の使用例を示します。
項番 | 使用目的 | 使用例の説明 |
---|---|---|
1 | データの参照や確認 |
例えば、データベースのセキュリティ上の理由から、特定のユーザーには読み取り専用のアクセス権しか与えたくないようなケースで使用します。 |
2 | データベースの共有環境 |
複数のユーザーが同じデータベースにアクセスする環境では、 これにより、複数のユーザーが同時にデータベースを閲覧できますが、データの競合や衝突を防ぐために変更や書き込みを制限します。 |
使い方
コマンドプロンプト、あるいはバッチファイルの中で /ro
オプションをつけてコマンドを実行します。
"C:\Path\to\MyDatabase.accdb" /ro
この /ro オプションを付けてデータベースファイルをオープンすると、リボンメニューの下に以下のような警告メッセージが現れるので、このデータベースが読み取り専用でオープンされたことが確認できます。
/runtime スイッチ
Accessの起動スイッチ /runtime
は、アプリケーションをランタイムモードで起動したいときに使用します。
このランタイムモードは、データベースの開発環境が制限され、ユーザーに対してデータベースの閲覧や操作のみを提供します。
具体的な事例
以下に、/runtime
スイッチの使用例をいくつか紹介します。
これらのケースでは、/runtime
スイッチを使用して、アプリケーションの配布、カスタムメニューやナビゲーションの提供、テストやデバッグの目的を達成しています。
項番 | 使用目的 | 使用例の説明 |
---|---|---|
1 | 配布用アプリケーション |
アプリケーションをランタイムモードで起動すると、ユーザーはデータベースの利用はできますが、データベースの設計やオブジェクトの変更はできません。 このように、開発者がユーザーに対するアクセス権を制御することで、アプリケーションのセキュリティと安定性を確保することができます。 |
2 | カスタマイズされた メニュー/ナビゲーション |
つまりアプリケーションの特定のユースケースや業務フローに合わせて、ユーザーに必要な機能だけを提供することができます。 |
3 | テスト/デバッグ用途 |
デバッグ時に開発者モードではなくランタイムモードでデータベースを実行することで、アプリケーションのユーザー体験をシミュレートし、問題や改善点を特定することができます。 |
また具体的な要件や目的に基づいて、/runtime
スイッチを活用してAccessアプリケーションの制御やセキュリティを強化するために、/runtime
スイッチを使用することもできます。
以下にこのような使用例をいくつか紹介します。
項番 | 使用目的 | 使用例の説明 |
---|---|---|
4 | クライアント/サーバー環境 |
このときクライアント側のマシンではランタイムモードでデータベースを開き、サーバー上のデータにアクセスします。 このようにすると、セキュリティやパフォーマンスの観点からクライアントに完全なアクセス権限を与えずに、データへの安全なアクセス制御を保証することができます。 |
5 | バージョンの互換性 |
開発者が特定のバージョンで作成したアプリケーションを、異なるバージョンのAccessで実行する場合に有用です。ランタイムモードを使用することで、バージョンによる互換性の問題を最小限に抑えることができます。 |
使い方
"C:\Path\to\MyDatabase.accdb" /runtime
このように /runtimeオプションを使用すると、ユーザーに図のようなカスタマイズされたメニューやナビゲーションパネルのみを提供することが可能です。
/x スイッチ
Accessの起動スイッチ /x
は、指定したマクロを実行するために使用します。
このスイッチを使用することで、起動時に特定の操作や処理を選択して自動的実行することができます。
具体的な事例
以下にいくつかの /x
の使用例を示します。
項番 | 使用目的 | 使用例の説明 |
---|---|---|
1 | 自動処理やバッチ処理 |
例えば、データベースの自動バックアップ、データのエクスポートやインポート、定期的なデータ処理など、自動化が必要な処理に対して個々に意味付けされたマクロ名を定義し、/x スイッチでそのマクロ名を指定することで処理を選択実行します。 |
2 | カスタムメニューの作成 |
例えば、ユーザーがデータベースを起動すると、指定したマクロが自動的に実行され、特定の操作や機能のみを利用可能にするといったことが可能になります。 |
3 | 特定のユーザープロファイルの設定 |
例えば、特定のユーザーグループに対して異なるメニューや機能を提供するために、それらをあらかじめ分離したマクロで定義し、実行時に /x スイッチでそのマクロを選択実行することができます。 |
使い方
"C:\Path\to\MyDatabase.accdb" /x MacroName
このように、/xオプションを使用すると、指定したマクロを選択実行できます。
これにより自動処理やバッチ処理の自動化、カスタムメニューの作成、特定のユーザープロファイルの設定など、様々なシナリオを実装することができます。
例えば、この記事中でサンプルとしているMyDatabaseの標準モジュールに以下のような
- PopUpA
- PopUpB
- PopUpC
という3つの関数を定義するケースでその使い方を確認してみましょう。
Function PopUpA()
MsgBox "PopUpA が呼び出されました"
End Function
Function PopUpB()
MsgBox "PopUpB が呼び出されました"
End Function
Function PopUpC()
MsgBox "PopUpC が呼び出されました"
End Function
そしてこれらの関数を呼び出すマクロとして
- PopUpA を呼びだすM0010_Call_PopUpAマクロ
- PopUpB を呼びだすM0020_Call_PopUpBマクロ
- PopUpC を呼びだすautoexecマクロ
を次のように定義し
ここでバッチファイルとして
"C:\Path\to\MyDatabase.accdb" /x M0010_Call_PopUpA
を実行すると
をが表示され、続いて
をが表示されます。
そしてバッチファイルとして
"C:\Path\to\MyDatabase.accdb" /x M0020_Call_PopUpB
を実行すると
が表示された後に続いて
が表示されます。
Accessのスタートアップオブジェクト、autoexecマクロ、/x で指定されるマクロの関係
これらの動作確認結果を元に、ここでAccessのスタートアップオブジェクト、autoexecマクロ、 /x で指定されるマクロの関係をまとめると次のような実行順序になっています。
- スタートアップオブジェクトとしてフォーム指定されている場合そのフォームが表示される
- autoexec マクロが定義されていた場合 autoexecマクロが実行される
- 次に /x スイッチで指定されたマクロが実行される
しらかば堂の私見ですが
これらを踏まえたこれらを踏まえて利用シーンに応じたベストプラクティスは以下のようなものでしょうか。
項番 | 利用シーン | ベストプラクティス |
---|---|---|
1 | 起動時に単一のフォームのみを表示したいとき | スタートアップオブジェクトでフォームを指定する |
2 | 起動時に複数のフォームから、ユーザーの役割に応じたフォームを表示したいとき | ユーザーに配布するバッチファイルのなかで /x スイッチでマクロを指定し、そのマクロの中でフォームを指定する |
3 | データベースの自動バックアップ、データのエクスポートやインポート、定期的なデータ処理など、自動化が必要な処理を個別に定義したい | バッチファイルのなかで /x スイッチでマクロを指する |
/cmd スイッチ
Accessの起動スイッチ /cmd
は、コマンドライン引数をデータベースに渡したいときに使用します。
このスイッチを使用することで、起動時にデータベース内の特定の処理や動作を制御することができます。
具体的な事例
以下に、/cmd
スイッチの使用例をいくつか紹介します。
項番 | 使用目的 | 使用例の説明 |
---|---|---|
1 | フィルタリングや条件付け |
例えば、データベース内のフォームやレポートを開く際に、特定の条件に基づいてデータを絞り込んだり、特定のデータセットのみを表示するように設定します。 |
2 | ユーザーカスタマイズ |
例えば、起動時に特定のフォームを自動的に開いたり、特定のレポートを印刷したりするように設定します。 |
3 | 外部アプリケーションとの連携 |
例えば、外部アプリケーションからAccessデータベースを起動する際に、コマンドライン引数で必要なパラメータをデータベースに渡すことができるので、これにより外部アプリケーションとAccessデータベース間のデータの受け渡しや処理の制御が可能になります。 |
使い方
例えば
このように、/cmd スイッチを使用することで、指定したマクロを自動的に選択実行します。
例えば次のVBAコードを呼び出す
Function GetCommandLineArgs() As Integer
' 成功、失敗の定数の定義
Const C_SUCCESS As Integer = 0
Const C_FAILURE As Integer = 1
Dim cmdLine As String
Dim args() As String
' コマンドライン引数を取得
cmdLine = Command()
' スペースで引数を分割
args = Split(cmdLine, " ")
' 引数の値を表示
For Each arg In args
Debug.Print arg
Next arg
GetCommandLineArgs = C_SUCCESS
End Function
を呼び出す以下のマクロ
- M0030_Call_GetCommandLineArgs
を作成し
これのマクロを /x パラメータで指定して、以下のバッチファイルから起動すると
"C:\Path\to\MyDatabase.accdb" /x M0030_Call_GetCommandLineArgs /cmd "param1 param2 param3"
VBEのイミディエット画面に以下のような表示が現れるので、バッチファイルで指定したパラメータがVBA側で参照できることがわかります。
param1
param2
param3
/compact スイッチ
Accessの起動スイッチ /compact
は、データベースのコンパクション(圧縮)を実行するために使用します。
具体的な事例
以下に、/compact
スイッチの使用例をいくつか紹介します。
項番 | 使用目的 | 使用例の説明 |
---|---|---|
1 | データベースのサイズ削減 |
データベースが大きくなり、パフォーマンスやストレージ容量に影響を及ぼす場合に特に有用です。 このようにデータベースのサイズを最適化することで、アプリケーションのパフォーマンスを向上させることができます。 |
2 | データベースの修復 |
データベースが破損している可能性がある場合や、エラーが発生している場合に便利です。 データベースの修復により、損傷したデータや不正な構造を修復し、データベースの安定性を回復させることができます。 |
3 | 開発環境の最適化 |
開発中のデータベースが頻繁に変更され、オブジェクトの追加や削除が行われる場合に、データベースを定期的に圧縮することでパフォーマンスを改善することができます。 特に長期間開発が進んだデータベースや複数の開発者が作業を行う場合に有効です。 |
これらの事例では、/compact
スイッチを使用してデータベースのサイズ削減、データベースの修復、開発環境の最適化を行います。
データベースのパフォーマンスや安定性を向上させるために、定期的にコンパクションを実行することをおすすめします。
使い方
例えば以下の exit というマクロを作成し
この マクロを 以下のバッチファイルから起動すると
"C:\Path\to\MyDatabase.accdb" /x exit /compact
データベースが大きくなり、パフォーマンスやストレージ容量に影響がある場合にデータベースのサイズを最適化することができます。
/decompileスイッチ
Accessの起動スイッチ /decompile
は、VBAコンパイル済みのコードをデコンパイルして元のソースコードに戻すために使用します。
具体的な事例
以下に、/decompile
スイッチの使用例をいくつか紹介します。
項番 | 使用目的 | 使用例の説明 |
---|---|---|
1 | VBAコードの修復 |
特に、VBAコードが複雑で変更が多い場合や、エラーが発生している場合に便利です。デコンパイルにより、VBAプロジェクトの再構築や不具合の修正が可能になります。 |
2 | パフォーマンスの最適化 |
このデコンパイルによって、VBAコードの最適化やキャッシュのクリアが行われ、データベースの実行速度が向上するので、特に長期間使用されたデータベースや複雑なVBAプロジェクトの場合に有効です。 |
3 | 開発環境のメンテナンス |
このデコンパイルにより、VBAプロジェクトやコンパイル済みのフォーム、レポートなどのキャッシュがクリアされるので、開発者はデータベースのメンテナンスやパフォーマンスチューニングの一環として定期的にデコンパイルを実行することができます。 |
これらの事例では、/decompile
スイッチを使用してVBAコードの修復、パフォーマンスの最適化、開発環境のメンテナンスを行います。
デコンパイルによって、VBAプロジェクトの修正やパフォーマンス向上、開発環境の安定性を確保することができます。
ただし、デコンパイルによる副作用が発生する可能性もあるので、/decompile の実行前に subversion 等によるデータベースのバックアップを取ることを推奨します。
使い方
この マクロを 先ほどの /x exit と組み合わせて、以下のバッチファイルから起動すると
"C:\Path\to\MyDatabase.accdb" /x exit /decompile
不明なエラーや不正な動作が発生しているVBAプロジェクトを修復できます。
まとめ
この記事では、Microsoft Accessの起動スイッチの秘密に
- 起動スイッチとは何か
- 起動スイッチに関する関連情報
- 起動スイッチの詳細
という観点で迫りました。
共有データベースの壁を打ち破り、データベースの修復や最適化の必要性を理解し、フォームやレポートを瞬時に起動させるテクニックをご紹介しました。
これらのテクニックを習得することで、あなたの思い通りにAccessを制御し、データベースを自在に操る方法を学びましょう。
この記事がひと味違ったAccessプロフェッショナルとしての情報を読者に提供し、少しでもお役にたてれば幸いです。
こんにちは しらかば堂です。
この記事を読んでひと味違ったAccessプロフェッショナルになりませんか。