【问题标题】:VBA copy sheet from one workbook to another (values and format only)从一个工作簿到另一个工作簿的 VBA 复制表(仅限值和格式)
【发布时间】:2016-09-22 14:53:51
【问题描述】:

我有以下代码可以将一张纸从一个 wb 复制并粘贴到另一个:

 wb1.Worksheets("ws").Copy After:=wb2.Sheets(wb1.Sheets.Count)

我试图只粘贴值和格式,我该怎么做呢?

此外,该过程所需的时间也比预期的要长,可能是因为我从中复制的工作表包含一个包含大量数据的数据透视表。无论如何我可以加快速度吗?

感谢您的帮助!

【问题讨论】:

    标签: vba excel copy-paste


    【解决方案1】:

    在效率方面。复制和粘贴比将 Rng2.Value 设置为 Rng1.Value 然后使用 .NumberFormat 等使 Rng2 像 Rng1 一样慢。你必须先做Worksheets.Add

    Rng2.Value = Rng1.Value
    Rng2.NumberFormat = Rng1.NumberFormat
    

    你也想要字体等吗?

    如果你想做复制和粘贴,那么你可以先粘贴特殊值,然后再粘贴特殊格式,但这会更慢。

    【讨论】:

    • 唯一的事情是它是从过滤的数据透视表中复制的,如果我遍历每个单元格并粘贴,那么它只会粘贴表格中的所有内容,过滤与否?
    • 您可以使用SpecialCells(xlCellTypeVisible) 仅在过滤其余单元格时使用可见单元格。这应该可以作为一个范围。
    • 好的,非常感谢,似乎有效!但是是的,我也想获得 Fonts/ColorFills 格式,我该怎么做呢?
    • 您可以尝试使用来自here 的答案。我试过了,但如果你有不止一种颜色,它就不起作用了,例如。 Range("D1:E2").Interior.Color = Range("A1:B2").DisplayFormat.Interior.Color 变成了全黑,因为我将 4 个单元格设置为不同的颜色。
    【解决方案2】:

    如果您实际上只是想要这些值,则可以通过设置两个彼此相等的范围来完全跳过复制/粘贴(并因此使用剪贴板):

    =Range([copy TO range]).Value = Range([copy FROM range]).Value.

    但是你同时添加了工作表,所以添加一行来创建空白工作表,然后做

    wb2.sheets([worksheet name]).Value = wb1.worksheets("ws").value

    【讨论】:

    • 这对过滤表有用吗?我试图从工作表中仅获取选定数量的数据(已经过滤掉),我认为如果我只是遍历范围,它会复制所有内容吗?
    • @ViggieSmalls - 嗯,我不确定,但应该。只要你能准确地设置范围,这个方法就行了。意思是,不要使用Sheets.Value = Sheets.Value,您想将范围调整为(例如)worksheet2.Range("Z1:Z100").Value Worksheet1.Range("A1:A100").Value`。
    猜你喜欢
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    相关资源
    最近更新 更多