3

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

谢谢!

4

1 回答 1

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. 一种特殊情况,其中单个单元格区域的值不是数组变体

所以你需要这个:

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

这就是所有的惊喜。除非你喜欢奇特的东西和诸如“这个范围是计算出来的吗?”之类的尴尬问题。

于 2012-08-20T17:29:28.643 回答