【发布时间】:2015-07-08 19:02:28
【问题描述】:
我有一个数据库应用程序,它通过 UDF 将数据存储在数组公式中。
我想要一个宏,它通过工作表/wbook 并通过用给定单元格中的当前值替换 udf 数组公式来中断所有外部链接。
挑战在于不能单独写入给定数组公式中的单元格。例如,像下面这样的宏将导致整个数组在第一次写入时被破坏。
Public Sub breaklink()
Dim c
For Each c In ActiveSheet.Cells.SpecialCells(xlCellTypeFormulas)
Debug.Print c.FormulaArray
If InStr(c.FormulaArray, "MYFORMULA(") Then
Stop
c.FormulaArray = c.Value
'c.Value = c.Value --THIS THROWS ERROR 1004 (Can't edit part of an array)
Stop
End If
Next
End Sub
如果有像c.getArrayFormulaRange 这样的单元格方法,那么我可以使用它来创建一个值数组,然后改写数组公式。
可以想象,我可以遍历相邻单元格以尝试找到每个数组的边界,但这似乎很麻烦(另外,我会更改循环期间循环的范围,这可能会引发问题)。是否有任何方法或对象属性可以帮助我识别给定数组公式所占据的整个范围?
【问题讨论】:
-
c.CurrentArray将返回FormulaArray中的Range,如果c中有一个。您可以使用c.HasArray检查c中是否存在数组。如果有,它将返回True。 -
顺便说一句,您应该将
c调暗为Range以访问适用于它的方法和属性列表。 -
这是完美的。谢谢!
标签: excel array-formulas vba