2013-04-04 51 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