2016-05-23 43 views
0

我在EXCEL中构建提取。我已经提出了一些关于它的问题,但是随着我继续取得进步,我也继续面临阻碍我看起来很专业的障碍。 这里是我的提取物是什么样的...Excel提取vba - 空格/格式

我选择从SQL Server日期..

Select Location,Name, Q1, Comments 
From tblInfo 

然后我做头的提取物

With xlSheetInfo 
.Cells(5, 1).ColumnWidth = 50 
.Cells(5, 1).Value = "School" 
.Cells(5, 2).ColumnWidth = 25 
.Cells(5, 2).Value = "CLIENT NAME" 
.Cells(5, 3).Value = "Q1" 
.Cells(5, 4).Value="Comments" 
End with 

然后,我用数据填充它..使用记录集

While Not g_RS3.EOF 
    For i = xlCol To rCount 
     Cells(xlRow, xlCol).Value = g_RS3("School") 
     Cells(xlRow, xlCol).Font.Bold = True 
     xlCol = xlCol + 1 
     Cells(xlRow, xlCol).Value = g_RS3("LastName") & " ," & g_RS3("FirstName") 
     xlCol = xlCol + 1 
     Cells(xlRow, xlCol).Value = g_RS3("Q01") 
     xlCol = xlCol + 1 
     Cells(xlRow, xlCol).Value = g_RS3("Comments") 
     Cells(xlRow, xlCol).EntireColumn.AutoFit 
    xlrow = 1 
    g_rs3.movenext 
Next i 
Wend 

Icame的问题在评论部分。用户可以输入多行/句子的评论。我所看到的是一些用户输入评论,做几个换行符,然后输入另一条评论 - 用于同一条记录。所以如果你看看电子表格,它会向你显示这些不必要的空间。在某些情况下,用户会做几个换行符,然后输入注释,在这种情况下,它看起来不专业。我倾向于一起摆脱所有空间,所以如果有几条评论,那么就有一条在下面。 这里就是我在说什么的图像...

http://i.stack.imgur.com/T0dmS.png

我RTRIM,LTRIM,修剪发挥各地,但它似乎并没有工作。另一件事是,我可能有任何值(NULL)。有任何想法吗 ????

+0

首先将它存储到数组,然后按行“分割”休息? – findwindow

+0

不幸的是,没有简单的方法从SQL字符字段中删除这样的前导或尾随换行符。如果你认为它是永远值得的,你可以为CLR创建一个函数。您创建Excel工作表内容的方式已经是最慢的方法之一,您不希望这么慢。例如,如果您执行单个CopyFromRecordSet或QueryTables.Add(),则可以使其更快。我建议你防止输入这样的数据到sql服务器,而不是进入编辑。 –

+0

我猜在这种情况下速度并不重要 - 这是一个旧的VB6应用程序 - 我创建提取的方式与之前完成的方式相同。我是新来的这个环境,只是跟着别人做了什么。这将如何完成从记录集 – FatBoySlim7

回答

1

将这个功能模块:

Public Function RemoveLf(strIn As String) As String 
    Dim strOut As String 
    strOut = Replace(strIn, vbLf, " ") 
    RemoveLf = strOut 
End Function 

然后在你的代码,你可以替换此行:

Cells(xlRow, xlCol).Value = g_RS3("Comments") 

这一行:

Cells(xlRow, xlCol).Value = RemoveLf(g_RS3("Comments")) 

HTH

+0

这将如何区分不是领先的CR,LF或CRLF或拖尾,但在字符串本身? –

+0

这是一个很好的功能,但它不能解决我在图像中显示的问题。如果两个评论之间存在空格,这似乎解决了问题,但如果评论本身之前有空格,则不会。图像显示了这个问题。这个函数也不起作用,如果我的评论后有空格 – FatBoySlim7

+0

@CetinBasoz - 是的,我看到我误解了OP的问题,这将是一个正则表达式的工作。我想在第一个\ w之前的任何\ s。 –