MS不行了。 现在的高级语言都是通过编译(将高级语言转换为计算机语言)来生成目标程序,然后再执行。 在编译的时候,那个“试验”子过程是作为一个整体编程目标程序的。所以在编译的时候,“试验”子过程已经生成,你之后源码的改变并不能改变编译后的程序。换句话说,你仅仅改变了源代码,却没有改变真正执行的代码,因为真正执行的代码在你改变源代码之前已经生成。 这里有个很奇怪的现象,你可以试试看先进行编译,然后再运行。 先进行编译的话,子程序和主程序同时编译。这个时候你可以看到,始终执行的是Range("D2:D" & R) = "=A2*10000" 照理说直接运行的时候,也会先进行编译,然后再执行。按照这个逻辑,应该始终执行的是Range("D2:D" & R) = "=A2*10000" 但是实际情况,VBA在直接运行的时候,子程序是在第一次运行前编译成目标程序的。编译后的子程序在第二次运行的时候不会再次编译,所以出现了只执行第一次改变后始终执行第一次的语句。 |