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" &amp; lastRow).Formula2 使用工作表的代码(名称)或ThisWorkbook.Worksheets("Sheet1")... 使用Excel 工作表的名称字符串标识符:-)

【讨论】:

你试过我的答案了吗?如果有帮助,请随时将其标记为已接受(接受由答案旁边的彩色复选标记表示) - c.f. "Someone answers" 感谢您对更有效方法的建议。我需要根据您的建议更新我的所有模块以提高性能。不幸的是,这些修改对我目前的问题没有帮助。当应用到具有 VBA 的单元格范围时,该函数不起作用。仍然获得#VALUE!在每个单元格中。

以上是关于Microsoft 的强制隐式交集运算符是不是在 Excel VBA 中消除了我的公式?的主要内容,如果未能解决你的问题,请参考以下文章

隐式转换和强制转换

C++ --- 强制转换运算符

C强制类型转换与隐式转换

可能导致精度或幅度损失的 Java 隐式强制转换? [复制]

如何强制编译器显示隐式构造函数

请问double型可以强制转换成int型吗?