复制表范围并粘贴为值

时间:2019-08-14 20:00:35

标签: excel vba

我有一些代码可以通过将公式放到某些表格单元格中来从另一个下载的报表中更新库存表,但是我需要在更新后将它们更改为仅值而不是公式。

我只需要复制整列(该列需要可变数量的单元格),然后将其作为值直接粘贴回同一位置。 (类似于手动复制,粘贴,然后再次执行ctrl + v以粘贴为值)

只要这些单元格成为价值,我就会接受任何解决方案。

我已经尝试了PasteSpecial的标准ListObjects Range Copy代码,但是在粘贴行时出现错误438,“对象不支持此属性或方法”。根据所做的研究,我不知道自己还有其他选择。

 '''This is the formula going into the cells

 ActiveCell.Formula = "=IF(ISERROR(GETPIVOTDATA(""Sec QTY Sum"", '[8-14-19 AM INVENTORY.xls]Sheet2'!$A$4,""Alias"",""" & y & """)),0,GETPIVOTDATA(""Sec QTY Sum"", '[8-14-19 AM INVENTORY.xls]Sheet2'!$A$4,""Alias"",""" & y & """))"

 '''The second line of this code is where it messes up with the error 438

 ActiveSheet.ListObjects("Table62").ListColumns(5).Range.Copy

 ActiveSheet.ListObjects("Table62").ListColumns(5).PasteSpecial Paste:=xlPasteValues

尝试获取值,以使电子表格不依赖于其他电子表格处于打开/不变状态。收到错误消息438

1 个答案:

答案 0 :(得分:2)

您正在打一个迟到的会员电话,因此 IntelliSense 无法为您提供帮助。当您对ObjectVariant蒙住眼睛进行编码,并尝试猜测正在使用的对象的运行时接口上存在哪些成员时,就会发生错误438,而该成员恰好不存在。

ActiveSheetObject。使其成为Worksheet

Dim sh As Worksheet
Set sh = ActiveSheet 'cast to Worksheet, don't work with Object.

复制和粘贴是Range操作,因此请使用Range属性:

With sh.ListObjects("Table62").ListColumns(5).Range
    .Copy
    .PasteSpecial Paste:=xlPasteValues
End With

这里没有涉及的属性/对象是Object,因此所有内容都是早期绑定的,并且您在执行过程的每一步都会自动完成/智能化。确保代码始终早绑定是避免错误438的最佳方法。

也就是说,在这里使用ActiveSheet是一个陷阱:如果活动工作表没有名为Table62的表,则可能会出现运行时错误9“下标超出范围”。如果您打算使用特定的工作表,请使用特定的工作表,而不仅仅是碰巧处于活动状态的任何工作表。