问题描述
我正在使用一个公式根据“ 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工作表的名称字符串识别符:-)