0

以下に示すような Microsoft Access VBA ファイルがあります。

Sub ExportTextFileDelimited(FileName As String, _
    DataSet As String, _
    Delimiter As String, _
    TextQualifier As String, _
    WithFieldNames As Boolean)
    On Error GoTo ExportTextFile_Err

    Dim cnn As ADODB.Connection
    Dim rst As New ADODB.Recordset

    Dim Directory As String
    Dim MyString As String, strSQL As String
    Dim strDS As String
    Dim I As Integer

    Open FileName For Output As #1
    Set cnn = CurrentProject.Connection

    rst.Open DataSet, cnn, adOpenForwardOnly, adLockReadOnly
    If WithFieldNames Then
        For I = 0 To rst.Fields.Count - 1
            MyString = MyString & TextQualifier & rst(I).Name & TextQualifier & Delimiter
        Next I
        MyString = Left(MyString, Len(MyString) - 1)
        Print #1, MyString
    End If
    rst.MoveFirst
    Do While Not rst.EOF
        MyString = ""
        For I = 0 To rst.Fields.Count - 1
            'check for text datatype (202)
            If rst(I).Type = 202 Then
                MyString = MyString & TextQualifier & _
                rst(I)
            Else
                MyString = MyString & rst(I)
            End If
        Next I
            MyString = Left(MyString, Len(MyString) - 2)
        Print #1, MyString
        rst.MoveNext
    Loop

ExportTextFile_Exit:
    ' Close text file.
    Close #1
    rst.Close
    Set cnn = Nothing
    Exit Sub
ExportTextFile_Err:
    MsgBox Err.Description
    Resume ExportTextFile_Exit
End Sub

このコードは正常に動作Query.txtし、次のデータを含むファイルを出力します。

こちらの作例画像を参考にご覧ください。

以下に記載されている問題の例

私の質問は、AMAL データと SAMANTHA GAMAGE データの両方に最大幅を適用するにはどうすればよいですか?

4

1 に答える 1

1

ここで求めているのは通常、「固定幅」(または「固定長」) と呼ばれ、カンマ区切り (または CSV) ファイルとは異なるタイプのテキスト ファイルと見なされることがよくあります。ただし、2 つの概念を同じファイルに混在させることはできます。

指定された長さの文字列値を取得するには、VBA のスペース関数を使用する必要があります。

Dim s as String
s = "AMAL"
s = s & Space(15 - len(s)) 'Add spaces to end
s = Space(15 - len(s)) & s 'Add spaces to beginning

この 1 つのフィールドだけにスペースを追加する理由と、そのフィールドの長さ (つまり、追加するスペースの数) をどのように決定するのか、あなたの投稿からは不明です。あなたの機能は、この機能に対して正しく設定されていません。この関数を再設計して、どのフィールドにスペースを追加し、そのフィールドにいくつのスペースを追加するかを知るには、さまざまな方法があります。どの方法を選択するかは、個々のニーズによって異なります。

関数でこれをどのように使用するかについて、いくつかのアイデアを提供します。

Dim iMaxLength as Integer
Do While Not rst.EOF
    If Len(rst("UserName").Value) > iMaxLength Then iMaxLength = Len(rst("UserName").Value)
    rst.MoveNext
Loop

Do While Not rst.EOF
    rst.movefirst
    MyString = ""
    For I = 0 To rst.Fields.Count - 1
        'check for text datatype (202)
        If rst(I).Type = 202 Then
            If rst(I).Name = "UserName" Then
                MyString = MyString & TextQualifier & _
                rst(I) & Space(iMaxLength - Len(rst(I))) 
            Else
                MyString = MyString & TextQualifier & _
                rst(I)
            End If
        Else
            MyString = MyString & rst(I)
        End If
    Next I
        MyString = Left(MyString, Len(MyString) - 2)
    Print #1, MyString
    rst.MoveNext
Loop
于 2012-05-02T10:23:23.643 に答える