2013-08-29 168 views
2

我遇到了一個問題,即時通訊相當新的VBA,但學習速度很快。我一直在嘗試糾正下面的代碼,通過一列查看並挑出列中所有可能的數據行,以便在另一位代碼中使用。我不能讓數組工作,我可能會做錯了。 如果它不清楚,它應該檢查列I中的一個單元格的值,如果它是一個值(如果它沒有被存儲(代碼顯示,但尚未使用)),然後將值存儲在數組中數組中的位置和列向下的位置遞增。Excel VBA:不能添加到數組?

另一個問題,我還沒有看,然後是如何安排在名稱等數組中的值?在這種情況下,這些值將是AHU1,AHU2,AHU3等高達約AHU5或6,我還打算實施一些代碼,如果necassery會擴展數組(從較小,因此它不會大於它所需的數量)

編輯:另外一個問題我havnt尚未制定出就是爲什麼如果語句總是導致要添加到陣列中的值(它不)

Do 
    If IsNull(V1.Range("I" & i)) = False Then 'And V1.Range("I" & i).Value <> (Val(AHUArray(1)) Or Val(AHUArray(2)) Or Val(AHUArray(3)) Or Val(AHUArray(4)) Or Val(AHUArray(5)) Or Val(AHUArray(6)) Or Val(AHUArray(7)) Or Val(AHUArray(8)) Or Val(AHUArray(9)) Or Val(AHUArray(10))) Then 'And (does not equal any other values in the array 
      AHUArray(ArrayDim) = V1.Range("I" & i).Text 
      i = i + 1 
      ArrayDim = ArrayDim + 1 
     Else 
      i = i + 1 
     End If 
Loop While i <= LastRow 

任何想法?幫助將不勝感激!

這些是在此之前的代碼包住它的一個probloem這些定義(因爲它已經過去,但我不認爲這是什麼?

Dim V1 As Worksheet 
Dim LastRow As Long 
Dim C As Range 
Dim FirstAddress As String 
Dim AHUArray(1 To 10) As String 
Dim DestCell As Integer 
Dim i As Integer 
Dim ArrayDim As Integer 



Set V1 = ThisWorkbook.Sheets("V1") 
Set AHU = ThisWorkbook.Sheets("AHU") 

LastRow = V1.Range("A:A").Find("*", V1.Range("A1"), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
DestCell = 3 
ArrayDim = 1 
i = 3 

回答

1

變化

IsNull(V1.Range("I" & i)) = False 

V1.range("I" & i).value <> "" 

當你使用IsNull這樣你總是會變成true,因爲becau你是問,「這個範圍值,我剛剛創建和定義爲空?」

關於動態增長數組,請參閱this answer有關如何這樣做的示例。

+0

謝謝,認識到這一點我去爲一個IsEmpty和一個另外的函數。我的解決方案被添加爲另一個答案。 –

+0

感謝您的幫助:D –

0

最後,這是我如何管理它。使用ISNULL是愚蠢的實現,管理使用的回報如何UBound函數-1它沒有找到參選

Do 
     If IsEmpty(V1.Range("I" & i)) = False And IsInArray(V1.Range("I" & i).Value, AHUArray) = False Then '(does not equal any other values in the array 
      AHUArray(ArrayDim) = V1.Range("I" & i).Value 
      i = i + 1 
      ArrayDim = ArrayDim + 1 
     Else 
      i = i + 1 
     End If 
Loop While i <= LastRow 

作出檢查功能,這是其他檢查功能

Function ArrayCountIs(ArrayToCount As Variant) As Integer 

Dim i As Integer 
Dim ArrayCount As Integer 
ArrayCount = 0 
i = 0 
For i = LBound(ArrayToCount) To UBound(ArrayToCount) 
    If Not (ArrayToCount(i)) = "" Then 
     ArrayCount = ArrayCount + 1 
    End If 
Next 

ArrayCountIs = ArrayCount 

End Function