Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 在执行CalculatealRebuild时调用未使用的UDF_Vba_Excel_User Defined Functions - Fatal编程技术网

Vba 在执行CalculatealRebuild时调用未使用的UDF

Vba 在执行CalculatealRebuild时调用未使用的UDF,vba,excel,user-defined-functions,Vba,Excel,User Defined Functions,我在Excel手册中有一些用户定义的函数。我使用了一段时间,但过了一段时间,我从单元格中删除了对这些函数的调用,因为我找到了更好的方法来完成相同的任务(我没有在VBA编辑器中删除函数定义本身)。因此,这些函数不再被调用,无论是在书中还是从任何VBA代码中,我使用搜索来检查它,以100%确定 现在我正在对我的代码做一些回顾,我注意到了一些奇怪的事情:在同一工作簿中的一个子过程中(与这些函数无关),我调用了Application.calculatealRebuild。当这些UDF被调用时,我可以通过

我在Excel手册中有一些用户定义的函数。我使用了一段时间,但过了一段时间,我从单元格中删除了对这些函数的调用,因为我找到了更好的方法来完成相同的任务(我没有在VBA编辑器中删除函数定义本身)。因此,这些函数不再被调用,无论是在书中还是从任何VBA代码中,我使用搜索来检查它,以100%确定

现在我正在对我的代码做一些回顾,我注意到了一些奇怪的事情:在同一工作簿中的一个子过程中(与这些函数无关),我调用了
Application.calculatealRebuild
。当这些UDF被调用时,我可以通过在UDF内设置断点来查看

我想知道为什么会发生这种情况,以及可以做些什么来避免它,因为它不必要地减慢了潜艇的速度


谢谢

系统正常工作。考虑:

Function qwerty() As String
    qwerty = "qwerty"
    MsgBox "XX"
End Function
它是非易失性的,没有参数。它将在输入工作表单元格时计算应用程序。计算可能导致计算一次,但是:


将导致每次运行YTRUQ时重新计算UDF。

应用程序。CalculatealReBuild
的意思是:

CalculatealRebuild
方法类似于重新输入所有公式。。。[运行时]对所有打开的工作簿中的数据进行完整计算,并重建相关性

国家:

使Excel重新生成依赖关系树和计算链

这意味着将重新计算模块代码或工作表代码中的任何自定义项,因为Excel正在重建和测试计算链中的依赖项和使用功能

如果您正在寻找通过
子文件
手动计算工作表中现有公式的方法,您可以使用:


到目前为止,我的方法对UDF中的所有代码都进行了注释,目的有两个:一方面提高速度,另一方面检查是否有任何副作用发生。到目前为止,我还没有观察到任何副作用,因此更重要的是,它们没有在任何地方使用

现在我正在开发的应用程序运行得很好,但出于好奇,我将尝试您提出的解决方案。通过打赌,要么它被用在某个隐蔽的地方,要么就是我的工作簿结构中有一些垃圾没有被清理

谢谢

更新 第二天再次尝试,这些UDF将不再被调用。因此,我不得不假设Excel出现了一些奇怪的情况,当我重新启动它时,它就消失了


无论如何,非常感谢您的应用程序。来电者的事情,我不知道。

很有趣。我不知道为什么会调用UDF,但是你可以通过删除你不再使用的死代码来阻止它的发生。(如果您不想丢失它,请将其注释掉。)我认为部分答案是,这不应该发生,因此您的代码结构中可能出现了一些奇怪的情况。当您点击断点时,您可以尝试查看调用堆栈(在VBA视图菜单下),以提供有关函数调用来自何处的线索向函数添加一行
Debug.Print Application.Caller
。运行完全重新计算时,它会输出什么?重命名函数,看看有什么失败?我注释掉了UDF,这会导致应用程序的执行速度变慢。CalculatealRebuild。我想找不到函数会比计算它们慢。这是不对的:Application.CalculateFullRebuid不会调用未使用的UDF,因为它们不在依赖链中。依赖项链是从工作表公式而不是VBA代码生成的。@CharlesWilliams
CalculatealRebuild
如何调用UDF?最可能的解释是,UDF正在OP尚未找到的公式中使用-可能是隐藏的工作表或定义的名称或条件格式或形状或。。。。这就是为什么Tim Williams建议使用Application.Caller来找出调用它的来源是一种敏感的方法,他说“我从单元格中删除了对这些函数的调用”。如果是这种情况(大If),那么系统将无法正常工作:没有任何工作表引用(或定义的范围、条件格式等)的VBA函数不应该由计算触发。据我所知,就是这种情况。我不记得在连续格式和定义范围中使用过这些自定义项,但我会检查一下。我还将检查隐藏或非常隐藏的表单。任何其他可以隐藏它的地方?@Jordi首先确定UDF在UDF中如何被称为MsgBox TypeName(Application.Caller)。然后查找家长或地址
Sub ytrewq()
    Application.CalculateFullRebuild
End Sub
Application.Calculate 'for all open Sheets
Sheets("Name of Sheet").Calculate 'Specific Sheet
Sheets("Name of Sheet").Range("Name of Range").Calculate 'Specific Range