如何格式化VBAstring拆分输出正确?

我有一个文本string,我想用VBA拆分。 我不知道如何以所需的格式输出它。

目标是将5个string中的每个string拆分成一个数组,但我创build的For循环只是反复地分割相同的string。

这个想法是通过它的设备信息来分割每个string,所以它可以被转储到一个FTP上传Excel表单中。

这是我目前的代码:

Sub Break_String() Dim WrdArray() As String Dim text_string As String Dim intCount As Integer, intCounter As Integer Dim o As Object For intCount = 1 To 6 text_string = Cells(intCount, 2) WrdArray() = Split(text_string, "EQ # : ") Next intCount Set o = CreateObject("excel.application") o.Visible = True o.Workbooks.Open ("NER FTP UPLOADER.xlsm") For intCount = 1 To 6 o.Sheets("sheet1").Range("B19:F25").Value = WrdArray() Next intCount End Sub 

这是源数据:

联合收割机设备编号和描述:** ** EQ#:10045597 ** YR:2012 **制造商:KENT **型号:KF 4 SS ** SERIAL / VIN#:1984 **设备types:SKID STEER / MINI EXCAVATOR BREAKER **原装设备费用:3832.71 **
 ** ** EQ#:10251995 ** YR:2015 **制造商:STIHL **型号:TS420:14 ** SERIAL / VIN#:177734255 **设备types:CUT OFF SAW **原装设备成本:730.00 ** ** EQ#:10353520 ** YR:2015 **制造商:DEWALT **型号:D25980K ** SERIAL / VIN#:007379 **设备types:DEMO HAMMER **原装设备成本:1118.78 ** ** EQ#:10326567 ** YR:2015 **制造商:HILTI **型号:TE60:ATC ** SERIAL / VIN#:71248 **设备types:旋转式锤击器**原装设备成本:1115.49 ** ** ** EQ#:10335480 ** YR:2015 **制造商:STIHL **型号:TS420 ** SERIAL / VIN#:179146608 **设备types:切断锯**原产地设备成本:824.96 ** ** EQ#:10331620 ** YR:2014 **制造商:DEWALT **型号:D25980K ** SERIAL / VIN#:006159 **设备types:DEMO HAMMER **原装设备成本:1117.42 **
 ** ** EQ#:10189822 ** YR:2013 ** MAKE:MULTIQUIP **型号:DCA70SSJU4I ** SERIAL / VIN#:7305316 **设备types:发电机**原始设备成本:33068.65
联合收割机设备编号和描述:** ** EQ#:1226605 ** YR:2011 ** MAKE:MULTIQUIP **型号:GAW180HE1 ** SERIAL / VIN#:5653875 **设备types:焊机**原始设备费用:2442.03
联合收割机设备编号(s)&DESCRIPTION:** ** EQ#:1219041 ** YR:2011 **制造商:WACKER **型号:BS 60:2I ** SERIAL / VIN#:20036780 **设备types: RAMMER **原始设备成本:2642.09
 * ** EQ#:10391557 ** YR:2015 **制造商:WACKER **型号:WP1550AW ** SERIAL / VIN#:30101214 **设备types:VIB板* *原始设备费用:1499.52 ** ** EQ编号:10305672 ** YR:2014 **制造商:TOW MASTER **型号:T:5DT ** SERIAL / VIN#:4KNTT1210FL160572 ** Lic。 板**:MO / 63E0HL **设备types:拖车**原始设备成本:4887.14 **

你所遇到的问题是逻辑之一。 第一个“For”循环将运行6次,每次覆盖“WrdArray()”,以便在循环结束时等于最终值。

第二个“For”循环将这个最终值粘贴到6个不同的单元格中。

要解决这个问题,请重新sorting代码:

 Sub Break_String() Dim WrdArray() As String Dim text_string As String Dim intCount As Integer, intCounter As Integer Dim o As Object Set o = CreateObject("excel.application") o.Visible = True o.Workbooks.Open ("NER FTP UPLOADER.xlsm") For intCount = 1 To 6 text_string = sheets("mySheet").Cells(intCount, 2) WrdArray() = Split(text_string, "EQ # : ") o.Sheets("sheet1").Range("B" & (18 + intCount) & ":F" & (18+intCount)).Value = WrdArray() Next intCount End Sub 

注意你也需要改变你正在粘贴的单元格到循环中,否则数据将会被覆盖。

或者,您可以使用数组数组:

 Sub Break_String() Dim arArrays() As Variant Dim WrdArray() As String Dim text_string As String Dim intCount As Integer, intCounter As Integer Dim o As Object ReDim arArrays(1 To 6) For intCount = 1 To 6 text_string = sheets("mySheet").Cells(intCount, 2) WrdArray() = Split(text_string, "EQ # : ") arArrays(intCount) = WrdArray() Next intCount Set o = CreateObject("excel.application") o.Visible = True o.Workbooks.Open ("NER FTP UPLOADER.xlsm") For intCount = 1 To 6 o.Sheets("sheet1").Range("B" & (18 + intCount) & ":F" & (18+intCount)).Value = arArrays(intCount) Next intCount End Sub 

编辑***修复了从数组到单元格的行分配值的错误。 需要添加“:”的范围。 因为结果应该都在同一行,所以也将“24”改为“18”。

在修复这个问题的时候,注意到“Cells(intCount,2)”没有引用工作表。 已更新为引用工作表,但应在此处添加正确的工作表名称,而不是“mySheet”。

EDIT2 ***

 Sub Break_String() Dim WrdArray() As String Dim text_string As String Dim intCount As Integer, intCounter As Integer Dim o As Object Dim pasteRow As Integer Dim i As Integer pasteRow = 19 Set o = CreateObject("excel.application") o.Visible = True o.Workbooks.Open ("NER FTP UPLOADER.xlsm") For intCount = 1 To 6 text_string = sheets("mySheet").Cells(intCount, 2) WrdArray() = Split(text_string, "EQ # : ") For i = LBound(WrdArray) to UBound(WrdArray) o.Sheets("sheet1").Range("B" & (pasteRow)).Value = WrdArray[i] pasteRow = pasteRow + 1 Next i Next intCount End Sub 

这将按照评论中的要求进行。

尝试添加: Sheets("Sheet1").Range("C" & intCount & ":G" & intCount).Value = WrdArray()在这之下: WrdArray() = Split(text_string, "EQ # : ")会给你一个如何看到每个分裂的结果的想法,并且应该使你容易从那里弄清楚。