使用VBA删除CSV中多余的空格

我正在使用VBA脚本将Excel文档中的数据编译为CSV文件,以便与PowerCLI脚本一起使用。 我遇到与列名称中有多余空格有关的问题,我想确定一种方法来:

引入一个函数来消除我的主要VBA脚本中的额外空间,或者使VBA TrimEText部分与删除与主VBA脚本同时运行的额外空间有关

“主”VBA脚本是:

Function BuildValuesString(colIndex As String, rows As String) As String Dim val As Variant For Each val In Split(rows, ",") If Cells(val, colIndex) <> "" Then BuildValuesString = BuildValuesString & Cells(val, colIndex).Value & " , " Next val End Function Function BuildNullStrings(numNullStrings As Long) As String Dim iNullStrings As Long For iNullStrings = 1 To numNullStrings BuildNullStrings = BuildNullStrings & "" & " , " Next iNullStrings End Function Sub WriteCSVFile2() Dim My_filenumber As Integer Dim logSTR As String My_filenumber = FreeFile logSTR = logSTR & "Name" & " , " logSTR = logSTR & "VLAN" & " , " logSTR = logSTR & "NumCPU" & " , " logSTR = logSTR & "MemoryGB" & " , " logSTR = logSTR & "C" & " , " logSTR = logSTR & "D" & " , " logSTR = logSTR & "App" & " , " logSTR = logSTR & Chr(13) logSTR = logSTR & BuildValuesString("C", "18,19,20,21,22") logSTR = logSTR & BuildNullStrings(1) logSTR = logSTR & BuildValuesString("C", "26,27,28,29,30,31,32") logSTR = logSTR & Chr(13) logSTR = logSTR & BuildNullStrings(6) logSTR = logSTR & BuildValuesString("C", "36,37,38,39,40,41,42") logSTR = logSTR & Chr(13) logSTR = logSTR & BuildNullStrings(6) logSTR = logSTR & BuildValuesString("C", "46,47,48,49,50,51,52") Open "Z:\Operational Env. Requests\2016\Requests(Test)\" & ThisWorkbook.Name & ".csv" For Append As #My_filenumber Print #My_filenumber, logSTR Close #My_filenumber End Sub 

有关删除多余空间的部分是:

 Sub TrimEText() ' This module will trim extra spaces from BOTH SIDES and excessive spaces from inside the text. Dim MyCell As Range On Error Resume Next Selection.Cells.SpecialCells(xlCellTypeConstants, 23).Select For Each MyCell In Selection.Cells MyCell.Value = Application.WorksheetFunction.Substitute(Trim(MyCell.Value), " ", " ") MyCell.Value = Application.WorksheetFunction.Substitute(Trim(MyCell.Value), "", " ") MyCell.Value = Application.WorksheetFunction.Substitute(Trim(MyCell.Value), "", " ") MyCell.Value = Application.WorksheetFunction.Substitute(Trim(MyCell.Value), "", " ") MyCell.Value = Application.WorksheetFunction.Substitute(Trim(MyCell.Value), "", " ") Next On Error GoTo 0 End Sub 

有没有办法让两个同时运行,而不需要在导出的CSV文件中select单元格? 像在VBA脚本中指定CSV文档本身的单元格?

“我遇到与列名称中有多余空格有关的问题”这是您要为列名称添加空格:

logSTR = logSTR&“Name”&“,”

在最后一行添加一个没有标题的列。 这可能是非常有问题的。

logSTR = logSTR&“App”&“,”

有7列没有6. BuildNullStrings是不需要的string(7,“,”)做同样的事情。

logSTR = logSTR&BuildNullStrings(6)

这将导致您的数据错位和缺less列。

如果Cells(val,colIndex)<>“”然后BuildValuesString = BuildValuesString&Cells(val,colIndex).Value&“,”

重构代码

 Sub WriteCSVFile2() Dim logSTR As String Dim My_filenumber As Integer Dim data(6) Dim logSTR As String data(0) = Join(Array("Name", "VLAN", "NumCPU", "MemoryGB", "C", "D", "App"), ",") data(1) = BuildValuesString("C", 18, 19, 20, 21, 22) & String(1, ",") data(2) = BuildValuesString("C", 26, 27, 28, 29, 30, 31, 32) data(3) = String(7, ",") data(4) = BuildValuesString("C", 36, 37, 38, 39, 40, 41, 42) data(5) = String(7, ",") data(6) = BuildValuesString("C", 46, 47, 48, 49, 50, 51, 52) logSTR = Join(data, vbCrLf) My_filenumber = FreeFile Open "Z:\Operational Env. Requests\2016\Requests(Test)\" & ThisWorkbook.Name & ".csv" For Append As #My_filenumber Print #My_filenumber, logSTR Close #My_filenumber End Sub Function BuildValuesString(colIndex As String, ParamArray RowNumbers()) As String Dim x As Long Dim result As String For x = 0 To UBound(RowNumbers) RowNumbers(x) = Trim(Cells(clong(RowNumbers(x)), colIndex).Value) If Cells(val, colIndex) <> "" Then BuildValuesString = BuildValuesString & Cells(val, colIndex).Value & " , " Next BuildValuesString = Join(RowNumbers, ",") End Function 

修剪使用的范围

Sub TrimData()Application.ScreenUpdating = False Dim c As Range

 For Each c In ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants) c.Value = Trim(c.Value) Next Application.ScreenUpdating = True 

结束小组