【VBA】ExcelからパスワードのかかっているAccessに接続する
ExcelからパスワードのかかっているAccessにVBAで接続してみます。
ExcelからAccessにVBAで接続するときにADOではADODB.ConnectionのConnectionStringに
接続文字列を代入します。
1Dim adoCON As New ADODB.Connection
2adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" & _
3"Data Source=" & dbPath & ";"</pre>
しかし、パスワードがかかっているAccessファイルに接続するとエラーが発生します。

Accessファイルの暗号化方法を変更
ExcelからAccessに接続する前に、Accessの暗号化方法を事前に変更しておきます。
既にAccessにパスワードがかかっている場合はAccessのパスワードを解除してから次の手順に進んでください。
Accessにパスワードがかかっている状態で、手順を進めるとExcelからAccessの接続でエラーが発生します
Accessファイルを開き、オプションのクライアントの設定から
暗号化方法を「以前の暗号化方法を使用する」を選択してOKを押します。

Accessファイルにtestというパスワードをかけます。
今回はテストのためパスワードを簡単なものにしています。
実際にパスワードをかける場合は、もっと複雑なものを使用してください
パスワードを忘れるとAccessを開けなくなるので、注意してください。
ExcelからパスワードのかかっているAccessに接続するコード
ExcelからパスワードのかかっているAccessに接続しデータをコピーしてExcelに貼り付けるコードです。
パスワードのかかっているAccessにはADODB.connectionのConnectionStringの接続文字列に
パスワードを含むことによって接続できます。
AccessファイルはMenuData.accdbというファイル名でC:\excel-access-password\に置いてあると想定します。
1Option Explicit
2
3Sub readAccessDataWithPass()
4
5 Dim dbPath As String
6 dbPath = "C:\excel-access-password\MenuData.accdb" 'accdbファイルパス
7
8 Dim password As String
9 password = InputBox("パスワードを入力してください")
10 If password = "" Then Exit Sub
11
12 Dim adoCON As New ADODB.Connection
13 adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" & _
14 "Data Source=" & dbPath & ";" & _
15 "Jet OLEDB:Database Password=" & password & ";"
16 adoCON.Open
17
18 Dim strSQL As String
19 strSQL = "SELECT * FROM T_メニュー"
20
21 Dim adoRS As New ADODB.Recordset
22 adoRS.Open strSQL, adoCON, adOpenKeyset, adLockReadOnly
23
24 Dim writeSht As Worksheet
25 Set writeSht = ThisWorkbook.Worksheets("Sheet1")
26 writeSht.UsedRange.Clear
27
28 'フィールド名の書き出し
29 Dim i As Long
30 For i = 0 To adoRS.Fields.Count - 1
31 writeSht.Cells(1, i + 1).Value = adoRS.Fields(i).Name
32 Next i
33
34 'CopyFromRecordsetメソッドで基準セルを指定してデータの書き出し
35 writeSht.Range("A2").CopyFromRecordset adoRS
36
37 adoRS.Close
38 adoCON.Close
39
40 Set writeSht = Nothing
41 Set adoRS = Nothing
42 Set adoCON = Nothing
43
44End Sub
接続文字列にpasswordを含んでいます。
1adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" & _
2 "Data Source=" & dbPath & ";" & _
3 "Jet OLEDB:Database Password=" & password & ";"
コードを実行するとインプットボックスが表示されますのでAccessのパスワードを入力して、OKを押します。

シートにAccessのデータが表示されました。
パスワードのかかっているAccessからデータを取り出すことができました。
