z******a 发帖数: 363 | 1 版上搞金融的多,vba高手也不少,所以就在这里问了
想要监测一个range里的所有cell的value是不是有变化
但是这些cell里写的都是函数,都是=if(...,...,...)的形式
如果另外一块range的数值发生了变化,这块range才会有可能变化
而另一块range的接受实时数据的
用了vba里的change event,没有什么作用,如果在range里发生的数值的变化,而if函
数本身没
有变化,change event就被默认不会发生
想问一下有什么办法可以检测到数值本身的变化的吗啊?
谢谢啦~ |
b******n 发帖数: 370 | 2 这样的event 可能没有。
你可以不要写if function.
instead, 你用sub 替代 function 往cell里面写。
就是在sub里面计算,然后 update cell的数据。
【在 z******a 的大作中提到】 : 版上搞金融的多,vba高手也不少,所以就在这里问了 : 想要监测一个range里的所有cell的value是不是有变化 : 但是这些cell里写的都是函数,都是=if(...,...,...)的形式 : 如果另外一块range的数值发生了变化,这块range才会有可能变化 : 而另一块range的接受实时数据的 : 用了vba里的change event,没有什么作用,如果在range里发生的数值的变化,而if函 : 数本身没 : 有变化,change event就被默认不会发生 : 想问一下有什么办法可以检测到数值本身的变化的吗啊? : 谢谢啦~
|
z******a 发帖数: 363 | 3 我不知道什么时候数据会发生变化
用sub的话得间隔多久运行一次sub呢
而且我有将近一万个cell
运行一次可能占用资源太多了
【在 b******n 的大作中提到】 : 这样的event 可能没有。 : 你可以不要写if function. : instead, 你用sub 替代 function 往cell里面写。 : 就是在sub里面计算,然后 update cell的数据。
|
b******n 发帖数: 370 | 4 这个方法的问题是可能效率慢点。
其实是用两次 cell change event
大体三个过程。
第一,range 1获取实时数据。
第二,当range 1获取 实时数据后,根据新数据的变化,运行sub, update range 2里
面的数据。这是第一次利用cell change event. 也就是说,你把range 2里面的if
function, 用sub来实现了。在 range 2里面存的不再是公式,而是计算后的数据。这
样就可以利用下面的cell change event了。
第三,当你的sub update range 2后,如果数据改变,cell change event会再次被激
发。你就可以根据变化做其后处理。
【在 z******a 的大作中提到】 : 我不知道什么时候数据会发生变化 : 用sub的话得间隔多久运行一次sub呢 : 而且我有将近一万个cell : 运行一次可能占用资源太多了
|
z******a 发帖数: 363 | 5 在你说的第二个过程里,我的range1里的数据是通过一个外源数据库形成的array获取的
range1里的cell里也是一个函数,并不是hard copy的数据
你怎么才能触发vba运行sub呢?
【在 b******n 的大作中提到】 : 这个方法的问题是可能效率慢点。 : 其实是用两次 cell change event : 大体三个过程。 : 第一,range 1获取实时数据。 : 第二,当range 1获取 实时数据后,根据新数据的变化,运行sub, update range 2里 : 面的数据。这是第一次利用cell change event. 也就是说,你把range 2里面的if : function, 用sub来实现了。在 range 2里面存的不再是公式,而是计算后的数据。这 : 样就可以利用下面的cell change event了。 : 第三,当你的sub update range 2后,如果数据改变,cell change event会再次被激 : 发。你就可以根据变化做其后处理。
|
b******n 发帖数: 370 | 6 你能不能改 产生 range 1 数据的那个函数?
不是很清楚,你这个实时获取数据过程是具体如何实现的。
我觉得就得在这个部分做改动才行。
取的
【在 z******a 的大作中提到】 : 在你说的第二个过程里,我的range1里的数据是通过一个外源数据库形成的array获取的 : range1里的cell里也是一个函数,并不是hard copy的数据 : 你怎么才能触发vba运行sub呢?
|
z******a 发帖数: 363 | 7 通过另一个软件导入excel这些实时数据
所以range1里显示出来的都是一些类似于bloomberg导入excel时所显示出的函数
【在 b******n 的大作中提到】 : 你能不能改 产生 range 1 数据的那个函数? : 不是很清楚,你这个实时获取数据过程是具体如何实现的。 : 我觉得就得在这个部分做改动才行。 : : 取的
|
b******n 发帖数: 370 | 8 所以是这些函数定时update 数据?
还是你有其他timer控制什么时间update?
【在 z******a 的大作中提到】 : 通过另一个软件导入excel这些实时数据 : 所以range1里显示出来的都是一些类似于bloomberg导入excel时所显示出的函数
|
z******a 发帖数: 363 | 9 我没有没有定义函数控制时间update数据
也许软件有一些控制时间update的机制,但我不是很清楚
【在 b******n 的大作中提到】 : 所以是这些函数定时update 数据? : 还是你有其他timer控制什么时间update?
|
b******n 发帖数: 370 | 10 那这条路就行不通了。
你range 2数据改变后,你要做什么操作?
【在 z******a 的大作中提到】 : 我没有没有定义函数控制时间update数据 : 也许软件有一些控制时间update的机制,但我不是很清楚
|
z******a 发帖数: 363 | 11 我查了下,似乎可以用calculate event
你知道calculate event怎么能判断出哪个cell被calculated了吗?
【在 b******n 的大作中提到】 : 那这条路就行不通了。 : 你range 2数据改变后,你要做什么操作?
|
b******n 发帖数: 370 | 12 calculate event 没有办法去单独判断哪个cell触发了这个event
解决办法是做if 判断。不过你有1万个cell,可能会很花时间。
定义一个全程变量,存储all old value
然后在calculate event里面对每个cell,和他的old value做判断
如果不一样,说明他改变了。进行操作,操作后用新value 覆盖旧value.
【在 z******a 的大作中提到】 : 我查了下,似乎可以用calculate event : 你知道calculate event怎么能判断出哪个cell被calculated了吗?
|
z******a 发帖数: 363 | 13 嗯,问题已解决,用了跟你说的类似的办法
非常感谢!!!!!!!! |