使用来自加载项用户定义函数 (UDF) 的数据填充 Excel 多个单元格
Posted
技术标签:
【中文标题】使用来自加载项用户定义函数 (UDF) 的数据填充 Excel 多个单元格【英文标题】:Populating Excel multiple cells with data from Add-in user defined function (UDF) 【发布时间】:2017-06-27 17:32:22 【问题描述】:我正在开发一个 Excel 加载项,它需要使用来自服务器的数据填充工作表中的一个或多个单元格。我做了以下操作:
-
创建了一个插件 (xlam) 并创建了用户定义的函数:
GetMyData()
我从一个简单的 Excel 工作表调用此函数。在 A1 单元格中,我输入了公式 =GetMyData()
我的服务器返回 JSON 数组。我能够解析 JSON,现在尝试使用从服务器获得的值填充 A1 和以下行。 (在这种情况下,我有 20 个值,所以我想填充 A1:A20 单元格)。
问题在于,根据 Microsoft KB,用户定义的函数只能更改活动单元格的值。 https://support.microsoft.com/en-us/help/170787/description-of-limitations-of-custom-functions-in-excel 我还尝试运行下面的代码,仅将一个单元格更改为硬编码值:
ActiveWorkbook.Sheets("DataSheet").Cells(1, 1).Value = '12312'
仍然 - 出现异常。
有人可以帮忙解决这个问题吗?
【问题讨论】:
将其更改为 sub 并从按钮调用它。 让函数返回一个垂直数组,突出显示所有单元格,然后数组一次将公式输入到所有单元格中。 您可以使用下面答案中概述的数组公式,但您需要知道返回项目的最大数量是多少,以便您可以将公式填充到正确数量的单元格中.如果这在您的情况下不起作用,那么您需要找到不同的方法。 【参考方案1】:让函数返回一个垂直数组。
例如:
Function GetMyData() As Variant()
Dim test() As Variant
test = Array(1, 2, 3, 4)
GetMyData = Application.Transpose(test)
End Function
然后突出显示您需要的所有单元格,顶部为活动单元格。
然后把这个公式放到公式栏中:
=GetMyData()
然后按 Ctrl-Shift-Enter 而不是 Enter 以数组输入公式。
如果你选择的多于数组返回的值,你会得到错误。
或者你也可以,使用数组返回,用this处理错误,正常进入,但每次放入单元格时都会运行函数。
把它放在第一个单元格中:
=IFERROR(INDEX(GetMyData(),ROW(1:1)),"")
然后复制/向下拖动直到出现空白
【讨论】:
【参考方案2】:这是一个简单的例子:
Public Function cerial(d As Date)
Dim bry(1 To 20, 1 To 1) As String
For i = 1 To 20
bry(i, 1) = CStr(d) & "_" & i
Next i
cerial = bry
End Function
它创建一个包含 20 个项目的数组。
在工作表中使用它有一个小技巧。
选择,比如说,E1 到 E20。然后在编辑栏中点击,输入数组公式:
=cerial(TODAY())
数组公式必须使用 Ctrl + Shift + Enter 而不仅仅是 Enter 键。如果操作正确,公式将显示在公式栏中的括号中。
注意:
在本例中,内部数组bry()
是二维的。
【讨论】:
以上是关于使用来自加载项用户定义函数 (UDF) 的数据填充 Excel 多个单元格的主要内容,如果未能解决你的问题,请参考以下文章