2016-01-19 41 views
2

我使用下面的代碼,我正在試圖改變,從而不使用。選擇複製選定範圍到另一個工作表

Selection.Select ' from active worksheet 
    Selection.Copy 
    Sheets("Purch Req").Select 
    Range("A1").Select 
    ActiveSheet.Paste 

我試圖用這個,但沒有輸出到其他工作表。

Dim src2Range As Range, dest2Range As Range 

    Set src2Range = Selection 'source from selected range 

    Set dest2Range = Sheets("Purch Req").Range("A1").Resize(src2Range.Rows.Count, src2Range.Columns.Count) ' destination range _ 
    'in Purch req worksheet 
+3

嘗試'Selection.Copy表( 「PURCH請求」),範圍( 「A1」)'。 – Fadi

回答

1

有鬃毛的方式來做到這一點,但在這裏不用兩項。

1)

Sub pasteExcel() 
    Dim src2Range As Range 
    Dim dest2Range As Range 
    Dim r 'to store the last row 
    Dim c 'to store the las column 
    Set src2Range = Selection 'source from selected range 

    r = Range("A1").End(xlDown).Row 'Get the last row from A1 to down 
    c = Range("A1").End(xlToRight).Column 'Get the last Column from A1 to right 
    Set dest2Range = Range(Cells(1, 1), Cells(r, c)) 
    dest2Range.PasteSpecial xlPasteAll 
    Application.CutCopyMode = False 'Always use the sentence. 
End Sub 

2)

Sub pasteExcel2() 
    Dim sht1 As Worksheet 
    Dim sht2 As Worksheet 'not used! 
    Dim src2Range As Range 
    Dim dest2Range As Range 
    Dim r 'to store the last row 
    Dim c 'to store the las column 

    Set sht1 = Sheets("Sheet1") 
    Set sht2 = Sheets("Sheet2") 

    sht1.Activate 'Just in case... but not necesary 

    r = Range("A1").End(xlDown).Row 'Get the last row from A1 to down 
    c = Range("A1").End(xlToRight).Column 'Get the last Column from A1 to right 
    Set src2Range = Range(Cells(1, 1), Cells(r, c)) 'source from selected range 
    Set dest2Range = Range(Cells(1, 1), Cells(r, c)) 
    sht2.Range(dest2Range.Address).Value = src2Range.Value 'the same range in the other sheet. 
End Sub 

告訴我,如果你需要一些改進。

+0

謝謝你的迴應。我對你上師的速度感到非常敬畏。我將測試解決方案並報告回來。 – HarryPea

+0

作爲,我想複製單元格的範圍已經確定,並已經選定響應@fadi工作順利。感謝大家對你的慷慨。對此,我真的非常感激。不知道如何選擇評論作爲答案! – HarryPea

5

這裏是關於How to avoid using Select in Excel VBA鏈路計算器好的例子

這裏是simples的

複製/粘貼 - 值=值 - PasteSpecial方法

Option Explicit 
'// values between cell's 
Sub PasteValues() 

    Dim Rng1 As Range 
    Dim Rng2 As Range 

    Set Rng1 = Range("A1") 
    Set Rng2 = Range("A2") 
    Rng2.Value = Rng1.Value 

    'or 
    [A2].Value = [A1].Value 

    'or 
    Range("A2").Value = Range("A1").Value 

    'or 
    Set Rng1 = Range("A1:A3") 
    Set Rng2 = Range("A1:A3") 
    Rng2("B1:B3").Value = Rng1("A1:A3").Value 

    'or 
    [B1:B3].Value = [A1:A3].Value 


    '// values between WorkSheets 
    Dim xlWs1 As Worksheet 
    Dim xlWs2 As Worksheet 

    Set xlWs1 = Worksheets("Sheet1") 
    Set Rng1 = xlWs1.Range("A1") 

    Set xlWs2 = Worksheets("Sheet2") 
    Set Rng2 = xlWs2.Range("A1") 
    Rng2.Value = Rng1.Value 

    'or 
    Set Rng1 = [=Sheet1!A1] 
    Set Rng2 = [=Sheet2!A1] 
    Rng2.Value = Rng1.Value 

    'or 
    [=Sheet2!A1].Value = [=Sheet1!A1].Value 

    'or 
    Worksheets("Sheet2").Range("A2").Value = Worksheets("Sheet1").Range("A1").Value 

    '// values between workbooks 
    Dim xlBk1 As Workbook 
    Dim xlBk2 As Workbook 

    Set xlBk1 = Workbooks("Book1.xlsm") 
    Set Rng1 = xlBk1.Worksheets("Sheet1").Range("A1") 

    Set xlBk2 = Workbooks("Book2.xlsm") 
    Set Rng2 = xlBk2.Worksheets("Sheet1").Range("A1") 
    Rng2.Value = Rng1.Value 

    'or 
    Set Rng1 = Evaluate("[Book1.xlsm]Sheet1!A1") 
    Set Rng2 = Evaluate("[Book2.xlsm]Sheet2!A1") 
    Rng2.Value = Rng1.Value 

    'or 
    Evaluate("[Book2.xlsm]Sheet2!A1").Value = Evaluate("[Book1.xlsm]Sheet1!A1") 

    'or 
    Workbooks("Book2.xlsx").Worksheets("Sheet1").Range("A1").Value = _ 
     Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Value 


End Sub 

簡單複製/粘貼

Sub CopyRange() 
    Dim Rng1 As Range 
    Dim Rng2 As Range 

    Set Rng1 = Range("A1") 
    Set Rng2 = Range("A2") 
    Rng1.Copy Rng2 

    [A1].Copy [A2] 

    Range("A2").Copy Range("A1") 

    '// Range.Copy to other worksheets 
    Dim xlWs1 As Worksheet 
    Dim xlWs2 As Worksheet 

    Set xlWs1 = Worksheets("Sheet1") 
    Set Rng1 = xlWs1.Range("A1") 
    Set xlWs2 = Worksheets("Sheet2") 
    Set Rng2 = xlWs2.Range("A1") 
    Rng1.Copy Rng2 

    Set Rng1 = [=Sheet1!A1] 
    Set Rng2 = [=Sheet2!A1] 
    Rng1.Copy Rng2 

    [=Sheet1!A1].Copy [=Sheet2!A1] 

    Worksheets("Sheet1").Range("A1").Copy Worksheets("Sheet2").Range("A1") 

    ''// Range.Copy to other workbooks 
    Dim xlBk1 As Workbook 
    Dim xlBk2 As Workbook 

    Set xlBk1 = Workbooks("Book1.xlsm") 
    Set Rng1 = xlBk1.Worksheets("Sheet1").Range("A1") 
    Set xlBk2 = Workbooks("Book2.xlsm") 
    Set Rng2 = xlBk2.Worksheets("Sheet2").Range("A2") 
    Rng1.Copy Rng2 


    Evaluate("[Book1.xlsm]Sheet1!A1").Copy Evaluate("[Book2.xlsm]Sheet2!A2") 

    Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Copy _ 
    Workbooks("Book2.xlsx").Worksheets("Sheet1").Range("A1") 

End Sub 

PasteSpecial方法

Sub PasteSpecial() 

    'Copy and PasteSpecial a Range 
    Range("A1").Copy 
    Range("A3").PasteSpecial Paste:=xlPasteFormats 

    'Copy and PasteSpecial a between worksheets 
    Worksheets("Sheet1").Range("A2").Copy 
    Worksheets("Sheet2").Range("A2").PasteSpecial Paste:=xlPasteFormulas 

    'Copy and PasteSpecial between workbooks 
    Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Copy 
    Workbooks("Book2.xlsx").Worksheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteFormats 

    Application.CutCopyMode = False 

End Sub 
+2

Upvoted只是爲了避免選擇建議。隱'ActiveSheet'和'ActiveWorkbook'引用應該是刻着在VBA編譯錯誤......請注意,'Sheets'被隱式指的是活動工作簿;-) –

+1

大加並在*的LOL‘應該是刻着’編譯VBA中的錯誤'*儘管這可能會使宏錄製器陷入混亂之中。 @ Om3r,而在大多數情況下,直接價值轉移是「最佳實踐」,而OP的方法則是嘗試引入格式和公式。如果[xlPasteValues(https://msdn.microsoft.com/en-us/library/office/ff837425.aspx)已指定我一般只提供這個(不解釋)。 – Jeeped

相關問題