我的問題實際上涉及的是對EXCEL VBA Store search results in an array?使用FindNext中填寫多維數組VBA的Excel
這裏安德烈亞斯試圖通過一列搜索和點擊保存到一個數組延伸的問題。我正在嘗試。但不同之處在於:(1)找到一個值(2)我想從(3)單元格中找到與搜索到的值相同的行中的不同值類型,(4)複製到二維數組中。
所以該數組(概念上)看起來像:
Searchresult.1st SameRow.Cell1.Value1 SameRow.Cell2.Value2 SameRow.Cell3.Value3
Searchresult.2nd SameRow.Cell1.Value1 SameRow.Cell2.Value2 SameRow.Cell3.Value3
Searchresult.3rd SameRow.Cell1.Value1 SameRow.Cell2.Value2 SameRow.Cell3.Value3
Etc.
我使用的代碼如下所示:
Sub fillArray()
Dim i As Integer
Dim aCell, bCell As Range
Dim arr As Variant
i = 0
Set aCell = Sheets("Log").UsedRange.Find(What:=("string"), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False)
If Not aCell Is Nothing Then
Set bCell = aCell
ReDim Preserve arr(i, 5)
arr(i, 0) = True 'Boolean
arr(i, 1) = aCell.Value 'String
arr(i, 2) = aCell.Cells.Offset(0, 1).Value
arr(i, 3) = aCell.Cells.Offset(0, 3).Value
arr(i, 4) = aCell.Cells.Offset(0, 4).Value
arr(i, 5) = Year(aCell.Cells.Offset(0, 3).Value)
i = i + 1
Do While exitLoop = False
Set aCell = Sheets("Log").UsedRange.FindNext(after:=aCell)
If Not aCell Is Nothing Then
If aCell.Address = bCell.Address Then Exit Do
'ReDim Preserve arrSwUb(i, 5)
arr(i, 0) = True
arr(i, 1) = aCell.Value
arr(i, 2) = aCell.Cells.Offset(0, 1).Value
arr(i, 3) = aCell.Cells.Offset(0, 3).Value
arr(i, 4) = aCell.Cells.Offset(0, 4).Value
arr(i, 5) = Year(aCell.Cells.Offset(0, 3).Value)
i = i + 1
Else
exitLoop = True
End If
Loop
End If
End Sub
看來出問題的redimming在循環數組。我得到一個下標超出範圍錯誤。我想我不能像現在做的那樣重新設置數組,但我無法弄清楚它應該如何完成。
我對任何線索都很有幫助,因爲我做錯了什麼。
+ 1增加額外的空間;) – 2012-08-15 23:40:14
啊是的,所以這就是如何工作(它確實工作:)!我知道我很近,但我無法到達那裏。這讓我頭腦破裂了2天。我真的很感謝你的幫助。在旁註中,你確定調光是如此嗎?我一直認爲在聲明中用逗號分隔變量使得它們都是相同的類型:http://msdn.microsoft.com/en-us/library/x397t1yt%28v=vs.71%29.aspx – 2012-08-16 09:06:17
@EvertVanSteen高興地幫幫我。我認爲在VB(而不是VBA)中就是這樣。看看我編輯的一段代碼,它會告訴你變量類型是不同的。 – mkingston 2012-08-16 10:56:00