Microsoft 的强制隐式交集运算符是不是在 Excel VBA 中消除了我的公式?
Posted
技术标签:
【中文标题】Microsoft 的强制隐式交集运算符是不是在 Excel VBA 中消除了我的公式?【英文标题】:Is Microsoft's forced implicit intersection operator neutering my formula in Excel VBA?Microsoft 的强制隐式交集运算符是否在 Excel VBA 中消除了我的公式? 【发布时间】:2021-01-08 17:52:11 【问题描述】:我使用公式根据“C”列中的值缩进“D”列中的文本,并一直在 VBA 中使用它来格式化工作表。它看起来像这样:=setindent(D2,C2)。直到最近,它运行良好,但现在却不行。看起来微软已经开始将“隐式交集运算符”强制添加到公式中(添加@:=@setindent(D2,C2)。它似乎已经在返回“#Value!”的地方取消了我的公式。如果我打开其中一个带有公式的单元格处于编辑模式,然后按“Enter”,它会变为数字,公式适用于目标单元格文本。如何在 VBA 中解决这个问题?
公式如下:
Function SetIndent(z As Range, ByVal Level As Long) As Variant
Dim celldent As Range
SetIndent = IIf(Level < 0, "Min is 0!", IIf(Level > 10, "Max is 10!", Level))
If Level < 0 Then Level = 0 Else If Level > 10 Then Level = 10
For Each celldent In z
With celldent
If Level - .IndentLevel Then .InsertIndent Level - .IndentLevel
End With
Next celldent
End Function
。 . .这是复制公式的VBA
'Format the Name (Column D) to indent per the Outline Level value in Column C
'See Module 16 for the Function: SetIndent
Range("AB2").Select
ActiveCell.Formula = "=SetIndent(D2,C2)"
Range("AB2").Copy Range("$AB$3:AB" & lastRow)
' Range("$AB2:AB" & lastRow).Clear
谢谢,
提姆
【问题讨论】:
或许可以试试Formula2
仅供参考,请参阅 How to add dynamic array formula 的 隐式交集运算符的帖子
TM 和 Rory,感谢您指出 Formula2 选项和有关 IIO 的信息。我尝试了 Formula2,但仍然得到相同的结果:#VALUE!直到我编辑单元格。公式在我手动复制粘贴时有效,所以我不知道当相同的VBA操作不起作用时会发生什么。?
【参考方案1】:
尝试使用.Formula2
而不是.Formula
将公式直接输入到整个范围内
Range("AB2:AB" & lastRow).Formula2 = "=SetIndent(D2,C2)"
因此您也可以避免不必要的选择/激活。
此外,我建议您完全限定您的范围参考,例如通过Sheet1.Range("AB2:AB" & lastRow).Formula2
使用工作表的代码(名称)或ThisWorkbook.Worksheets("Sheet1")...
使用Excel 工作表的名称字符串标识符:-)
【讨论】:
你试过我的答案了吗?如果有帮助,请随时将其标记为已接受(接受由答案旁边的彩色复选标记表示) - c.f. "Someone answers" 感谢您对更有效方法的建议。我需要根据您的建议更新我的所有模块以提高性能。不幸的是,这些修改对我目前的问题没有帮助。当应用到具有 VBA 的单元格范围时,该函数不起作用。仍然获得#VALUE!在每个单元格中。以上是关于Microsoft 的强制隐式交集运算符是不是在 Excel VBA 中消除了我的公式?的主要内容,如果未能解决你的问题,请参考以下文章