+ -
当前位置:首页 → 问答吧 → 运行vba过程时为什么没有调用的函数会自己运行

运行vba过程时为什么没有调用的函数会自己运行

时间:2011-08-12

来源:互联网

我在分步运行vba过程时,却发现跳到了函数过程中运行,而不止运行一个函数过程,但我却没有调用函数过程,为什么会自己运行函数过程?
我在运行vba其他过程中也常发现这个问题,但始终找不到原因。请位老师指点一下,多谢了。

作者: tnzmjt   发布时间: 2011-08-12

很简单,只要你在表中使用了自定义函数,
那么在执行其它宏的过程中,这些个自定义函数都会各自独立运算一次。


解决方法是:
在调试vba过程中,把不需要参与计算的自定义函数先停用。


另外,如果你设置了断点来调试,那么就无所谓了。
让它们正常运行好了。

作者: 香川群子   发布时间: 2011-08-12

哦,原来这样啊,那再请问老师,如何在调试vba过程中,把不需要参与计算的自定义函数停用?

作者: tnzmjt   发布时间: 2011-08-12

哦,知道了,把表中调用函数的公式取消。谢谢香川群子对我的帮助。

作者: tnzmjt   发布时间: 2011-08-12

引用:
原帖由 tnzmjt 于 2011-8-12 11:03 发表
哦,原来这样啊,那再请问老师,如何在调试vba过程中,把不需要参与计算的自定义函数停用?
取消工作表中的公式,或者把这些公式改为文字列,是一种方法。

例如:=zdy(a)
前面加逗号改为  '=zdy(a)
前面加空格改为  【 =zdy(a)】

但这样做很麻烦,以后还要一个一个改回去……
容易错漏。


…………
因此,可以在vba代码中停用:

例如:
Function Nrows(m)
       Nrows = Range((m), (m)).MergeArea.Rows.Count
End Function

其中加一句停用的代码:

Function Nrows(m)
       Exit Function      
       Nrows = Range((m), (m)).MergeArea.Rows.Count
End Function


调试完成后,把这一句代码注释掉(即前面加个逗号【'】)就OK啦。
Function Nrows(m)
       'Exit Function      
       Nrows = Range((m), (m)).MergeArea.Rows.Count
End Function

作者: 香川群子   发布时间: 2011-08-12

谢谢香川群子老师,这种方法不错,用后麻烦少多了,非常感谢。

作者: tnzmjt   发布时间: 2011-08-12