commandline
最適化
access
Compact

Access 2010 later コマンドラインから最適化する - Access2016は要注意

今回のテーマ

最適化/修復だけ行うショートカットの作り方
"c:\Program Files\Microsoft Office\Office10\MSACCESS.EXE" "c:\db1.mdb" /compact

デスクトップにこういうショートカットを作って最適化とありますが、MDB形式です。
Accdbはどうなるのか。またせっかくですから別名で最適化しましょう。

Access 2013 32 bit

"C:\Program Files (x86)\Microsoft Office\Office15\MSACCESS.EXE" "C:\hoge\Distination.accdb" "C:\hoge\Source.accdb" /compact
'環境変数を使用
"%ProgramFiles(x86)%\Microsoft Office\Office15\MSACCESS.EXE" "C:\hoge\Distination.accdb" "C:\hoge\Source.accdb" /compact

気が付いたこと

1.MSAccess.exeをフルパスでダブルクオーテーションで囲む そのあと半角スペース
2./compact オプションはexe" の次ではなく、最後にもってくる
3. ファイルのパスにスペースが含まれていない場合は引用符は必要ない。が一応つけるのがお約束。
4. 圧縮先 圧縮元の順 の順に各々ダブルクォーテーションで囲む。各ファイル名の間はスペース。コンマは不要。
5. パスワードつきは未確認
6. msaccess.exe /ro "c:\My Folder\My Database.accdb"
"c:\My Folder\My Database.accdb" /ro
Office Access 2007 では、"msaccess.exe" を省略し、ファイルの完全なパスからコマンドを始めることができます。たとえば、上のコマンドは次のように入力できるが、他に実行していたら失敗する。

Access 2016 64 bit

"C:\Program Files\Microsoft Office\root\Office16\MSACCESS.EXE" /compact "C:\hoge\Distination.accdb" "C:\hoge\Source.accdb" 
"C:\Program Files\Microsoft Office\root\Office16\MSACCESS.EXE" /compact "C:\hoge\Source.accdb" 

1.64Bitだと実行ファイルのフォルダ名にRootになる
2.コマンドラインスイッチの位置が違う。最後に置くとエラーになる。2007 - 2013 までと異なるようだ。
3.別名に最適化することはたまにエラーになる。ファイル名、コマンドラインスィッチを全角スペースで区切るとエラーになるようだがよくわからなかった。

Access 2016 32bit

How to launch Access 2016 from command line with access.exe?
MicrosoftのQAサイトでは

"C:\Program Files (x86)\Microsoft Office\Office16\MSACCESS.EXE"

になるようだ

参考

Access のコマンド ライン スイッチ - Access 2007
Access 2013 コマンドライン スイッチを使って帳票を自動印刷する方法~起動後のマクロ実行
マクロを自動起動する例がある。しかしAccess2016はオプションスィッチの位置が異なる可能性がある。

Access 2010 のコマンド ラインスイッチに関するマイクロソフトの公式情報が知りたい

公式な情報という事でしたら、弊社のサポート窓口へお問い合わせいただいた方がよいかもしれません。
 カスタマー インフォメーション センター
よろしくご検討くださいませ。


結論として現時点で公式な情報はどこにも無いそうです。
製品として販売しているものの情報が
バージョンが変わったとたんに開示されない事に疑問は残りますが
無いものを回答しろといってもしょうがありませんので
この質問はしめさせていただきます。
検索等でこのページを見られた方へ
 技術サポートは受けられるとの事なので
 「このコマンドラインで起動するとおかしんだけど」や、
 「こんなテストを行いたいんだけど」 のような問い合わせは、
 電話すれば回答して頂けるとの事でした。

その他の2016で確認したコマンドラインスィッチ

読み取り専用

"C:\Program Files\Microsoft Office\root\Office16\MSACCESS.EXE" "C:\hoge\DATABASE.accdb"

"F:\DATABASE9.accdb" /ro
CMD.Exeからは動かない
ファイル名を指定して実行にすると開くが、読み取り専用にはならない
msaccess.exe "F:\DATABASE9.accdb" /ro
CMD.Exeからは動かない
ファイル名を指定して実行にすると開くが、読み取り専用にはならない

msaccess.exe /ro "F:\DATABASE9.accdb"

CMD.Exeからは動かない
ファイル名を指定して実行からは成功する。

/ro "F:\DATABASE9.accdb"
CMD.exe,ファイル名を指定して実行もエラー

Repair

"C:\Program Files\Microsoft Office\root\Office16\MSACCESS.EXE" /repair "C:\hoge\Source.accdb"

成功する

X

/x <マクロ>
/x スイッチの前に指定されている Access データベースを開いた後、指定したマクロを実行します。データベースを開いたときにマクロを実行する別の方法として、AutoExec という名前のマクロを作成することもできます。
マクロにはウイルスが含まれている可能性があるため、実行する場合には注意してください。感染への予防策として、最新のウイルス対策ソフトウェアをコンピュータで動作させ、セキュリティ センターを使用してデジタル署名のないマクロをすべて無効にし、信頼できるマクロの作成元の一覧を管理してください。
- ここで言っているマクロは独立マクロのこと。VBAではない。
まずモジュールに次のようにVBAを入れる
```vbnet
Option Compare Database
Option Explicit

Function Macro_test()
Call test
End Function
Sub test()
MsgBox "hello, world!"
End Sub
```
次にマクロを作成しプロシージャの実行でプロシージャ名 Macro_test() とし、このマクロをtestMとして保存する
"C:\Program Files\Microsoft Office\root\Office16\MSACCESS.EXE" /x "testM" "C:\hoge\Source.accdb"

CMD

Command 関数
適用対象: Access 2016 Access 2013 Access 2010 Access 2007 Access 2010 Developer Access 2007 Developer Access 2013 Developeraccdb

Function Macro_CheckCommandLine()
'Macro button "testM1"
Call CheckCommandLine
End Function
Public Sub CheckCommandLine()
    ' Check the value returned by Command function and display
    ' the appropriate form.
    If Command = "Orders" Then
        MsgBox "Orders"
    ElseIf Command = "Employees" Then
        MsgBox "Employees"
    Else
        Exit Sub
    End If
End Sub

"C:\Program Files\Microsoft Office\Office11\Msaccess.exe" "C:\Program Files\Microsoft Office\Office11\Samples\Northwind.mdb" /cmd "Orders"
"C:\Program Files\Microsoft Office\root\Office16\MSACCESS.EXE" "C:\hoge\Source.accdb" /cmd "Orders"
Access 2016は クライアントの設定にコマンドライン引数がある。
上記を実行すると Odersが入る。

複合技

VBAのプロシージャは登録しておくと、以下のようにすると引数を指定してマクロを実行できる。
"C:\Program Files\Microsoft Office\root\Office16\MSACCESS.EXE" /x "testM1" "C:\hoge\Source.accdb" /cmd "Orders"

Convert

mdb Access2000以降のMDB→Accdbのみ可能
/convert <対象データベース>

以前のバージョンの Access データベースまたは Access プロジェクトを Access 2007 のファイル形式に変換し、そのファイルに新しいファイル名を付けて、Access を終了します。/convert スイッチの前に、変換元データベースを指定する必要があります。

"C:\Program Files\Microsoft Office\root\Office16\MSACCESS.EXE" /convert  "C:\hoge\convert.accdb" "c:\hoge\2003.mdb"

/convert 変換先.accdb 変換元.mdb