VB – 将串行数据分割并分别存入Excel

我有一个forms为“X0507Y0512Z0413”的数据串。 我使用VB从pic微控制器读取数据,并使用在web上发现的VB脚本将数据加载到excel中。 我可以在上面的表单中将第一行数据放到电子表格的第一个单元格中。 不过,我希望将这个string分成三列X,Y和Z,并从每个variables的开始处放下字母。 它也必须每次读取长达20秒的数据,所以每个值都需要被附加到前一个。 这是我的VB脚本到目前为止,我已经尝试了Split()命令并收到错误13types不匹配。

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 

我是一个总新手,所以这可能是一个相当简单的修复,所以如果看起来微不足道的道歉。 任何build议将是伟大的。

SJ

PS

如果每个variables都用逗号分隔,会变得简单吗?

第一个问题是xyzData被设置为一个string。 当你从一个Split填充它时,你需要一个数组:

 Dim xyzData() as String 

我想不出一个简单的方法来分割VBA,因为每次都是由不同的angular色分割 – 它需要一个定制的函数来处理它。 下面的作品 – 我的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 

你如何使用拆分数组取决于你。

还有一件事:如果你可以假设你的string中的每一段数据长度都是相同的(例如4位数字和前面的字母),那么按照长度分割string可能会更简单,但是你没有指定这是这种情况,所以我没有承担。