2012-05-02 242 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和萨曼莎GAMAGE数据?

回答

1

您在这里要求的通常被称为“固定宽度”(或“固定长度”),它通常被认为是与逗号分隔(或CSV)文件不同类型的文本文件。虽然您可以将两个概念混合在同一个文件中。

要获得一个字符串值为指定长度,您需要使用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 

为什么要添加的空间只有这一个领域,你将如何确定这一领域应该有多长(即有多少空间添加)这是从您的帖子不清楚。对于此功能,您的功能确实没有正确设置。有很多方法可以重新设计这个函数,以便它知道哪些字段需要添加空格以及添加多少空间到该字段。你选择哪种方式确实取决于你的个人需求。

只给你一些想法如何,你会在你的函数使用:

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

im非常soryyy先生。 – Thari