Excel VBA报错438:Range变量未被识别为Worksheets对象属性问题
问题原因
你遇到的438错误是因为r是你独立声明的Range类型变量,不属于Worksheet对象的内置或自定义成员,VBA无法在Worksheet对象的属性/方法列表中找到r,所以会抛出「对象不支持该属性或方法」的错误,Worksheets("DATOS").r这种写法本身不符合VBA的语法规则。
解决方案
你要实现工作表和范围双变量关联操作的需求,有两种常用实现方式:
方案1:用工作表变量初始化Range变量(最常用)
先绑定工作表变量,再通过该工作表变量定义Range变量,此时Range变量会自动和对应工作表绑定,直接操作Range变量即可,不需要再额外加工作表前缀:
Sub 方案1代码() Dim ws As Worksheet Set ws = Worksheets("DATOS") ' 用ws定义Range,r天然绑定ws工作表 Dim r As Range Set r = ws.Range("D1", "F3") ' 直接赋值即可 r.Value = "123" End Sub
方案2:定义工作表范围名称(实现近似ws.r的调用效果)
如果需要实现类似ws.xxx调用自定义范围的写法,可以给工作表的对应范围定义名称,之后通过Range属性调用名称即可:
Sub 方案2代码() Dim ws As Worksheet Set ws = Worksheets("DATOS") ' 给ws的D1:F3范围定义名称为r ws.Names.Add Name:="r", RefersTo:=ws.Range("D1", "F3") ' 调用写法接近你要的ws.r效果 ws.Range("r").Value = "123" End Sub
注意:VBA不支持直接给Worksheet对象动态新增自定义成员,所以完全符合
ws.r.Value写法的操作是不存在的,方案2已经是最接近需求的实现方式。
内容的提问来源于stack exchange,提问作者Irving Pérez
相关产品推荐
相关产品推荐

