メインコンテンツへスキップ
【VBA】ExcelからパスワードのかかっているAccessに接続する

【VBA】ExcelからパスワードのかかっているAccessに接続する

·3 分
Programming VBA
かずさプログラマー
著者
かずさプログラマー
業務の作業自動化を行っています。Go、VBA、Pythonを主に使用しています。過去にはC#、VB.Net、JavaScriptも使用していました。
目次

ExcelからパスワードのかかっているAccessにVBAで接続してみます。

ExcelからAccessにVBAで接続するときにADOではADODB.ConnectionConnectionStringに 接続文字列を代入します。

Dim adoCON As New ADODB.Connection
adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" & _
"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.connectionConnectionStringの接続文字列に パスワードを含むことによって接続できます。

AccessファイルはMenuData.accdbというファイル名でC:\excel-access-password\に置いてあると想定します。

Option Explicit

Sub readAccessDataWithPass()
     
  Dim dbPath As String
  dbPath = "C:\excel-access-password\MenuData.accdb"  'accdbファイルパス
  
  Dim password As String
  password = InputBox("パスワードを入力してください")
  If password = "" Then Exit Sub
  
  Dim adoCON As New ADODB.Connection
  adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" & _
                            "Data Source=" & dbPath & ";" & _
                            "Jet OLEDB:Database Password=" & password & ";"
  adoCON.Open
  
  Dim strSQL As String
  strSQL = "SELECT * FROM T_メニュー"
   
  Dim adoRS  As New ADODB.Recordset
  adoRS.Open strSQL, adoCON, adOpenKeyset, adLockReadOnly
   
  Dim writeSht As Worksheet
  Set writeSht = ThisWorkbook.Worksheets("Sheet1")
  writeSht.UsedRange.Clear
  
  'フィールド名の書き出し
  Dim i As Long
  For i = 0 To adoRS.Fields.Count - 1
      writeSht.Cells(1, i + 1).Value = adoRS.Fields(i).Name
  Next i
  
  'CopyFromRecordsetメソッドで基準セルを指定してデータの書き出し
  writeSht.Range("A2").CopyFromRecordset adoRS
    
  adoRS.Close
  adoCON.Close
  
  Set writeSht = Nothing
  Set adoRS = Nothing
  Set adoCON = Nothing

End Sub

接続文字列にpasswordを含んでいます。

adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" & _
                            "Data Source=" & dbPath & ";" & _
                            "Jet OLEDB:Database Password=" & password & ";"

コードを実行するとインプットボックスが表示されますのでAccessのパスワードを入力して、OKを押します。

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

関連記事

【VBA】Excelファイルを開いた時にVBAを実行する
·2 分
Programming VBA
ExcelVBAのオススメな点
·3 分
Programming VBA
【VBA】ExcelVBAのモジュールにパスワードをかける
·2 分
Programming VBA