【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の暗号化方法を事前に変更しておきます。

Warning

既にAccessにパスワードがかかっている場合はAccessのパスワードを解除してから次の手順に進んでください。
Accessにパスワードがかかっている状態で、手順を進めるとExcelからAccessの接続でエラーが発生します

Accessファイルを開き、オプションのクライアントの設定から
暗号化方法を「以前の暗号化方法を使用する」を選択してOKを押します。

Accessファイルにtestというパスワードをかけます。

Warning

今回はテストのためパスワードを簡単なものにしています。
実際にパスワードをかける場合は、もっと複雑なものを使用してください

Warning

パスワードを忘れると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からデータを取り出すことができました。

関連ページ