Microsoft的强制隐式交叉运算符是否在Excel VBA中取消了我的公式?

问题描述

我正在使用一个公式根据“ C”列中的值缩进“ D”列中的文本,并且已经在VBA中使用它来格式化工作表。看起来像这样:= setindent(D2,C2)。直到最近,它仍然运作良好,但现在却没有。似乎Microsoft已开始将“隐式交集运算符”强制放入公式中(添加@:= @ 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而不是.Formula

直接将公式 输入整个范围
        Range("AB2:AB" & lastRow).Formula2 = "=SetIndent(D2,C2)"

因此,您也可以避免不必要的选择/激活。

此外,我建议您完全限定范围参考,例如通过Sheet1.Range("AB2:AB" & lastRow).Formula2使用工作表的代码(名称)或ThisWorkbook.Worksheets("Sheet1")...使用Excel工作表的名称字符串识别符:-)