[英]Populating Excel multiple cells with data from Add-in user defined function (UDF)
我正在开发一个Excel加载项,该加载项需要使用服务器中的数据填充工作表中的一个或多个单元格。 我做了以下事情:
问题是根据Microsoft KB,用户定义的功能只能更改活动单元格的值。 https://support.microsoft.com/zh-cn/help/170787/description-of-limitations-of-custom-functions-in-excel我也尝试运行下面的代码,该代码仅将一个单元格更改为硬编码值:
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()
是二维的。
让函数返回一个垂直数组。
例如:
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即可输入公式。
如果选择的数组多于返回的数组,则会出错。
或者,您可以使用Array返回,使用它来处理错误并正常输入,但是每次将其放入单元格时它都会运行该函数。
将其放在第一个单元格中:
=IFERROR(INDEX(GetMyData(),ROW(1:1)),"")
然后复制/向下拖动直到出现空白
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.