使用来自附加用户定义函数(UDF)的数据填充Excel多个单元格
我正在使用Excel的加载项,需要使用来自服务器的数据填充工作表中的一个或多个单元格。 我做了以下:
- 创build一个加载项(xlam)并创build用户定义的函数:GetMyData()
- 我从一个简单的Excel工作表调用这个函数。 在A1单元格中,我input了公式= GetMyData()
- 我的服务器返回JSON数组。 我能够parsingJSON,现在试图用我从服务器获得的值来填充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'
仍然 – 获得例外。
有没有人可以协助解决这个问题?
让函数返回一个垂直数组。
例如:
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来input公式。
如果你select的不止是数组返回,你会得到错误。
或者,您可以使用Array返回值来处理错误并正常input,但每次将其放入单元格时都会运行该函数。
把这个放在第一个单元格中:
=IFERROR(INDEX(GetMyData(),ROW(1:1)),"")
然后复制/拖动,直到空白
这是一个简单的例子:
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
它创build了20个项目的数组。
在工作表中使用它有一个小窍门。
selectE1至E20 。 然后点击公式栏并input数组公式:
=cerial(TODAY())
数组公式必须使用Ctrl + Shift + Enterinput,而不仅仅是Enter键。 如果这样做是正确的,公式将显示在括号内的公式栏中。
注意:
在这个例子中,内部数组bry()
是二维的。