使用来自附加用户定义函数(UDF)的数据填充Excel多个单元格

我正在使用Excel的加载项,需要使用来自服务器的数据填充工作表中的一个或多个单元格。 我做了以下:

  1. 创build一个加载项(xlam)并创build用户定义的函数:GetMyData()
  2. 我从一个简单的Excel工作表调用这个函数。 在A1单元格中,我input了公式= GetMyData()
  3. 我的服务器返回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个项目的数组。

在工作表中使用它有一个小窍门。

selectE1E20 。 然后点击公式栏并input数组公式:

 =cerial(TODAY()) 

在这里输入图像说明

数组公式必须使用Ctrl + Shift + Enterinput,而不仅仅是Enter键。 如果这样做是正确的,公式将显示在括号内的公式栏中。

注意:

在这个例子中,内部数组bry()是二维的。