2013-02-22 121 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