質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

3回答

3356閲覧

Access 別のDBのテーブルをcsv出力したい

access

総合スコア9

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/08/26 14:01

Access VBA のコードで質問です。
A.accdb から B.accdbへ接続し、B.accdbの "T社員データ" をcsv出力したいです。

A.accdb に記述するコードとして以下の点が分かりません。

Dim ws As DAO.Workspace
Dim db As DAO.Database
Set ws = DBEngine.Workspaces(0)
' B.accdbへ接続
Set db = ws.OpenDatabase(ConPath, False, False, "MS Access;PWD=" & ConPass)

' "T社員データ"をcsv出力
Dim path as string
path = "C:\Users\John\Desktop\資格管理DB\712\FE\b.csv"
DoCmd.TransferText acExportDelim, , db.TableDefs("T資格管理"), path, True

で実行すると、
DoCmd.TransferText acExportDelim, , db.TableDefs("T資格管理"), path, True
の部分で、"指定した式はいずれかの引数とデータ型が一致しません" のエラーとなります。
たぶん、db.TableDefs("T資格管理") がおかしいのだと思います。
B.accdbの"T社員データ" を意味したい場合、正しくはどう書けばよいのでしょうか。

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

DoCmdはそのAccessファイルに対して行うものなので、参照が必要です。
アプリケーションの OpenCurrentDatabase メソッド (Access)

VBA

1Dim acApp As Access.Application 2 3Set acApp = New Access.Application 'オブジェクト変数のインスタンス化 4acApp.OpenCurrentDatabase(ConPath, False, ConPass) 'データベースファイルをオープン 5 6acApp.DoCmd.TransferText acExportDelim, , "T社員データ", path, True

投稿2020/08/27 01:00

編集2020/08/27 01:43
sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

access

2020/08/28 01:51

ご回答有難うございます。返答遅くなりました。 記述いただいた、acAPP というオブジェクトと私が質問している db というオブジェクトは違うものでしょうか。同じだと思い込んで、下記コードに変更したところ db.DoCmd.TransferText acExportDelim, , "T社員データ", path, True "db.DoCmd"でエラーがでました。
sazi

2020/08/28 01:54

宣言する型次第です。質問のままなら型が違います。
access

2020/09/22 01:46

ご回答有難うございます。 出力できました。非常に助かりました。
guest

0

CSVにしたいテーブル名が "T社員データ" なのか "T資格管理" なのか不明ですが、"T資格管理"として回答します。

DoCmd.TransferText acExportDelim, , db.TableDefs("T資格管理"), path, True

DoCmd.TransferText の第3引数(TableName)はテーブル名またはクエリ名を文字列として指定します。

DoCmd.TransferText メソッド (Access) | Microsoft Docs

ということは、そのテーブルがデータベース内に存在している必要があります。
リンクテーブルでも可なので、リンクしてからエクスポートします。その後、リンクテーブルを削除すればいいでしょう。

vba

1 Dim ws As DAO.Workspace 2 Dim db As DAO.Database 3 Set ws = DBEngine.Workspaces(0) 4 ' B.accdbへ接続 5 Set db = ws.OpenDatabase(ConPath, False, False, "MS Access;PWD=" & ConPass) 6 7 ' "T資格管理"をcsv出力 8 Dim path As String 9 path = "C:\Users\John\Desktop\資格管理DB\712\FE\b.csv" 10 DoCmd.TransferDatabase acLink, "Microsoft Access", ConPath, acTable, "T資格管理", "T資格管理" 11 DoCmd.TransferText acExportDelim, , "T資格管理", path, True 12 DoCmd.DeleteObject acTable, "T資格管理"

おまけ

リンクテーブルを使わずにやる方法

SQLのIN句で外部データベースに接続して、SELECT ... INTO文で出力

vba

1 Dim folderPath As String 2 folderPath = "C:\Users\John\Desktop\資格管理DB\712\FE" 3 Dim textfileName As String 4 textfileName = "b#csv" '. は # に変更しておく 5 6 Dim sSQL As String 7 sSQL = "SELECT T資格管理.* INTO [" & textfileName & "] IN '' 'Text;DATABASE=" & folderPath & ";HDR=YES;' " & _ 8 "FROM T資格管理 IN '' [MS Access; DATABASE=" & ConPath & ";PWD=" & ConPass & ";];" 9 CurrentDb.Execute sSQL

よく考えたら、saziさんの回答のAccessアプリケーションの OpenCurrentDatabase でデータベースを開いてそこでDocmdするのが一番素直ですね。寝起きでぼけてました。

投稿2020/08/26 21:00

編集2020/08/27 01:48
hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

access

2020/08/28 01:55

ご回答ありがとうございます。 おまけのリンクテーブルを使わずにやる方法でうまくいきました。 saziさんの方法も試させて頂きましたが、根本的に理解できていない部分があってacAppと私が記述したdbオブジェクトは同じではないの?と混乱しております。 ご返答遅くなりました。ありがとうございます。
guest

0

"T資格管理"とは何でしょうか?

投稿2020/08/26 19:32

kay-ws

総合スコア106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

access

2020/08/28 01:52

申し訳ありません、間違えました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問