2011-10-25 91 views
0

有两个问题,首先可以提醒我如何在分配多维数组时分配它?我总是用for循环做,并且如何静态做它似乎逃脱我?单元格验证和数组

但我真正想要做的是使用数组来验证单元格内容。然而在下面的例子中,我只想使用第二维中的第一个元素。


0,0
1,0
2,0
3,0
4,0

有什么办法来更新。新增类型:= xlValidateList,一级方程式: =加入(ary,“,”)行,所以它只能从5乘4阵列返回这5个值?

Cheeers

亚伦

Sub test() 


Dim ary As Variant 
ReDim ary(5,4) 


ary = Array("Value1", "Value2", "Value3", "test", "test2", "test3", "test4") 

With ActiveSheet.Cells(1, 1).Validation 
    .Delete 
    .Add Type:=xlValidateList, Formula1:=Join(ary, ",") 
    .IgnoreBlank = False 
    .InCellDropdown = True 
    .InputTitle = "" 
    .ErrorTitle = "" 
    .InputMessage = "" 
    .ErrorMessage = "" 
    .ShowInput = True 
    .ShowError = True 
End With 
End Sub 
+0

为什么你在这里编辑一个多维数组?如果你真的从一个范围内填充它,那么你可以给范围一个名字,然后在验证中使用这个名字。 –

+0

该数组保存folling格式的数据0,0 =描述,0,1 =开始发布,0,2 =结束发​​布。我只希望在描述中验证单元格。 actulay数组在运行时被填充。并且尺寸是x乘以3。我知道我可以把描述放到一个单独的数组中,但是这似乎iniffecnet – DevilWAH

回答

2

2D阵列〜1D的尺寸调整为快速

下面的代码填充的5张×4阵列的采样数据,那么第二环路仅提取使用与您的初始阵列相同的行长度的新一维阵列的第一维

Sub test() 

    Dim ary As Variant 
    Dim X As Variant 
    Dim lngRow As Long 
    Dim lngCol As Long 

    ReDim ary(1 To 5, 1 To 4) 
    ReDim X(1 To UBound(ary, 1)) 

    For lngRow = 1 To UBound(ary, 1) 
     For lngCol = 1 To UBound(ary, 2) 
      ary(lngRow, lngCol) = "I am row " & lngRow & " and dimension " & lngCol 
     Next 
    Next 

    For lngRow = 1 To UBound(ary, 1) 
    X(lngRow) = ary(lngRow, 1) 
    Next 

    With ActiveSheet.Cells(1, 1).Validation 
     .Delete 
     .Add Type:=xlValidateList, Formula1:=Join(X, ",") 
     .IgnoreBlank = False 
     .InCellDropdown = True 
     .ShowInput = True 
     .ShowError = True 
    End With 
End Sub 
+0

正如我所说我没有任何问题引用到1d数组,我想知道是否可以通过执行此步骤来达到上述目的。 – DevilWAH

+0

我不这么认为,我从来没有见过2D到1D方法的快捷方式。这就是说循环数组在时间上非常有效,即使它感觉像是低效的编码。我认为我上面的方法可能有一定的用途,取决于你现有的风格,如果不是很好,可以忽略它。干杯。 – brettdj

+0

我会鞠躬致敬,我非常震惊地发现,你不能简单地从数组中抽出单行/列的值。即锁定所有的维度aprat从一个。我认为这是你在网络中做的很多事情,用口罩来限制什么可以改变,哪些不能改变。在你的代码中有许多帮助的是在多维数组上使用UBound。由于这是有点我需要使用:)感谢您的帮助和意见。 – DevilWAH