2014-07-14 40 views
0

所以我想运行下面的子,我希望在第二次出现“_”时分割字符串标识,但我得到的是一个数组,其中包含以下元素“1-SWFEED-4.6.14”,“ 10“,”3_C“,但我想要的是一个元素为”1-SWFEED-4.6.14_10“,”3_C“的数组。我究竟做错了什么?VBA拆分限制不能按预期工作?

Sub check_split() 
Dim iden As String 
Dim element As Variant 
iden = "1-SWFEED-4.6.14_10_3_C" 

For Each element In Split(iden, "_", 3) 
    MsgBox element 
Next element 

End Sub 

我也尝试使用极限作为UBound(拆分(iden,“_”)),但它也不起作用。

+0

第三个参数描述了使用Split创建的数组中元素的数量。所以当你传递3作为参数split给你三个元素。 “1-SWFEED-4.6.14”,“10”,“3_C”。我不认为有一个预定义的功能,可以让你做你需要的。只需编写你自己的功能。首先找到第二个下划线,然后使用左右函数来获得你的标识的开始和结束,并将它们添加到数组中。 – Maco

+0

谢谢,这很有道理。我对msdn上的一个例子感到困惑。 – Crust3

回答

0

想出了这个子这做什么,我需要(感谢@Maco的评论)

Sub check_split() 
Dim iden As String 
Dim element As Variant 
Dim indexCounter As Integer 
Dim concIden As String 
iden = "1-SWFEED-4.6.14_10_3_C" 
indexCounter = 0 
For Each element In Split(iden, "_") 
    If indexCounter < UBound(Split(iden, "_")) - 1 Then 
     If Not indexCounter + 1 = UBound(Split(iden, "_")) - 1 Then 
      concIden = concIden + element + "_" 
     Else 
      concIden = concIden + element 
     End If 
    End If 
    indexCounter = indexCounter + 1 
Next element 
MsgBox concIden 
End Sub 
0
如何

样?

Sub check_split() 
    Dim iden As String, splitLocation As Integer, firstPart As String, secondPart As String 

    iden = "1-SWFEED-4.6.14_10_3_C" 

    splitLocation = WorksheetFunction.Find("_", iden, WorksheetFunction.Find("_", iden, 1) + 1) 

    firstPart = VBA.Left$(iden, splitLocation - 1) //prints 1-SWFEED-4.6.14_10 
    secondPart = VBA.Right$(iden, Len(iden) - splitLocation) // prints 3_C 
End Sub