1
2
即时窗口和正常代码运行之间的唯一区别是作用域。 即时窗口中的代码在当前应用程序范围内运行。 如果当前没有运行任何内容,则表示全局范围。 放入vba函数时的代码仅限于函数作用域。 所以我猜你的一个变量超出了范围。 我会在那一行的函数中设置一个断点,并添加监视点,以找出未设置的变量。 如果在vba代码模块的顶部没有option explicit,则应该添加它。 |
2
2
您没有分配函数名,因此该函数将始终返回零(如果您期望的是long)。看来你应该
在你的功能结束时。 |
3
1
我不知道你是否还在看这个,但我会这样写的:
|
4
0
我无法用excel 2007重现这个问题。 这就是我使用的代码:
听起来可能很愚蠢,但您确定match函数的所有参数在宏和即时窗口中都是相同的吗?可能范围对象已更改? |
5
0
谢谢你们的回答-我应该在打电话的方式上说得更具体一点:
奇怪的是,我把这两个参数传递到函数中,所以我看不出函数内外有什么不同。也就是说,我仍然完全不知道这是什么原因造成的,特别是因为这是一个非常间歇性的问题 有没有简单的方法可以比较函数上下文中的range对象和直接窗口上下文中的range对象,并判断它们是否不同?考虑到这个范围是一个引用类型,我觉得我应该能够比较两个指针,但我不知道如何在vba中做到这一点! 顺便说一句,我正在使用excel 2007,不过我不确定这是否有什么区别。 |
6
0
正如will在上面提到的,这显然是一个范围问题。或是一只隐秘的虫子。 我会尽量利用 调试打印 陈述,还有观察,看它们是否匹配,然后从那里拿出来。 |