- ベストアンサー
カレントフォルダを変更する方法について
- カレントフォルダを変更する方法について教えてください。
- エクセルのマクロを使用して、開いたフォルダのDB用MDBファイルにMS-Queryが接続する方法を知りたいです。
- エクセルのオプションでカレントフォルダを空白にしても、MS-Queryには反映されません。どのようにすればカレントフォルダを変更できるでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
つまりAccessは必ずExcelと一緒のフォルダーにあるということでしょうか。 であればExcelを開いたときにマクロを走らせればよいだけだと思いますけど。 Private Sub Workbook_Open() ActiveWorkbook.RefreshAll With ActiveWorkbook.Connections("接続1").ODBCConnection .BackgroundQuery = True .CommandText = Array("SELECT * FROM table名") ここは自分で変える。 .CommandType = xlCmdSql .Connection = Array(Array( _ "ODBC;DBQ=" & Application.ActiveWorkbook.Path & "\Access_名.accdb;DefaultDir=" & Application.ActiveWorkbook.Path & ";Driver={Microsoft Access" _ ), Array( _ " Driver (*.mdb, *.accdb)};DriverId=25;FIL=MS Access;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3" _ ), Array(";UserCommitSync=Yes;")) .RefreshOnFileOpen = False .SavePassword = False .SourceConnectionFile = "" .SourceDataFile = "" .ServerCredentialsMethod = xlCredentialsMethodIntegrated .AlwaysUseConnectionFile = False End With With ActiveWorkbook.Connections("接続1") .Name = "接続1" .Description = "" End With ActiveWorkbook.Connections("接続1").Refresh ActiveWorkbook.RefreshAll end sub つまり Application.ActiveWorkbook.Path が現在のフォルダー名を持ってきます。 こいつをBookのOpenで毎回走らせればリフレッシュです。 あとは不都合な部分をアレンジしてみてください。何時もフォルダ変更時にやってる操作をマクロ記録してみればこういう風に書かれるのでは? マクロ付きExcelで保管することになりますが。
お礼
IDii24さん、ありがとうございました。 結局、毎回更新は不可能だったのですが、頂いたアドバイスから「最初に開いたところでピボットテーブルを構築する」ということに致しました。Application.ActiveWorkbook.Path を使い、作成したところ、コピー先のフォルダごとに正しいデータベースに接続できることが出来ました。 本当にありがとうございました。
補足
早速のご回答ありがとうございました。 すごくありがたいソースだったのですが、当方のofficeのバージョン記載忘れがネックとなってしまいました。申し訳ありません。当方 2000/2010の両使いとなっておりまして、2000で検証したところ「ActiveWorkbook.Connections("接続1").ODBCConnection」のところでオブジェクトエラーとなりました。 マクロ記録を作成し、アレンジしようとしたのですが、同一ポイントにピボットテーブルがあると「アプリケーション定義またはオブジェクト定義のエラー」になります。 「create」という単語がまずいと思うのですが、「update」ではだめでした。ここはどういった関数になるのでしょうか? With ActiveWorkbook.PivotCaches.Add(SourceType:=xlExternal) .Connection = Array(Array( _ "ODBC;DSN=MS Access Database;DBQ=\\(フォルダ名+ファイル名) .mdb;DefaultDir=\\(フォルダ名);DriverId=25;FIL=MS Access;MaxBufferS" _ ), Array("ize=2048;PageTimeout=5;")) .CommandType = xlCmdSql .CommandText = Array( _ "SELECT * FROM `\\(フォルダ名+ファイル名`.テーブル名 テーブル名) .CreatePivotTable TableDestination:=Range("A1"), TableName:= _ "ピボットテーブル1" End With