这是较大代码的一部分,但是此代码段无效。我试图将两个像元设置为彼此相等,但是它不起作用。当我使用.Range(“ v1_copy”)时,代码运行,但是当我命名该范围并将其放置为变量(myCopyRange)时,代码无法运行,并且出现错误:编译错误:方法或数据找不到成员。任何帮助,将不胜感激!
Sub copy_paste_test()
Dim myCopyRange As Range
Dim myPasteRange As Range
Dim myWS1 As Worksheet
Dim myWS2 As Worksheet
Set myWS1 = Sheets("Sheet1")
Set myWS2 = Sheets("Sheet2")
myCopyRange = Range("v1_copy")
myPasteRange = Range("v1_paste")
'myWS2.Range("v1_paste").Value = myWS1.Range("v1_copy").Value
' This line works, but the below line doesn't
myWS2.myPasteRange.Value = myWS1.myCopyRange.Value
' This should be the exact same, just substituting the variable, but doesn't work
End Sub
最佳答案
您没有为Set
和Range
的myCopyRange
对象引用分配分配myPasteRange
关键字。
但是,对于检索命名范围,如果您想要完全明确的代码执行所说的内容并说出所做的事情,那么最好的方法是从适当的Name
集合中取消引用Names
。
如果名称是工作簿范围的名称,请使用Workbook
对象-这里是book
对象变量,但根据需要ActiveWorkbook
或ThisWorkbook
也可以工作:
Set myRange = book.Names("name").RefersToRange
如果名称是工作表范围的名称,请使用
Worksheet
对象-这里是sheet
对象变量进行限定,但是ActiveSheet
同样适用:Set myRange = sheet.Names("name").RefersToRange
这样,如果重命名工作簿或用户更改工作表的“选项卡名称”,则代码不会中断。只要名称存在于查询的
Names
集合中,它就不会中断。'myWS2.Range("v1_paste").Value = myWS1.Range("v1_copy").Value
' This line works, but the below line doesn't
myWS2.myPasteRange.Value = myWS1.myCopyRange.Value
' This should be the exact same, just substituting the variable, but doesn't work
这应该是完全相同的-不。
myWS1.myCopyRange
是非法的:myWS1
是Worksheet
对象:Worksheet
接口没有myCopyRange
成员,因此未找到方法或数据成员。由于
myCopyRange
是Range
对象,因此它知道其所属的Parent
是Worksheet
:不需要限定它……也不需要再次取消引用它-这足够了:myPasteRange.Value = myCopyRange.Value