0

情報のヘッダー行を CSV ファイルに配置する必要がある状況があります。

その後、列番号が異なる 3 つのクエリをこのファイルに追加する必要があります。

現在、このロジックがありますが、そのTransferText行は、以前にファイルに配置したものを上書きします:

Dim fldr As String

Dim dlg As Office.FileDialog
Set dlg = Application.FileDialog(msoFileDialogFolderPicker)
With dlg
    .AllowMultiSelect = False
    .Title = "Select a Folder:"
    .Filters.Clear
    '.Filters.Add "CSV Files", "*.csv"

    If .show = True Then
        fldr = .SelectedItems(1)
    End If
End With
GC dlg

'TODO: Remove after Debugging is complete
RaiseAlert "Folder chosen: " & fldr
'-----------------------------------------

Dim file As String
file = fldr & "\Export_DelaGet_" & Format(Now(), "yyyy_mm_dd") & ".csv"

'TODO: Remove after Debugging is complete
RaiseAlert "File: " & file
'-----------------------------------------

'TODO: OpenFile and output the header line
Open file For Output As #1
Print #1, """SYS"",""Some Data""" & vbCrLf
Close 1

'Output Query/View Results to file
DoCmd.TransferText acExportDelim, "MstPrc_Spec", "vwMasterPrices_Output", file, False

RecordSet を介してクエリを反復処理する方がよいでしょうか、それとも TransferText に何か不足していますか?

4

1 に答える 1

1

他の誰かがこれを実行するためのより良い方法を私に提供できない限り、これが私がこれまでに持っているものです.

Dim fldr As String

Dim dlg As Office.FileDialog
Set dlg = Application.FileDialog(msoFileDialogFolderPicker)
With dlg
    .AllowMultiSelect = False
    .Title = "Select a Folder:"
    .Filters.Clear
    '.Filters.Add "CSV Files", "*.csv"

    If .show = True Then
        fldr = .SelectedItems(1)
    End If
End With
GC dlg

'TODO: Remove after Debugging is complete
'    RaiseAlert "Folder chosen: " & fldr
'-----------------------------------------

Dim file As String
file = fldr & "\Export_" & Format(Now(), "yyyy_mm_dd") & ".csv"

'TODO: Remove after Debugging is complete
'    RaiseAlert "File: " & file
'-----------------------------------------

'TODO: OpenFile and output the header line
Open file For Output As #1
Print #1, """SYS"",""Some Data""" & vbCrLf
Close 1

Open file For Append As #2
Dim rst As DAO.Recordset, str As String

'Append MasterPrices
Set rst = CurrentDb.OpenRecordset("vwMasterPrices_Output")
If rst.RecordCount > 0 Then
    Do While Not rst.EOF
        str = """" & rst(0) & """,""" & rst(1) & """,""" & rst(2) & """,""" & rst(3) & """,""" & rst(4) & """," & Format(rst(5), "##0.00")

        Print #2, str

        'Move Next
        rst.MoveNext
    Loop
End If

'Append GroupPrice
Set rst = CurrentDb.OpenRecordset("vwGroupPrice_Output")
If rst.RecordCount > 0 Then
    Do While Not rst.EOF
        str = """" & rst(0) & """,""" & rst(1) & """,""" & rst(2) & """," & Format(rst(3), "##0.00")

        Print #2, str

        'Move Next
        rst.MoveNext
    Loop
End If

'Append GroupLocations
Set rst = CurrentDb.OpenRecordset("vwGroupLocations_Output")
If rst.RecordCount > 0 Then
    Do While Not rst.EOF
        str = """" & rst(0) & """,""" & rst(1) & """," & rst(2)

        Print #2, str
        'Move Next
        rst.MoveNext
    Loop
End If

GC rst
Close 2

残念ながら、このTransferTextメソッドは操作File-OutputではなくFile-Append操作を実行します。そのため、 より前のファイル内のものはすべてTransferTextクリアされ、メソッドの出力に置き換えられます。

はい、CSV の文字列の周りにテキスト修飾子が必要でした。

于 2012-09-11T16:55:19.960 に答える