【问题标题】:VBA copy columns drastically increases file sizeVBA 复制列大大增加了文件大小
【发布时间】:2016-04-29 13:11:40
【问题描述】:

我在 Excel 中有以下 VBA 代码:

Dim src As Worksheet
Dim des As Worksheet
Dim rows As Integer
Dim src_rows As Integer
Set src = Sheets("source sheet")
Set des = Sheets("destination sheet)

'Copy and Paste relevant columns
src.Activate
src_rows = Range("A1", Range("A1").End(xlDown)).Count
Range("A2:G2" & src_rows).Copy
des.Activate
Range("A2").PasteSpecial Paste:=xlPasteValues

我的目标是将源工作表中的几列(由 SQL 数据连接填充)复制到不同的工作表中。源数据可以更改,因此我使用变量 src_rows 计算当前有多少行

重复此代码以复制其他需要的列。这一切都如我所愿。但是,运行并保存后,文件大小从 5MB 左右跳到了 60MB 左右!它不可能是额外的数据,因为只有大约 10K 行。如果我删除复制的数据并重新保存,文件不会回落到 5MB。

我也尝试过使用range(__).copy destination:= ___,但这不起作用。 如果我手动复制,文件大小不会增加。如果我手动复制和录制宏并运行此宏,文件会增加。

任何建议将不胜感激。

【问题讨论】:

    标签: excel vba filesize


    【解决方案1】:

    复制时,行数前面有一个额外的2。应该是Range("A2:G" & src_rows).Copy

    我还建议使用RangeUsed.Rows 而不是倒计时(如果第二行为空,End(xlDown) 将进入最大行)。

    【讨论】:

    • 谢谢,注意到其他人,但错过了这个。现在合并了 UsedRange,正在寻找比我所做的更好的东西。谢谢
    【解决方案2】:

    与其将提交数据复制并粘贴到剪贴板,不如尝试使用 VBA 将一个范围的值设置为另一个范围,例如

    Sheets("dest").Range("A1:A100").Value = Sheets("src").Range("A1:A100").Value
    

    更有效率
    Sheets("dest").Range("A1:A100").Copy
    Sheets("src").Range("A1:A100").PasteSpecial xlPasteValues
    

    【讨论】:

      【解决方案3】:

      请看下面的简化代码

      Sub test()
          Dim src As Worksheet
          Dim des As Worksheet
          Dim src_rows As Long
          Set src = Sheets("source sheet")
          Set des = Sheets("destination sheet")
          src.Range("A2:G" & src.Range("A1").End(xlDown).Row).Copy des.Range("A2")
      End Sub
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-20
        • 2012-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-27
        • 2013-08-26
        相关资源
        最近更新 更多