• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Vbaでアクセスからエクセルにリンクテーブルする)

Vbaでアクセスからエクセルにリンクテーブルする方法

このQ&Aのポイント
  • アクセスからVBAを使用してエクセルにリンクテーブルを作成する方法について教えてください。
  • 手作業では外部データ→エクセル→外部データの取り込み→リンクテーブルを作成してソースデータにリンクすることができますが、VBAで実行したいです。
  • エクセルのパスとシート名を指定してリンクテーブルを作成する方法を教えてください。最終的には複数のテーブルを作成する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

手作業でExcelへのリンクテーブルを作って テーブルをデザインビューで開いてプロパティの「説明」を覗いてみた。 Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=D:\DB\SampleData\Small.xlsx;TABLE=Sheet1$ これをConnect に渡せば良いらしい。 IMEX ? ACCDB ? 分からないのでGoogleと こちらでも素晴らしい回答をされているkikuさんの http://kikutips.blog13.fc2.com/blog-entry-107.html を発見。 http://www.f3.dion.ne.jp/~element/msaccess/AcTipsExcelLinkDataType.html こちらではIMEXに関わる説明がされています。 docmd.TransferSpreadsheet acLink ,acSpreadsheetTypeEx・・後略でシートの一部分だけだと (VBAのヘルプで↑を調べてください) Excel 12.0 Xml;HDR=NO;IMEX=2;ACCDB=YES;DATABASE=D:\DB\SampleData\Small.xlsx;TABLE=sheet2$B5:D16 とかになりました。 直接、接続情報を指定するもよし、docmd.TransferSpreadsheet・・・でもお好きな方で。 今日はとても賢くなった。寝たら忘れるかも。。。

nctwocqtrq6
質問者

お礼

リンク先見ました いろんなパターンが書かれていてすごく参考になりました。 nicotinism様の回答はいつも参考にしています。 とても賢い方だと思っていて尊敬しています。

その他の回答 (1)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

試しにやってみました Access2010で、カレントデータベース(mdb形式)にxls形式のファイルに対してリンクテーブルを作成しました。 excel 8.0のところは、試みに他のバージョン番号(xl2003なら11.0とか)を入れるとエラーになりました。 また、accdb形式のデータベースにxlsx/xlsm形式のワークシートをリンクさせるには、excel 12.0に変更する必要がありました。(mdbへの、xlsx/xlsmのリンクは拒絶されました。) なお、リンクテーブル作成に成功しても、一旦データベースウィンドウを消して再表示させないと、反映されない事がありました。 以上、ご参考まで。(デスクトップのパス取得はテストの都合でつけてあります、あしからず) Sub test() Dim DB As Database Dim rst As Recordset Dim tblExcel As TableDef Set DB = CurrentDb Set tblExcel = DB.CreateTableDef("linked excel worksheet") tblExcel.Connect = "excel 8.0;" & "database=" & GetDesktopPath & "\" & "hoge..xls" tblExcel.SourceTableName = "Sheet1$" DB.TableDefs.Append tblExcel DB.Close Set rst = Nothing Set tblExcel = Nothing Set DB = Nothing End Sub Private Function GetDesktopPath() As String Dim wScriptHost As Object, strInitDir As String Set wScriptHost = CreateObject("Wscript.Shell") GetDesktopPath = wScriptHost.SpecialFolders("Desktop") Set wScriptHost = Nothing End Function

参考URL:
http://www.moug.net/tech/acvba/0090012.html
nctwocqtrq6
質問者

お礼

すごい!できました! ご回答ありがとうございました。 しかも自動的に1行目はフィールドになってくれるようですね。 DAOを使うのですか。

関連するQ&A

専門家に質問してみよう