在我的宏中,当我引用一个单元格中找到的值时,我一直不一致地使用.cell(r,c)或.cell(r,c).value.
dim c as variant
c = sheet1.cell(1,1) 'or sheet1.cell(1,1).value
Run Code Online (Sandbox Code Playgroud)
两个参考都是正确的还是有一种首选方式?
.Value是范围对象的默认属性.因此,当你分配这样的东西时:
myVar = myRange
Run Code Online (Sandbox Code Playgroud)
它等同于myVar = myRange.Value,因为您分配的变量不是Object.
但是,如果你使用Set,像这样:
Set myObj = myRange
Run Code Online (Sandbox Code Playgroud)
您将分配对象引用.该关键字Set告诉VBA您正在分配对象引用.没有Set让VBA得出结论,你暗中想要得到范围.value的默认属性.
.value出于两个原因,明确使用它是一种很好的编程习惯:
1-它使代码更具可读性,因为读者无需隐式猜测发生了什么
2-随着VB.net关键字的出现,关键字Set已经消失; 分配对象或普通变量的语法变得相同.出于这个原因,默认属性惯用法已经随VB.net消失了.因此,良好的做法是.value在VBA中使用,因为它使您的代码最终移植到VB.net更容易.