Excel-VBA:如何在vba代码中获取所选数组的大小?

时间:2012-08-19 16:41:31

标签: excel-vba excel-vba-mac vba excel

我正在excel中编写一个vba函数,它接收一个奇数大小的空方阵并用数字填充它。但是,在调用函数之前,我无法检索它在电子表格中动态选择的数组的大小。我该怎么做?

谢谢!

1 个答案:

答案 0 :(得分:7)

将Range对象传递给您的函数并查看值:

Public Function WhatIsTheMatrix(SourceRange as Excel.Range) As Variant

   Dim arrSource as Variant
   Dim arrOutPut as Variant

   Dim i As Long, j As Long

   arrSource = SourceRange.Value2

   i = Ubound(arrSource, 1)
   j = Ubound(arrSource, 2)

   ' The lower bounds of an array obtained from a range are always 1

   ' code
   ' more code
   ' even more code

   WhatIsTheMatrix = arrOutPut 

End Function

现在你有两个问题:

  1. 您的原始问题,通过检查i和j来解决

  2. 一种特殊情况,其中单格范围的值不是数组变体

  3. 所以你需要这个:

    If SourceRange.Cells.Count = 1 Then
       Redim arrSource(1 to 1, 1 To 1)
       arrSource(1,1) = SourceRange.Value2
    Else
       arrSource = SourceRange.Value2
    End If
    

    任何其他业务:

    有一个未被承认的假设,即:您认为可以传入当前的Application.Selection,它将始终是一个范围。它也可以是一个控件,一个图表,或一个图表系列......

    ...不,你不能依赖于这会引起类型不匹配的运行时错误。是的,你已经调用了Option Explicit,是的,你键入了SourceRange as Excel.Range,你的母亲,你的教区牧师和一位和平大法官看着你这样做了;在午夜之后尝试在一块看起来阴险的岩石上牺牲一些东西,也许 VBA运行时会相信你。

    所以你也需要这个:

    If Not TypeOf SourceRange Is Excel.Range Then
       ' Raise an error or Exit Sub
    End If
    

    认为这就是所有的惊喜。除非你遇到异国情调和尴尬的问题,比如“这个范围是否计算好了?”