我现在是初学VBA,对Set
的内部运作感到困惑。这开始于我对于某些任务不需要Set
的原因感到非常困惑。例如,以下代码块运行正常:
第1区代码:
TempPercentile = Application.WorksheetFunction.PercentRank(Range("L2", Range("L2").End(xlDown)), ActiveCell.Value)
但是,此代码抛出编译错误,VBA抱怨需要一个对象:
第二区代码:
Set TempPercentile = Application.WorksheetFunction.PercentRank(Range("L2", Range("L2").End(xlDown)), ActiveCell.Value)
即使我在代码TempPercentile
中声明Dim TempPercentile As Double
,也会发生这种情况。我的调试器突出显示PercentRank
作为错误的来源,但我确实认为这是因为我尝试使用Set
创建新的double
。
我从StackOverflow post了解到Dim
用于声明变量和对象,Set
用于设置对象引用的值。是第二个代码块不起作用的原因,因为Set
仅用于设置对象的值,而TempPercentile
是Double
?提到的SO帖子指出Set
没有用,除非作为对象参考。这是因为Set
调用某种Factory
构造函数方法(显然原语不需要这样做)?
其次,Set
只是创建对象的内存引用,还是实际上是在内存中复制副本?
Set
因此是否像Java中的构造函数一样运行?
Set关键字用于创建新对象,创建一个新的Range, 例如。
如果这是真的,这不会产生很多性能问题吗?每次要声明和设置对象时,都必须创建一个新对象。我问,因为如果我有非常大的Objects
,就像我试图使用Set
的整个工作表一样,我不想超载内存。