EXCEL 2007 宏

EXCEL 2007 宏

我有一个宏,它连接到数据库并为我获取数据,并将其以逗号分隔。但问题是逗号被附加到最后一行,这是我不想要的。我在这里苦苦挣扎。你能帮帮我吗?

以下是代码的一部分。

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

这是我得到的结果。

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

我不想要最后一行的最后一个逗号。

答案1

经过大量的研发,这个已经可以运行了。

  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 = ""

但请让我知道,这是否会产生任何问题,尽管它给出了预期的结果!

答案2

像这样的事情应该可以做到:

  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

这样,它会在循环的每次迭代中将记录集信息附加到 strString,但仅在循环的最后一次迭代之外的所有迭代中附加逗号。

答案3

Next输入下面这行之后:

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

此条件检查您在尝试删除尾随逗号之前是否已从记录集中实际构建了一个字符串。

相关内容