我正在开发一个Excel加载项,需要使用服务器中的数据填充工作表中的一个或多个单元格。我做了以下事情:
问题在于,根据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'
仍然 - 获得例外。
任何人都可以帮助解决这个问题吗?
答案 0 :(得分: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 键。如果这样做得当,公式将显示在公式栏的括号中。
注意:强>
在此示例中,内部数组bry()
是二维的。
答案 1 :(得分:2)
让函数返回一个垂直数组。
例如:
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 to array输入公式。
如果您选择的数字超过数组返回,则会出现错误。
或者您可以使用Array返回,使用它来处理错误并正常输入,但每次将它放入单元格时都会运行该函数。
将它放在第一个单元格中:
=IFERROR(INDEX(GetMyData(),ROW(1:1)),"")
然后复制/向下拖动直到你得到空白