2012-05-02 6 views
0

У меня есть файл Microsoft Access VBA, как показано ниже.MS Access VBA export to TXT ERROR

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

Мой вопрос, как я могу применить максимальную ширину для обоих Амаль и данных SAMANTHA GAMAGE?

ответ

1

То, о чем вы просите здесь, обычно упоминается как «Фиксированная ширина» (или «Фиксированная длина»), который часто считается текстовым файлом другого типа, чем файл с запятой (CSV). Хотя вы можете смешивать два понятия вместе в одном файле.

Чтобы получить значение String заданной длины, вам необходимо использовать пространственную функцию 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

им очень сорый сэр. – Thari