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

时间:2013-02-22 05:48:59

标签: excel excel-vba vba

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

但现在我需要在粘贴到目标表之前按升序对Range进行排序,而不更改源。请帮忙。

With Workbooks(strExcelFile).Sheets(strSheetName)
     .Range(strRange).Copy
End With

ActiveSheet.Range(strDestCell).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False

2 个答案:

答案 0 :(得分:2)

利用这一事实,一旦粘贴,您的新粘贴范围将被选中;然后你可以使用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

该测试示例适用于任何带有A1-A8中某些数据的excel文件。两个地方的B1都可以替换为strDestCell和A1:A8替换为最终子例程的strRange。

答案 1 :(得分:1)

使用范围时,应尽量避免使用冗余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