Excel自定义VBA函数不能自动重算的原因分析与对策

     本人最近用Excel编写了一个自动计算曲线上任意点坐标及方位角的VBA程序,并在某些单元格中引用了VBA中的自定义函数,根据人工录入的曲线起终点参数和变化的拟计算点桩号等信息自动计算坐标X、Y及方位角α。本以为是小菜一碟,却发现该自定义函数并不会自动重算,除非我进入该单元格公式编辑模式再回车一次就重算一次!

     1、于是以为是Excel中自动重算功能没有打开,在选项设置中查看竟然是开着的!

     2、于是又按着网上说的再自定义函数后面紧跟”&T(now())”方式,发现确实可以自动重算,但由于我对方位角单元格的格式进行了特殊处理,如此计算显示的值并非我要的度分秒格式,数值也不对!

     3、终于在网上找到了解决办法:因为我的自定义函数没有包含参数,而是自行读取Excel表中某些单元格的数值然后进行计算。而根据自定义函数的特性,只在函数参数表所对应的单元格的内容发生变化的时候才自动重算,相当于单元格的Change事件。于是,重新修改了自定义函数,让它包含需要求算桩号单元格这个参数,测试后完全有效!对于我的坐标计算函数ksjsx(jszh as double)–快速计算jszh(计算桩号)处的x,将jszh(可根据改变该桩号数据自动计算)对应的单元格(如B20)作为参数录入即可。例如X坐标=ksjsx(B20)