2012-05-02 10 views
0

以下に示すように、Microsoft Access VBAファイルがあります。MS Access VBAをTXTエラーにエクスポートします。

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ファイル出力:

を見て、この例の画像を参照してくださいを。

Example of the problem described below

私の質問はどのように私は両方のAMALとSAMANTHAガマゲデータの最大幅を適用するか、でしょうか?

答えて

1

ここで求めているのは、通常、固定幅(固定長)と呼ばれ、コンマ区切り(またはCSV)ファイルとは異なる種類のテキストファイルとみなされます。 2つの概念を同じファイルに混在させることはできますが、

String値を指定された長さにするには、VBAのSpace関数を使用する必要があります。

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 

あなたがこれだけのフィールドに空白を追加すると、どのように(すなわち、どのように多くのスペースを追加するために)そのフィールドがどうあるべきか長いかを決定しようとしている理由それはあなたのポストから不明です。あなたの関数は実際にこの機能のために正しく設定されていません。この機能を再設計して、どのフィールドにスペースを追加するか、そのフィールドに追加するスペースを知ることができるように、さまざまな方法があります。あなたが本当に選ぶ方法は、あなたの個人的なニーズにかかっています。

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 
+0

拝啓、これは固定されていない幅:

ちょうどあなたがあなたの関数でこれを使用する方法をいくつかのアイデアを与えるために。データの最大データ幅を取得します。これはサンプルです。私のファイルは1000以上のレコードを持っています。お返事をありがとうございます。 – Thari

+0

あなたはあなたの質問にそれを持っていたはずです。私たちはあなたの心を読むことができません。 – HK1

+0

私は非常にsoryyyサー。 – Thari

関連する問題