You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA使用Set和=给Range对象赋值时Address返回结果不同的问题

现象解释

VBA 中对象变量的赋值规则和普通变量不同:所有对象类型的变量赋值必须使用Set关键字,省略Set时,VBA会默认操作对象的默认属性,不会修改对象本身的引用指向。

你遇到的差异完全是这个语法规则导致的:

  • 带Set的写法是标准的对象引用赋值,会把rngSearch的指向修改为你新定义的$P$1:$AI$1区域,所以打印地址符合预期。
  • 不带Set的写法,因为Range对象的默认属性是Value,这行代码实际等价于rngSearch.Value = .Range(.Cells(1, lnFirstCol), .Cells(1, lnLastCol)).Value:你没有修改rngSearch的引用,它还是指向之前Find返回的$P$1单元格,只是给这个单元格赋值了右侧区域的内容(给单个单元格赋值多单元格区域时只会取区域第一个单元格的值)。所以打印地址仍然是$P$1,不是赋值被忽略,是你写的赋值操作本来就不是修改对象引用的。

你可以在不带Set的赋值后加一行Debug.Print rngSearch.Value验证,能看到单元格的值已经被更新,说明赋值操作实际已经执行了。

内容的提问来源于stack exchange,提问作者Toledo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:15:03