【问题标题】:Copying Table Range and Pasting as Value复制表格范围并粘贴为值
【发布时间】:2019-08-15 04:50:17
【问题描述】:

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

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

只要单元格成为值,我愿意接受任何解决方案。

我尝试了使用 PasteSpecial 的标准 ListObjects 范围复制代码,但是当它到达粘贴行时,我收到错误 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

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您正在进行后期绑定的成员呼叫,因此 IntelliSense 无法帮助您。当您对 ObjectVariant 进行蒙眼编码并尝试猜测您正在使用的对象的运行时接口上存在哪些成员时,会发生错误 438……而该成员恰好不存在。

    ActiveSheet 是一个Object。将其设为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“下标超出范围”。如果您打算使用特定的工作表,使用特定的工作表,而不仅仅是碰巧处于活动状态的任何工作表。

    【讨论】:

    • 非常感谢!这正是我一直在寻找的,而且效果很好。我什至已经将该工作表定义为一个变量,但在我应该有的时候并没有将它用于这行特定的代码。在执行任何“ActiveSheet”功能之前,我通过激活我正在使用的工作表来解决特定的工作表问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多