progani

次の例では、使っているクエリの名前は、qryAprint個人顧客 です。

Private Sub cmdエクスポート_Click()
On Error GoTo cmdエクスポート_Click_Err

    'カレントデータベースと同じフォルダに書き出し
    DoCmd.TransferText acExportDelim, "", "qryAprint個人顧客", CurrentProject.Path & "\qryAprint個人顧客.csv", False, ""
    Beep
    MsgBox "エクスポートを終了しました", vbInformation, "エクスポート"


cmdエクスポート_Click_Exit:
    Exit Sub

cmdエクスポート_Click_Err:
    MsgBox Error$
    Resume cmdエクスポート_Click_Exit

End Sub

カレントデータベースと同じフォルダに書き出ししたい場合は、CurrentProject.Path を指定しないと、
「ツール」-「オプション」-「全般」の『既定のデータベースフォルダ』に書き出される

構文
式。 TransferText (TransferType, SpecificationName, TableName, FileName, HasFieldNames, HTMLTableName, CodePage)

第3引数 TableName テキスト データのインポート、エクスポート、リンクを行う Microsoft Access テーブルの名前、または結果をテキスト ファイルにエクスポートする Microsoft Access クエリの名前を、文字列式で指定します。

第5引数 HasFieldNames  は、テキスト ファイルの 1 行目をフィールド名として使用する場合は、True (–1) を使います。テキスト ファイルの 1 行目をデータとして処理する場合は、False (0) を使います。この引数を指定しないと、False (既定値) が使われます。 



次の例では、一つのフォームで、法人用データ、個人用データ、その他データのクエリを入れ替えて利用しています。
フォームを開くときに、DoCmd.OpenForm のOpenArgsプロパティを利用して、法人・個人・その他 の、どのデータを開いているかを記憶しています。
CSVで書き出す時には、Select Case ステートメントでOpenArgsプロパティを確認して、法人・個人・その他 を分岐させています。

'-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
'   フォームを開く
'-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

Private Sub cmdAprint_Click()
On Error GoTo Err_cmdAprint_Click

    Dim stDocName As String
    Dim strRecordSource As String

    stDocName = "frmAprint"
    strRecordSource = "qryAprint個人顧客"
    
    DoCmd.OpenForm stDocName, , , , , , "個人"
    Forms(stDocName).RecordSource = strRecordSource
    Forms(stDocName).lblTitle.Caption = "個人顧客"

Exit_cmdAprint_Click:
    Exit Sub

Err_cmdAprint_Click:
    MsgBox Err.Description
    Resume Exit_cmdAprint_Click
    
End Sub


'-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
'   CSVファイルにエクスポートします
'-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

Private Sub cmdエクスポート_Click()
On Error GoTo cmdエクスポート_Click_Err

    Dim strCSV As String
    Dim strQuery As String
    
    strTitle = Me.lblTitle.Caption
    
    strCSV = CurrentProject.Path & "\" & strTitle & ".csv"

    Select Case Me.OpenArgs
    
        Case "個人"
            strQuery = "qryAprint個人顧客"
    
        Case "法人"
            strQuery = "qryAprint法人顧客"
        
        Case "その他"
            strQuery = "qryAprint顧客外年賀状データ"
    
    End Select

    'カレントデータベースと同じフォルダに書き出し
    DoCmd.TransferText acExportDelim, "", strQuery, strCSV, False, ""
    Beep
    MsgBox "エクスポートを終了しました", vbInformation, "エクスポート"


cmdエクスポート_Click_Exit:
    Exit Sub

cmdエクスポート_Click_Err:
    MsgBox Error$
    Resume cmdエクスポート_Click_Exit

End Sub



次の例は、AccessにCSVを書き出す為のプログラム「CSV書き出し」を書き、それをExcel側のプログラムで実行しています。

Accessファイル名「MY体重管理.accdb」の
テーブル名「tblデータ」のデータを
CSVファイル名「体重管理.csv」で書き出します。

Access側
Const strFileName As String = "体重管理"

Sub CSV書き出し()
    DoCmd.TransferText TransferType:=acExportDelim, TableName:="tblデータ", _
        FileName:=Application.CurrentProject.Path & "\" & strFileName & ".csv"
End Sub


Excel側
Const DB_Name As String = "\MY体重管理.accdb"

Sub CSV()
    Dim strPath As String
    Dim objACS As Object
    
    strPath = ThisWorkbook.Path & DB_Name
    
    Set objACS = CreateObject("Access.Application")
    
    With objACS
        .Visible = False  'アプリケーションを非表示
        .OpenCurrentDatabase (strPath)
        .Run ("CSV書き出し") 'Accessに書いたサブルーチン
        .CloseCurrentDatabase
        .Quit
    End With
    
    Set objACS = Nothing
    
    MsgBox "CSVファイルの書き出しが完了しました", vbInformation
    
End Sub


こちらも参考に Excel VBAノート