macro EXCEL 2007

0

Eu tenho uma macro que se conecta ao db e busca dados para mim e os separa por vírgulas. Mas o problema é que a vírgula está sendo anexada à última linha, o que eu não quero. Eu estou lutando aqui. Você poderia por favor me ajudar?

Aqui está a parte do código.

If cn.State = adStateOpen Then
  Rec_set.Open "SELECT  concat(trim(Columns_0.ColumnName), '  ','(', 'varchar(2000)' ,')')  columnname FROM    DBC.Columns Columns_0 WHERE   (Columns_0.TableName= " & Chr(39) & Tablename & Chr(39) & "and Columns_0.Databasename=" & Chr(39) & db & Chr(39) & ")ORDER   BY Columns_0.Columnid;", cn 'Issue SQL statement
  If Not Rec_set.EOF And Not Rec_set.EOF Then

  Do Until Rec_set.EOF

       For i = 0 To Rec_set.Fields.Count - 1
           strString = strString & Rec_set(i) & ","
       Next
       strFile.WriteLine (strString)

       strString = ""
       Rec_set.MoveNext
  Loop

Aqui está o resultado que estou recebendo.

EMPNO (varchar(2000)), ENAME (varchar(2000)), JOB (varchar(2000)), MGR (varchar(2000)), HIREDATE (varchar(2000)), SAL (varchar(2000)), COMM (varchar(2000)), DEPTNO (varchar(2000)),

Eu não quero a última vírgula na última linha.

    
por Binay 25.06.2013 / 15:26

3 respostas

2

Depois de muito RnD, isso está funcionando.

  Do Until Rec_set.EOF
       For i = 0 To Rec_set.Fields.Count - 1
           strString = strString & Rec_set(i) & "," & vbNewLine
       Next
       Rec_set.MoveNext
  Loop
        strString = Left(strString, Len(strString) - 3)
        strFile.WriteLine (strString)
        strString = ""

Mas por favor me avise, se isso criar algum problema, embora esteja dando o resultado desejado!

    
por 26.06.2013 / 11:37
1

Algo como isso deve acontecer:

  Do Until Rec_set.EOF

       For i = 0 To Rec_set.Fields.Count - 1

           strString = strString & Rec_set(i)

           if i < Rec_set.Fields.Count - 1
               strString = strString & ","
           end if 

       Next
       strFile.WriteLine (strString)

       strString = ""
       Rec_set.MoveNext
  Loop

Dessa forma, ele anexa as informações do conjunto de registros a strString em cada iteração por meio do loop, mas acrescenta apenas a vírgula em todas, exceto na última iteração do loop.

    
por 25.06.2013 / 16:14
1

Depois de Next , insira a linha abaixo:

If Len(strString)>1 Then strString = Left(strString, Len(strString) - 1)

Essa condição verifica se você realmente criou uma string do conjunto de registros antes de tentar remover a vírgula final.

    
por 25.06.2013 / 16:14