在Excel中粘贴值而不是从macros中的公式

我目前有一个macros从一张纸上复制数据并将其存档在另一张纸上。 我的问题是它复制和粘贴公式,它只需要复制和粘贴值。

Sub Archive_Execution() Dim mainworkbook As Workbook Set mainworkbook = ActiveWorkbook Dim rangeName Dim strDataRange As Range Dim keyRange As Range rangeName = "Archive_Execution" Application.Goto Reference:=rangeName Selection.Copy Sheets("Archive Execution").Activate Range("A" & Rows.Count).End(xlUp).Offset(1).Select mainworkbook.Sheets("Archive Execution").Paste Sheets("Archive Execution").Activate Set strDataRange = Range("A2:AA1000000") Set keyRange = Range("D1") strDataRange.Sort Key1:=keyRange, Order1:=xlAscending End Sub 

任何帮助将不胜感激调整我的代码,以便只有值粘贴不是公式

正如在注释中提到的使用Range().PasteSpecial xlPasteValues如果你只想复制值。

我也build议使用Intersect方法和Worksheets("").UsedRange来减less你的范围。

 Sub Archive_Execution() Dim strDataRange As Range Dim keyRange As Range With Sheets("Archive Execution") Range("Archive_Execution").Copy .Range("A" & Rows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteValues End With With Sheets("Archive Execution") Set strDataRange = Intersect(.Range("A2:AA" & .Rows.Count), .UsedRange) Set keyRange = .Range("D1") strDataRange.Sort Key1:=keyRange, Order1:=xlAscending End With End Sub 

为了避免使用复制和粘贴,可以尝试如下所示,比复制粘贴快得多。

 Sub Archive_Execution() Dim mainworkbook As Workbook, rangeName Dim strDataRange As Range, keyRange As Range Dim r As Integer, c As Integer Set mainworkbook = ActiveWorkbook rangeName = "Archive_Execution" r = Range(rangeName).Rows.Count c = Range(rangeName).Columns.Count With Sheets("Archive Execution").Range("A" & Rows.Count).End(xlUp).Offset(1) .Resize(r, c) = Range(rangeName).Value End With Sheets("Archive Execution").Activate Set strDataRange = Range("A2:AA1000000") Set keyRange = Range("D1") strDataRange.Sort Key1:=keyRange, Order1:=xlAscending End Sub