2017-09-19 44 views
0

這個問題似乎多次提出,但是我遇到了一些麻煩。任務在列中給出了一定數量的單元格(假設它是列A),在每個單元格中分割文本(分隔符是空格「」),並將所有獲得的單詞打印在另一列(可以說列C)中。將列中的文本拆分爲單詞並將它們打印在另一列中

讀一些答案後,我寫了下面的代碼:

Sub splitting() 

Dim tmp As Collection 
Dim i As Integer, j As Integer 

For i = 0 To 3 
    tmp.Add split(Cells(i + 1, 1).Value, " ") 
Next i 

For j = 0 To tmp.Count 
    Cells(j + 1, 3).Value = tmp(j) 
Next j 

End Sub 

這裏我用收集來代替陣列有動力清理的能力(每次在一個循環中添加新的項目)。我還假設文本僅在前四行中進行測試。

它給了我一個錯誤

運行時錯誤「91」:對象變量或帶塊變量未設置

我在做什麼錯了,我應該怎麼做的一個合適的方式?

+2

也許你忘了'Set tmp = new collection'? – CommonSense

+0

哪一行給出了錯誤 – jsotola

+0

無論如何,在第二個循環中,您嘗試將數組賦給單元值。你在這裏期待什麼?您需要將數組放在雙單元格範圍內,並首先將「轉置」數組放入垂直維度中! – CommonSense

回答

2

總結在評論中所指出的所有問題,請參見下面的例子:

輸入:

one two three four five 
six seven eight nine 
ten eleven twelve 


Sub splitting() 

    Dim tmp As Collection 
    Dim i As Integer, j As Integer, k As Integer 

    Set tmp = New Collection 

    For i = 1 To 3 
     tmp.Add Split(Cells(i, 1).Value, " ") 
    Next i 

    For j = 1 To tmp.Count 
     For k = 0 To UBound(tmp(j)) 
      Debug.Print tmp(j)(k) 
     Next k 
    Next j 
End Sub 

輸出:

one 
two 
three 
four 
five 
six 
seven 
eight 
nine 
ten 
eleven 
twelve 
-2

您的收藏已宣佈但尚未初始化。嘗試更改爲:

Dim tmp As New Collection 
+0

這稱爲自動實例化,應該避免。該對象並非真正創建,而是在代碼中第一次遇到時創建。 –

+1

[爲什麼'應該避免新]'(https://stackoverflow.com/a/42656772/6634373)。 – CommonSense

相關問題