2013-08-29 78 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