2016-11-04 51 views
1

我想从一个单元格解析一个字符串到一个数组以分离数据并将其放入另一个工作表中。通过在范围值上使用分割来分配数组时出错

我一直收到无法分配到阵列错误,我不知道我在做什么错。我确信数据类型是正确的,甚至确保阵列上有足够的空间。

这里是我的代码:

Private Sub Enter2_Click() 
'Define Variables 
Dim MatchRow As Integer 
Dim data(7) As String 
Dim row As Integer 
Dim col As Integer 
Dim dataInfo As String 

Worksheets("Sheet1").Activate 
'Match Name To A Row 
MatchRow = WorksheetFunction.Match(RName.Value, Range("A1:A100"), 0) 
MsgBox MatchRow 
'call report 
Cells(MatchRow, 3).Select 
data() = Split(ActiveCell.Value, ".", 1) 'This is where the error comes from 
MsgBox data(0) 
Worksheets("Repoting template").Cells(20, 1).Select 
+0

u必须将其声明为变的,不需要指定因为尺寸你正在使用'split',也就是'dim data as variant',然后'data = split(activecell.value,“。”)' – Rosetta

+0

现在说s类型不匹配。 –

+0

限制默认为'-1',它是'-1'但不是'1'。 – Rosetta

回答

4

更改此:
data() = Split(ActiveCell.Value, ".", 1)

这样:
data() = Split(ActiveCell.Value, ".")

例子:
enter image description here

+0

谢谢。在将类型更改回数组的字符串并将其取出后,它就可以工作了! –

+0

我更喜欢'Debug.Print Join(Data,VbCrLf)'或'Debug.Print Join(Data,“,”)'' – 2016-11-04 07:57:14

3

如果你有这样的样本数据:

enter image description here

你可以试试这个代码:

Option Explicit 

Sub Test() 

    Dim rng As Range 
    Dim data() As String 

    Set rng = ThisWorkbook.Worksheets("Sheet1").Range("A1") 
    data = Split(rng.Value, ".", -1, vbBinaryCompare) 

    Dim i As Integer 
    For i = LBound(data) To UBound(data) 
     Debug.Print data(i) 
    Next i 


End Sub 

这样做具有以下输出:

A 
B 
C 
D 
E 
F 
G 
+1

用于更多控制的全面解决方案,但是如果您不需要这种控制,您也可以填充该数组而不必迭代它。 – Vegard

+0

@Vegard - 代码使用Split功能填充数组。迭代只是产生一个调试,以显示“分裂”工作:)我们的答案基本上是相同的 –

+0

哦,确实...我读得太快了,我以为迭代是填充阵列,每个MSDN如何显示它。 – Vegard