Application.Evaluate 与 Activesheet.Evaluate

xyz*_*xyz 5 excel vba

我正在阅读此线程 自定义查找功能 ,这是说明

Interesting result. Note that Evaluate is same as Application.Evaluate and takes roughly twice as long as Activesheet.Evaluate – chris neilsen

应该总是使用Activesheet.Evaluate代替Application.Evaluate吗?

谢谢

Dou*_*ncy 4

我不知道你是否应该这样做,但看起来你可以。例如,这些都有效:

Activesheet.Evaluate("2")

Activesheet.Evaluate("Sheet1!A1+Sheet2!A1")

Activesheet.Evaluate("SUM([Book1]Sheet1!A1,[Book1]Sheet2!A1,[Book2]Sheet1!A1,[Book2]Sheet2!A1)")
Run Code Online (Sandbox Code Playgroud)

第一种情况与工作表无关,它在“立即”窗口中返回正确的结果。

第二个引用两张表并且也返回正确的结果。第三个也是如此,它指的是两本不同的工作簿。

明显的警告是始终完全限定任何工作表或工作簿引用。

  • @DougGlancy 基于 Charles 的研究,看起来确实如此(但“Worksheet.Evaluate”不一定是“ActiveSheet”)。是的,已看到更新(现在)。优化公式“Evaluate”运行产生了很大的影响,做得很好。 (2认同)