首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

能否让小弟我的自定义函数只计算一次

2012-02-14 
能否让我的自定义函数只计算一次?能否让我的自定义函数只计算一次?我在EXCEL中定义了一个自定义的函数。类

能否让我的自定义函数只计算一次?
能否让我的自定义函数只计算一次?
我在EXCEL中定义了一个自定义的函数。类似如下:

Function   myttt(a,   b)   As   Double

        '类似哈,但是执行比较慢,要10多秒
        myttt   =   a   *   b
End   Function

由于这个文件定义成了自动计算,结果每次打开的时候,EXCEL都会重新调用这个函数,结果造成EXCEL文件打开很慢(要十多分钟)。

因为有很多个单元格都调用了这个函数。嘿嘿。

我想,能否有种方法,让这个函数每个单元格只执行一次就ok了。

也就是说,在我这个函数里面自己判断调用他的单元格,

如果不等于0,就执行,否则就停止执行。

结果经过版主的指点,我知道函数是可以自己被哪个单元格调用的,

方法是调用Application.Caller。

很接近成功了,是不是。可惜,很可惜,问题出现了。

我的代码改成了:

Function   myttt(a,   b)   As   Double

      dim   t

        t=   Application.Caller.value

        '类似哈,但是执行比较慢,要10多秒

      if   t <> 0   then
        myttt   =   a   *   b

      else

        myttt=t           '原值返回,就不慢了

      end   if
End   Function

        结果这个函数一执行就报错。EXCEL说发现有一个循环调用的方法。

我调试还发现,Application.Caller.Text不会报错,但是永远=0。

请问诸位有没有什么好方法哈?或者想法也可以,我来实现。拜求了!!!!


-------------

我的其他尝试:

1、把这个EXCEL改成手工计算,打开变快了。

但是用户编辑的时候,需要自动计算环境。结果一旦把EXCEL改回成自动计算,

EXCEL默认会自动把所有单元格都算一遍,结果,又是等待10多分钟才改得回来。

2、尝试把EXCEL文件设成保护。结果发现即使EXCEL文件设置成保护,在自动计算模式下,

一打开的时候,EXCEL还是会把每个单元格计算一遍。盖滋果然心理**啊。

-------------

当然了,我这个问题也很**。希望有高手支招。谢谢!



[解决办法]
用公式就会导致重新计算,看上去没什么好办法

再给你个折中的方案:
在beforesave事件中扫描所有单元格
把公式的值写入单元格
不足之处就是对固化后的数据做修改可能损害数据一致性

再来一个方案:
采用辅助列做标识位
在最后一列可视数据之后增加一列并设为隐藏

热点排行
Bad Request.