2013-02-22 87 views
1

我使用以下代码将Workbook的特定范围复制到另一个Workbook,它的工作正常。在粘贴Excel VBA之前对范围进行排序

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

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

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

为什么不粘贴到目标,然后使用排序Range.Sort? – Joe 2013-02-22 05:50:43

+0

@Joe:似乎是个好主意,但是如何获得目的地的范围,因为我只提到了strDestCell中的单个单元格,例如E1或F1?(我是新的Excel VBA) – Wilz 2013-02-22 06:05:40

+0

方法使用单个目标单元格*没有*复制或选择下面 – brettdj 2013-02-23 02:48:11

回答

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作为你最终的子程序。

+0

感谢乔,工作像一个魅力。 – Wilz 2013-02-22 06:36:44

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