2013-02-14 119 views
1

我一直在研究这个特定的问题并且显然错过了一些非常简单的事情。我可以尝试创建基于Excel中的动态范围的aray,并使用各个元素与另一个数组进行比较。附加代码的唯一问题是它继续显示空元素。任何指导将不胜感激。 附上我整体代码的一部分。由数组返回的空单元格

Sub Test_Again() 
Dim R As Long 
Dim C As Long 
Dim List() As Variant 
Dim i As Integer 

List = Sheets("Sheet11").Range("A2:A17").Value 

For R = 1 To UBound(List, 1) ' First array dimension is rows. 
    For C = 1 To UBound(List, 2) ' Second array dimension is columns. 
     Debug.Print List(R, C) 
    Next C 
Next R 

ReDim List(UBound(List, 1))  
    Do Until i = UBound(List) 
       If List(i) = Now() Then          
          End If 
       i = i + 1 
    Loop 
End Sub 
+0

请考虑接受解决方案,如果它是值得的。 – 2014-12-01 19:53:39

回答

2

正常Redim将清除你的阵列 - 除非你使用Redim Preserve。但是,根据以下帮助:

如果使用Preserve关键字,则只能调整最后一个数组维度,并且根本不能更改维数。例如,如果数组只有一个维度,则可以调整该维度的大小,因为它是最后一个维度。但是,如果数组具有两个或更多维度,则可以更改仅最后一个维度的大小,并仍保留数组的内容。

因此,在你的情况下Redim不会帮你在这里。如果你想二维阵列转移到一个维数组,你需要做的手动改为:

Sub Test_New() 
    Dim lRow As Long, lCol As Long 
    Dim vListSource() As Variant, vListTarget() As Variant 

    'Assign soure array 
    vListSource = Sheets("Sheet11").Range("A2:A17").Value 

    'Show full content for debug 
    For lRow = LBound(vListSource) To UBound(vListSource) ' First array dimension is rows. 
     For lCol = LBound(vListSource, 2) To LBound(vListSource, 2) ' Second array dimension is columns. 
      Debug.Print vListSource(lRow, lCol) 
     Next lCol 
    Next lRow 

    'Transfer array to one dimension 
    ReDim vListTarget(LBound(vListSource) To UBound(vListSource)) 
    For lRow = LBound(vListSource) To UBound(vListSource) 
     vListTarget(lRow) = vListSource(lRow, LBound(vListSource, 2)) 
    Next lRow 

    'Your check code 
    For lRow = LBound(vListTarget) To UBound(vListTarget) 
     If vListTarget(lRow) = Now() Then 
      'Do something here 
     End If 
    Next lRow 
End Sub 

这将你的范围/阵列的第一行复制到一个维数组,并使用这个进一步处理。

但是,从您的代码和问题来看,我没有看到将其调整到一个维度的优势 - 您可以轻松地将循环做成二维数组 - 只需查看第一列和唯一一列。

+0

谢谢,我已经试过这个,所有它出现RunTime错误,下标超出范围。任何其他想法? – CaryBush 2013-02-14 13:40:15

+0

@CaryBush你想用'ReDim'语句完成什么? YOu没有调整数组大小,所以这似乎是不必要的。 – 2013-02-14 14:28:02

+0

我已经注释掉了redim语句,但我仍然收到超出范围的运行时错误下标..任何其他想法?谢谢 – CaryBush 2013-02-14 14:38:14