VBA仅为对象设置

时间:2017-09-19 00:02:48

标签: excel vba excel-vba

我现在是初学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仅用于设置对象的值,而TempPercentileDouble?提到的SO帖子指出Set没有用,除非作为对象参考。这是因为Set调用某种Factory构造函数方法(显然原语不需要这样做)?

其次,Set只是创建对象的内存引用,还是实际上是在内存中复制副本?

Set因此是否像Java中的构造函数一样运行?

This article表示

  

Set关键字用于创建新对象,创建一个新的Range,   例如。

如果这是真的,这不会产生很多性能问题吗?每次要声明和设置对象时,都必须创建一个新对象。我问,因为如果我有非常大的Objects,就像我试图使用Set的整个工作表一样,我不想超载内存。

0 个答案:

没有答案