【发布时间】:2016-03-02 14:44:52
【问题描述】:
目前我有一个用户定义的函数,它运行几个涉及矩阵生成的例程。要检查这些矩阵是否已正确生成,我想将它们放在工作表上。用户定义的函数工作正常,我在其中我想找出数组中的内容的地方添加了以下内容:
Call CheckArray(TestArray)
上面的“TestArray”的位置取决于我要查看的数组。
'CheckArray'子程序如下:
Sub CheckArray(MyArray As Variant)
MatrixRows = UBound(MyArray, 1)
MatrixCols = UBound(MyArray, 2)
MsgBox MyArray(11, 2)
MsgBox "Matrix size = " & MatrixRows & " rows x " & MatrixCols & " columns"
ActiveWorkbook.Worksheets("Check array").[A1].Resize(MatrixRows, MatrixCols) = MyArray
End Sub
请注意,我在其中放置了两个 MsgBox 命令以检查 sub 是否被正确调用并且它正在工作,它就是这样。此外,它返回了我请求的特定位置的值,并且还说明了我正在查看的特定矩阵的大小,因此数据似乎确实被正确读取 - 问题在于随后从新子中写入。
当我包含最后一行时,它不会将我的数组打印到工作表中,它还会阻止用户定义的函数正常工作。有谁知道为什么这不起作用?
用户定义的函数是否可以调用打印到工作表的子程序?有没有办法解决这个问题?
【问题讨论】:
-
不,他们不能(除非你想开始搞砸定时器和/或事件)。从单元格调用的 UDF 可以广义地说只能将值返回到那些相同的单元格。但是,您可以将数组输出到即时窗口。
-
感谢您的快速回复。将数组输出到“立即窗口”是什么意思?
-
您好,我已经做了很多 VBA,这应该是可能的。根据您的问题,我无法判断您是否尝试在单元格中使用 VBA 函数,例如在单元格“=CheckArray(TestArray)”中。如果是这样,那么 Rory 是正确的,因为您的结果只会转到您将函数作为公式放置的那个单元格。但是您应该能够通过 VBA 在代码中指定一个范围对象,该对象可以指定将结果发送到您需要的任何工作表上的哪个单元格。
-
嗨,帕卢。我确实在单元格中使用了用户定义的函数。你的意思是我可以使用这个函数来改变一个命名范围,然后用我的矩阵打印那个命名范围吗?我也对如何在即时窗口中查看我的矩阵感兴趣。
-
另外,根据您的代码的最后一行,您似乎正在尝试输出一个二维数组,即矩阵到一个单元格中。您可以将数字或字符串放入单元格,但我怀疑矩阵。您需要遍历矩阵,将矩阵的每个元素放入此处为“A1”的单元格中,复制工作表上的矩阵结构。