在粘贴Excel VBA之前对范围进行sorting

我正在使用下面的代码将Workbook的特定范围复制到另一个Workbook ,其工作正常。

但是现在我需要在粘贴到目标页面之前按升序对Range进行sorting,而不用更改源文件。 请帮忙。

 With Workbooks(strExcelFile).Sheets(strSheetName) .Range(strRange).Copy End With ActiveSheet.Range(strDestCell).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False 

利用这个事实,一旦你粘贴,你的新粘贴的范围将被选中; 那么你可以使用SELECTION。

 Public Sub test() Range("A1:A8").Copy ActiveSheet.Range("B1").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Selection.Sort key1:=Range("B1") End Sub 

那个testing例子可以在任何有A1-A8数据的excel文件中工作。 在两个地方的B1都可以用strDestCell和A1:A8replacestrRange作为你最终的子程序。

在使用范围时,应该尽量避免冗余Select 。 您可以使用下面的worksheetsranges更清楚地工作,根据您的问题,它可以轻松适应工作簿

 Sub ReCut() Dim ws1 As Worksheet Dim ws2 As Worksheet Dim rng1 As Range Set ws1 = ThisWorkbook.Sheets(1) Set ws2 = ThisWorkbook.Sheets(2) Set rng1 = ws1.Range("A1:A10") With ws2.[b1].Resize(rng1.Rows.Count, 1) .Value = rng1.Value .Sort ws2.[b1] End With End Sub