gpt4 book ai didi

vba - Range.Paste - 对象不支持此属性或方法

转载 作者:行者123 更新时间:2023-12-02 12:20:18 28 4
gpt4 key购买 nike

我有一个非常简单的过程,可以从一个工作簿复制一系列内容并将其粘贴到另一个工作簿中;问题是,我在 paste 行的标题中收到错误。

下面是代码:

Sub copypasta()
Dim x As Workbook
Dim y As Workbook

Set x = ActiveWorkbook
Set y = Workbooks.Open("F:\Target\FTB\FTB.xlsx")

x.Sheets(1).Range("A1").CurrentRegion.Copy

y.Sheets("DTR").Cells.Delete '<~~~No Error Here...?
y.Sheets("DTR").[a1].Paste '<~~~Error Here

我觉得很奇怪,删除工作正常,但粘贴却不行。

看来我可能缺少粘贴方法的一些基础知识 - 有人可以解释一下我在这里缺少什么吗?

最佳答案

其他答案提供了使其发挥作用的方法,但没有解释发生了什么。

y.Sheets("DTR")

这实际上应该是 y.Worksheets("DTR") ,因为 Sheets 集合可以包含非工作表项目,例如图表。

无论如何, SheetsWorksheets 集合的 Item 属性(这是任何集合类型的默认属性)都会生成 Object ,这使得随后的每个链式成员调用成为后期绑定(bind)打电话。

并且您不会在后期绑定(bind)调用上获得IntelliSense,因为这些调用在运行时得到解决,根据定义:您可以在 Object 上调用任何东西 ,代码将顺利编译:

Sub Test()
Debug.Print ThisWorkbook.Worksheets(1).Whatever
End Sub

与:

相同
Sub Test()
Debug.Print ThisWorkbook.Worksheets.Item(1).Whatever
End Sub

在运行时,如果 VBA 在检索到的对象的接口(interface)上找不到 Whatever 成员,则会引发运行时错误 438,“对象不支持此属性或方法”。

后期绑定(bind)功能强大且非常有用,但它也会产生您不一定需要的开销。

当您知道该类型是什么时,您可以将返回的对象引用强制转换为特定类型,而不是处理 Object - 在这种情况下,我们知道我们'正在处理 Worksheet 对象:

Dim target As Worksheet
Set target = y.Worksheets("DTR")

现在您已经有了一个早期绑定(bind) Worksheet 对象引用,IntelliSense 可以指导您:

IntelliSense dropdown listing members of a Worksheet object

如果您尝试调用虚假成员(例如 target.Whatever ),您将收到编译时错误而不是运行时错误。

compile error: member or data member not found

当你这样做时:

target.[A1].Paste

您再次使用后期绑定(bind)来检索 A1 范围。相反,调用 Worksheet.Range 属性 getter 来检索早期绑定(bind)的 Range 对象 - 从那里您将看到,当您键入 .paste 时,Paste 对象中不存在 Range 方法之类的东西:

autocompletion for Range.PasteSpecial

当您键入内容时,您会获得自动完成和工具提示:

XLPasteType enum members listed for first parameter of Range.PasteSpecial method

关于vba - Range.Paste - 对象不支持此属性或方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40640000/

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