2016-11-04 47 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