如果在Excel工作表中插入行/列,则禁止更新VBA UDF

fjnneemd  于 2022-11-26  发布在  其他
关注(0)|答案(2)|浏览(225)

我定义了一个函数,例如:

Public Function calc_x(ByVal x As Integer)

...do some stuff

calc_x = x+x

End Function

此函数在Excel工作表中从单元格(比如说A2)调用,其中“指针”指向包含值20的A1:

content cell A1: "20"

content cell A2: "=calc_c(A1)"

然而,每次我在Excel中插入新的行或列(甚至在行A或列2之后),函数都会被重新计算。有什么方法可以防止这种情况发生吗?

pftdvrlh

pftdvrlh1#

可以使用Application.Caller.Text *(1)引用单元格的原始输出。
接下来,您可以将布尔值“On/Off Switch Cell”放在某个位置。
UDF逻辑如下所示:如果布尔单元格的值为TRUE,则执行计算,否则输出CallerCell文本
下面的例子是工程和大致最简单的形式。

Function Test_Not_Calc(x, y, b)
    Application.Volatile
    If b.Value = True Then
        Test_Not_Calc = x * y
    Else
        Test_Not_Calc = Application.Caller.Text
    End If
End Function

*Reference(1) - S/O - excel vba preserve original value if UDF formula fails

4xrmg8kj

4xrmg8kj2#

在[公式]功能区中,您可以将计算选项设定为手动。
您可以在VBA中使用Application.Calculation = xlManual进行设定。
这将使公式无法计算工作表中的每一个新添加项。

相关问题