gpt4 book ai didi

VBA:为什么变量不能在命名范围内工作?

转载 作者:行者123 更新时间:2023-12-02 16:00:33 24 4
gpt4 key购买 nike

这是较大代码的一部分,但此代码段不起作用。我试图将两个单元格设置为彼此相等,但它不起作用。当我使用 .Range("v1_copy") 时,代码会运行,但是当我命名该范围并将其放置为变量 (myCopyRange) 时,代码不会运行,并且出现错误:编译错误:方法或数据未找到成员(member)。任何帮助将不胜感激!

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

最佳答案

您缺少对 myCopyRangemyPasteRangeRange 对象引用分配的 Set 关键字。

但是,为了检索命名范围,如果您想要完全显式的代码言出必行,最好的地方是取消引用名称 来自适当的 Names 集合。

如果名称是工作簿范围内的,则使用 Workbook 对象进行限定 - 这里是 book 对象变量,但根据需要 ActiveWorkbookThisWorkbook 也能正常工作:

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

关于VBA:为什么变量不能在命名范围内工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50997029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com