投稿日時:

AccessとVBAに関し「クエリをExcelにエクスポートする際に、そのExcelファイルにパスワードは設定可能ですか?」という質問がありました。

クエリをExcelにエクスポートするだけなら、DoCmdのOutputToメソッドで簡単に可能です。
しかし、このメソッドにはパスワードを設定する機能はありません。

従って、WorkbookクラスのSaveAsメソッドでパスワードかけて保存し直すのがよいと思います。

なお、Access内のVBAとExcel内のVBAでは生成済みオブジェクトが異なります。
Access内でExcel関連のクラスを使用したい場合は、参照設定「Microsoft Excel XX.0 Object Library」が必要です。
XXにはバージョンが入ります。2003=11.0、2007=12.0、2010=14.0です。(13.0はMac版)

サンプルソースコードは以下の通りです。

‘ファイルのパス
Dim filePath As String
filePath = CurrentProject.Path & “¥export.xls”

‘Query01をExcelファイルにエクスポート
DoCmd.OutputTo acOutputQuery, “Query01″, acFormatXLS, filePath

‘ExcelのApplicationクラス
Dim excelApplication As Excel.Application
Set excelApplication = New Excel.Application

‘エクスポートしたファイルを開く
Dim book As Workbook
Set book = excelApplication.Workbooks.Open(FileName:=filePath)

‘確認メッセージを非表示にする
excelApplication.DisplayAlerts = False

‘パスワードを付けて保存し直す
Dim password As String
password = “pass”
book.SaveAs FileName:=filePath, FileFormat:=xlWorkbookNormal, Password:=password
book.Close

注意すべきところは「上書きしますか?」等の確認メッセージの非表示設定です。

Excel内のVBAでは

Application.DisplayAlerts = False

上記のような記述で設定できますが、この「Application」はExcel.Applicationクラスの生成済みオブジェクトです。
Access内のVBAでは「Application」はAccess.Applicationクラスの生成済みオブジェクトなので、型が異なります。
よって生成オブジェクトではなく、自分でインスタンスを生成しています。

(担当:奥田 英太郎