【发布时间】:2010-10-25 05:47:23
【问题描述】:
我只是想通过 VBA 函数填充电子表格中的单元格。例如,我想在一个单元格中键入 =FillHere(),结果我将有几个单元格填充一些数据。
我试过这样的功能:
Function FillHere()
Dim rngCaller As Range
Set rngCaller = Application.Caller
rngCaller.Cells(1, 1) = "HELLO"
rngCaller.Cells(1, 2) = "WORLD"
End Function
只要我尝试修改范围,它就会中断。然后我尝试了这个(即使它不是我正在寻找的行为):
Function FillHere()
Dim rngCaller As Range
Cells(1, 1) = "HELLO"
Cells(1, 2) = "WORLD"
End Function
这也不起作用。 但如果我使用 F5 从 VBA 启动此函数,它会起作用! 似乎在调用函数时无法修改电子表格上的任何内容...不过有些库会这样做...
我还尝试(实际上这是我的第一个想法)从函数返回一个数组。问题是我只得到数组中的第一个元素(有一个技巧意味着用左上角的公式选择整个区域+ F2 + CTRL-SHIFT-ENTER,但这意味着用户需要知道通过提前数组的大小)。
我真的被这个问题困住了。我不是最终的最终用户,所以我需要一些非常容易使用的东西,最好不要争论。
PS:很抱歉我已经问过这个问题了,但我当时没有注册,看来我不能再参与其他线程了。
【问题讨论】:
-
您当前的方法假定始终水平选择至少两个单元格。例如,如果垂直选择它们,则该功能将失败。请问你实际上想用这个函数做什么?此信息可能会有所帮助。
-
此函数将返回“未知”大小(行和列)的数据。例如,它可能是一个 SQL 请求,又是一个数据库中的表。它将返回列的名称 + 关联的行。
-
那么基本上,从用户当前所在的单元格开始,你想向下和向左填充一些数据?
-
没错!就像这些库中的任何一个提供从任何类型的来源获取数据的函数一样。
-
只要把它写成一个普通的VBA函数,通过Tools > Macros调用,然后使用Application.ActiveCell来决定把结果放在哪里
标签: arrays excel vba function formula