Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 使用外接程序用户定义函数(UDF)中的数据填充Excel多个单元格_Vba_Excel_Ms Office_Office Interop - Fatal编程技术网

Vba 使用外接程序用户定义函数(UDF)中的数据填充Excel多个单元格

Vba 使用外接程序用户定义函数(UDF)中的数据填充Excel多个单元格,vba,excel,ms-office,office-interop,Vba,Excel,Ms Office,Office Interop,我正在使用Excel的外接程序,该外接程序需要使用来自服务器的数据填充工作表中的一个或多个单元格。我做了以下工作: 创建了外接程序xlam并创建了用户定义的函数: GetMyData 我从一个简单的Excel工作表调用此函数。在A1单元格中,我输入了公式=GetMyData 我的服务器返回JSON数组。我能够解析JSON,现在尝试用从服务器获得的值填充A1和下面的行。在本例中,我有20个值,所以我想填充A1:A20单元格。 问题在于,根据Microsoft KB,用户定义的函数只能更改活动单元格

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

创建了外接程序xlam并创建了用户定义的函数: GetMyData 我从一个简单的Excel工作表调用此函数。在A1单元格中,我输入了公式=GetMyData 我的服务器返回JSON数组。我能够解析JSON,现在尝试用从服务器获得的值填充A1和下面的行。在本例中,我有20个值,所以我想填充A1:A20单元格。 问题在于,根据Microsoft KB,用户定义的函数只能更改活动单元格的值。 我还尝试运行下面的代码,只将一个单元格更改为硬编码值:

ActiveWorkbook.Sheets("DataSheet").Cells(1, 1).Value = '12312'
仍然是一个例外


有人能帮忙解决这个问题吗?

下面是一个简单的例子:

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是二维的。

以下是一个简单的示例:

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是二维的。

让函数返回垂直数组

例如:

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键来输入公式

如果选择多于数组返回的值,则会出现错误

或者,您可以使用数组返回来处理错误并正常输入,但每次将其放入单元格时,它都会运行该函数

将其放入第一个单元格:

=IFERROR(INDEX(GetMyData(),ROW(1: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键来输入公式

如果选择多于数组返回的值,则会出现错误

或者,您可以使用数组返回来处理错误并正常输入,但每次将其放入单元格时,它都会运行该函数

将其放入第一个单元格:

=IFERROR(INDEX(GetMyData(),ROW(1:1)),"")
然后复制/向下拖动,直到得到空白


将其更改为sub并通过按钮调用它。让函数返回垂直数组,高亮显示所有单元格,然后将数组一次将公式输入所有单元格。您可以使用下面答案中列出的数组公式,但您需要知道返回项目的最大数量,这样您就可以将公式填充到正确数量的单元格中。如果这在您的情况下不起作用,那么您需要找到一种不同的方法。将其更改为sub并从按钮调用。让函数返回一个垂直数组,高亮显示所有单元格,然后数组将公式一次输入到所有单元格中。您可以使用下面答案中列出的数组公式,但您需要知道返回项目的最大数量,以便将公式填入正确的单元格数量。如果这在你的情况下不起作用,那么你需要找到一种不同的方法。