2013-04-04 48 views
1

我有一個形式爲「X0507Y0512Z0413」的數據字符串。我使用VB從pic微控制器讀取數據,然後使用web上的VB腳本將數據加載到excel中。我可以將上述第一行數據放入電子表格的第一個單元格中。不過,我希望將此字符串分爲三列X,Y & Z,並從每個變量的開頭刪除該字母。它還必須一次讀入長達20秒的數據,因此每個值都需要附加到前一個值。這是我迄今爲止的VB腳本,我嘗試了Split()命令並收到錯誤13類型的不匹配。VB - 串行數據分割串並單獨記錄到Excel

Private Sub CommandButton3_Click() 

    Dim intPortID As Integer ' Ex. 1, 2, 3, 4 for COM1 - COM4 
    Dim lngStatus As Long 
    Dim strData As String 
    Dim xyzData As String 

    intPortID = 4 
    lngStatus = CommRead(intPortID, strData, 1) 
    xyzData = Split(strData, "X""Y""Z") 
    Range("A2,B2,C2").Value = xyzData 


End Sub 

我是一個總新手,所以這可能是一個相當簡單的修復,所以道歉,如果它似乎微不足道。任何建議都會很棒。

S.J

PS

它會更簡單,如果每一個變量是用逗號隔開?

+0

這不是VB.NET,看起來像VB6 – Steve 2013-04-04 22:45:25

回答

2

第一個問題是xyzData被設置爲一個字符串。當你從一個Split填充它,你需要一個數組:

Dim xyzData() as String 

我想不出一個簡單的方法做,因爲你通過一個不同的角色,每次分裂在VBA分裂 - 它的需求一個定製的功能來處理它。下面的工作 - 我的VBA是有點生疏,所以有可能使之整潔,但我認爲它的工作原理:

Private Function SplitXYZ(strData As String) As String() 

    Dim pos1 As Integer 
    Dim pos2 As Integer 
    Dim char As String 
    Dim i As Integer 

    Dim ret() As String 
    Dim retCount As Integer 
    ReDim ret(0) 

    For i = 1 To Len(strData) 

     'Get and check the character from the string 
     char = Mid(strData, i, 1) 
     If char = "X" Or char = "Y" Or char = "Z" Then 

      'Set the positions for the new range 
      pos1 = pos2 
      pos2 = i 

      'If the range is valid then add to the results 
      If pos1 > 0 Then 
       ReDim Preserve ret(retCount) 
       ret(retCount) = Mid(strData, pos1 + 1, pos2 - pos1 - 1) 
       retCount = retCount + 1 
      End If 

     End If 
    Next i 

    'Add any final string 
    ReDim Preserve ret(retCount) 
    ret(retCount) = Mid(strData, pos2 + 1, Len(strData) - pos2) 

    SplitXYZ = ret 


End Function 

使用它很簡單:

Private Sub Test() 

    Dim strData As String 
    Dim xyzData() As String 

    strData = "X0507Y0512Z0413" 
    xyzData = SplitXYZ(strData) 

End Sub 

你怎麼樣那麼使用拆分數組取決於你。另一件事:如果你可以假設你的字符串中的每一段數據的長度是相同的(即前面帶有字母的4位數字),那麼按照長度將字符串拆分可能會更簡單,但是你還沒有指出這是事實,所以我沒有假設它。

+0

這是一種享受,但需要找出一種方法將每個拆分字符串分別放入相應的單元格中,不應太難。有結果時會更新。要感謝Jon Egerton,您的快速回復和洞察力非常有幫助,我讚揚你,謝謝。 – 2013-04-10 14:53:36