2012-05-02 2 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

내 질문은 어떻게 모두 아말과 사만다 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