- ベストアンサー
ACCESSのテーブルをCSVにして
先ほどはミス記入がありました。 お願いします。 ACCESSのテーブルをCSVにして指定のホルダーに入れたいのです。 テーブル T_在庫表 項目は 「品番」 「在庫数」 エクスポート先 c\在庫\在庫表.txt マクロで テキスト変換 区切り記号付きエクスポート 在庫 c\在庫\在庫表.txt と入れましたがうまくできません。 ほかにいい方法はありませんか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
Q、ほかにいい方法はありませんか? A、VBで手続き無用の関数を書くと大抵のことが出来ます。 ********************************************************************************************** [イミディエイト] ? FileWrite("c\在庫\在庫表.txt", DBSelect("SELECT 品番,在庫数 FROM T_在庫表",",",vbCrLf)) True *********************************************************************************************** tab1: ID_fld1 1__9-1 2__9-001 3__9-0001 4__90-1 を、[C:\Temp\Test.csv]に出力し[メモ帳]でオープン。 C:\Temp\Test.csv 1,9-1 2,9-001 3,9-0001 4,90-1 これは、フォームのイミディエイトウインドウで次のようにして達成。 [イミディエイト] ? FileWrite("C:\Temp\test.csv", DBSelect("SELECT * FROM Tab1",",",vbCrLf)) True つまり、DBSelect関数の戻り値をFikeWrite関数で[C:\Temp\Test.csv]に出力。 DBSelect関数では、列区切り子(、)と行区切り子(vbCrLf)を指定しています。 ? DBSelect("SELECT * FROM Tab1",",",vbCrLf) 1,9-1 2,9-001 3,9-0001 4,90-1 指定しなければ、ズラズラと全てのレコードデータがセミコロンで繋がって戻されます。 ? DBSelect("SELECT * FROM Tab1") 1;9-1;2;9-001;3;9-0001;4;90-1; もちろん、以下のような FileWrite関数、DBSelect関数を標準モジュールに用意する必要があります。 なお、 FileWrite関数、DBSelect関数の動作保証はしていません! 十分に動作確認をされて自分のものにされた後に利用なさってください。 Public Function FileWrite(ByVal FileName As String, _ ByVal Text As String) As Boolean On Error GoTo Err_FileWrite Dim fso As Object Dim txs As Object Set fso = CreateObject("Scripting.FIleSystemObject") Set txs = fso.CreateTextFile(FileName, True) txs.Write Text FileWrite = True Exit_FileWrite: Exit Function Err_FileWrite: MsgBox Err.Description & "(FileWrite)", vbExclamation, " 関数エラーメッセージ" Resume Exit_FileWrite End Function Public Function DBSelect(ByVal strQuerySQL As String, _ Optional ByVal strSeparator1 As String = ";", _ Optional ByVal strSeparator2 As String = ";") As String On Error GoTo Err_DBSelect Dim I As Integer Dim J As Integer Dim R As Integer Dim C As Integer Dim M As Integer Dim N As Integer Dim rst As ADODB.Recordset Dim fld As ADODB.Field Dim Datas As String Set rst = New ADODB.Recordset ' ================= ' Begin With: rst ' ----------------- With rst .Open strQuerySQL, _ CurrentProject.Connection, _ adOpenStatic, _ adLockReadOnly If Not .BOF Then M = .RecordCount - 1 N = .Fields.Count - 1 .MoveFirst For R = 0 To M For C = 0 To N Datas = Datas & .Fields(C) If C <> N Then Datas = Datas & strSeparator1 End If Next C If Len(strSeparator2) Then Datas = Datas & strSeparator2 End If .MoveNext Next R End If End With ' --------------- ' End With: rst ' =============== Exit_DBSelect: DBSelect = Datas Exit Function Err_DBSelect: MsgBox "SELECT 文の実行時にエラーが発生しました。(DBSelect)" & Chr$(13) & Chr$(13) & _ "・Err.Description=" & Err.Description & Chr$(13) & _ "・SQL Text=" & strQuerySQL, _ vbExclamation, " 関数エラーメッセージ" Resume Exit_DBSelect End Function
その他の回答 (2)
Private Sub XXXX_Click() Dim isOK As Boolean Dim strSQL AS String strSQL="SELECT 品番,在庫数 FROM T_在庫表" isOK=FileWrite("C:\在庫\在庫表.txt", DBSelect(strSQL, ",", vbCrLf)) If Not isOK Then MsgBox "[C:\在庫\在庫表.txt]への出力に失敗しました。" Else MsgBox "[C:\在庫\在庫表.txt]に出力しました。" End If End sub こういうVBAコードです。 で、FileWrite()、DBSelect()も含めての回答を用意していましたが、それは会社のPCです。 で、出社は火曜日になります。 私は、回答にあたっては数度のテストをしています。 で、そのテストの結果を基にした回答が手元にありません。 そういうことで回答できませんのでお詫びするとともにお知らせします。
tab1: ID_fld1 1__9-1 2__9-001 3__9-0001 4__90-1 を、[C:\Temp\Test.csv]に出力し[メモ帳]でオープン。 C:\Temp\Test.csv 1,9-1 2,9-001 3,9-0001 4,90-1 と、こんな感じで宜しいのでしょうか?
お礼
有難うございます。 テーブル T_在庫表 をまるごと在庫表.txt にしたいのです。 メインフォームなんかにクリック時の更新作業として おきたいのです。 何卒おねがいします。