Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11 Home : Excel 2019)
パスワード付きAccessからのデータインポート
投稿日時: 25/04/18 10:39:55
投稿者: なつ

いつも参考にさせていただいております。
 
表題の件ですが、Accessのデータベースの内容をEXCELにインポートしようとすると
以下のメッセージが表示され、インポートできません。
 
【インポート時のエラーメッセージ】
 
 接続できません。
 接続しようとしている時にエラーが発生しました。
 詳細:"パスワードが正しくありません。"
 
●パスワードを入れるようなポップアップは出てきません。
 ⇒そのためパスワードは分かっていますが入れられません。
 
●今現在Accessを搭載しているPCがありません。
 
●EXCELは2019です。
 
 
【Accessの情報】
 
・製作者は不明
 
・おそらくAccess2000とAccess2010で作成されている
 (古いものはAccess2000で作成、どの年度から2010で作成されているかは不明)
 
 
エラーメッセージで検索してみましたが、解決方法が見つからず質問をさせて
いただきました。
 
よろしくお願いいたします。

回答
投稿日時: 25/04/18 19:22:44
投稿者: Suzu

今のEXCELでは、パスワード付を開くのはめんどくさかった記憶があります。
 
Power Query を使えば・・
 
小ネタ:パスワード付きのAccessに接続する|Power Query
https://qiita.com/tanuki_phoenix/items/ef5bf6865480db471528
 
少なくとも、標準機能から、パスワードを聞かれる様なダイアログが表示される事は無い様です。
 
 
2000 と 2010 との事ですが、それは拡張子は何ですか?
 
パスワードが既知であり、mdbなのであれば、
そのファイルをコピーし Excel の VBA から、DAO を使い、
NewPasswordメソッドで、パスワードを解除してしまえば良いと思います。
 

Sub mdbPasswordRelease()
  'Excel 32bit : 要参照設定 Microsoft DAO 3.6 Object Library
  'Excel 64bit : 要参照設定 Microsoft Office 16.0 Access database engine Object Library

  Dim DBEng As DAO.DBEngine
  Dim WS    As DAO.Workspace
  Dim DB    As DAO.Database
  Dim RS    As DAO.Recordset

  Set DBEng = CreateObject("DAO.DBEngine.36")
  Set WS = DBEng.CreateWorkSpace("tmp_WS", "Admin", "", 2)
  Set DB = WS.OpenDatabase("C:\DATA\DATA.mdb", True, False, "MS Access;PWD=oldpassword")
  DB.NewPassword "oldpassword", ""
  DB.Close
  Set DB = Nothing
End Sub

 
"C:\DATA\DATA.mdb" を mdbのファイルパスに変更
"oldpassword" を mdbファイルのパスワードに変えます。
 
初めから、DAOを使うなら そこからデータを抜き取る事も可能ですが、
テーブルが複数あったり、インポート時に選択する事が出来るので、
パスワード解除の方が初心者にはお手軽でしょう。

投稿日時: 25/04/18 22:28:01
投稿者: なつ

Suzuさん、ご回答ありがとうございます。
 
拡張子はmdbです。
職場のデータなので、月曜にトライしてみたいと思います。
 
ありがとうございました。

投稿日時: 25/04/21 10:15:15
投稿者: なつ

Suzuさん、おはようございます。
 
本日ご提示いただいた方法でAccessからのインポートにトライしてみました。
 
1. Power Query を使った方法
そもそもテーブル名等がわからないので、こちらは断念しました。
 
2. VBA を使った方法
 
VBAはほぼ使ったことがありませんので、検索しながら行ったので、もしかしたら
使い方が間違っているかもしれませんが、でご提示いただいたコードにmdbファイルの
パスと、パスワードを入れ、標準モジュールに貼り付け実行してみました。
 
以下実行結果です。
 
●参照 Microsoft DAO 3.6 Object Library にチェックを入れた場合
 
⇒ Set DBEng = CreateObject("DAO.DBEngine.36") この行が黄色になり
 
実行時エラー'-2147221164(80040154)':
クラスが登録されていません
 
と表示されます。
 
●参照設定 Microsoft DAO 3.6 Object LibraryDLL にチェックを入れた場合
 
読み込み時のエラーです と表示されます。
 
このデータベースのデータはどうしても必要というものではないようなので
少し試行錯誤してダメなようでしたらあきらめます。
 
数日このトピックを開けたままにさせてください。

投稿日時: 25/04/21 10:24:57
投稿者: なつ

すみません、訂正です。
 
●参照設定 Microsoft DAO 3.6 Object LibraryDLL にチェックを入れた場合
 
× 読み込み時のエラー
○ DLL 読み込み時のエラー
 
エラーメッセージが違っていました。

回答
投稿日時: 25/04/21 12:04:02
投稿者: んなっと

E:\office\Access\test.accdbに接続する場合。
 
【方法1】空のクエリ →貼り付け
 
 [データ][データの取得][その他のデータベースから][空のクエリ]
→PowerQueryエディターで[詳細エディター]に以下を貼り付け
 
let
    dbname ="E:\office\Access\test1.accdb",
    ソース = Odbc.DataSource(
        "driver={Microsoft Access Driver (*.mdb, *.accdb)};
        Dbq=" & dbname & ";
        dsn=MS Access Database",
        [HierarchicalNavigation=true]),
    dbs = ソース{[Name=dbname,Kind="Database"]}[Data]
in
    dbs
 
→[完了]
→[接続方法を指定してください]と表示されたら[資格情報の編集] クリック
→ユーザー名 何でもいい
 パスワード 正確に入力
→[Data]の列の必要な[テーブル]をクリック
 
 
【方法2】ODBCから →貼り付け
 
 [データ][データの取得][その他のデータベースから][ODBCから]
→データソース名 MS Access Database
 詳細設定オプション
 接続文字列
driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=E:\office\Access\test.accdb
→OK
→ユーザー名 何でもいい
 パスワード 正確に入力

投稿日時: 25/04/21 13:00:48
投稿者: なつ

んなっと さん
 
Power Queryの手順まで詳しくご教示いただきありがとうございます。
 
接続できました!
ありがとうございました。
助かりました。取り急ぎお礼まで。
 
Suzu さんもアドバイスをありがとうございます。

投稿日時: 25/04/21 14:26:51
投稿者: なつ

すみません、解決済みにしてありませんでした。
 
皆さまありがとうございました。