1

我是 VBA 的新手,我现在正在从事一个速度绝对是一切的项目。因此,当我编写代码时,我注意到工作表中的许多单元格都命名为范围,并且在函数中明确引用,如下所示:

function a() 

    if range("x") > range("y") then

    end if

    ... (just imagine a lot of named ranges)

end function

我的问题是,我是否应该修改这些函数,以便将这些命名范围中的值作为参数传入,如下所示:

'i can pass in the correct cells when i call the function
function a(x as int, y as int) 

    if x > y then

    end if

    ...

end function

这会加快速度吗?这些函数几乎不断地被调用(除非进程被故意置于睡眠状态)以与 RTD 服务器通信。

4

1 回答 1

0

VBA 在与工作表建立“连接”方面比在处理自己的变量方面要慢得多。如果您的函数多次引用同一个单元格(或范围),那么在 VBA 与它们交互之前将它们加载到内存中将是有利的。例如,如果range("x")>range("y")是函数中唯一被引用xy引用的时间,则无关紧要。如果你有if range("x")>range("a")等等if range("x")>range("b"),那么你最好开始你的功能

varX=range("x")
varY=range("y") 

然后使用 VBA 变量。

似乎通过参数化函数,如您的第二个示例所示,可以完成我的建议。这可能是也可能不是,因为 Excel 可能只是将这些变量视为对工作表的引用,而不是值(我不确定)。为了安全起见,您应该在函数的开头专门定义新变量,然后只在函数的其余部分引用这些变量。

总结上面的文字墙,您的目标应该是尽量减少 VBA“连接”到工作表的次数。

于 2013-02-03T22:45:12.570 回答