2017-08-04 180 views
0

我有一個宏記錄器代碼(與選擇和激活),我試圖簡化。它目前看起來像這樣:複製範圍結束xl向下粘貼不同的Wb

Windows("Stambestand.xlsm").Activate 
Range("AA2").Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.Copy 
    Windows("Ijking document.xlsm").Activate 
    Range("B3").Select 
    ActiveSheet.Paste 

截至最近我已經開始使用變量,並希望削減代碼。我正在考慮沿着這些方向:

WbStambestand.WsStam.Range("AA2", Selection, Selection.End(xlDown)).Copy WbIjk.WsIjk.range("A1").paste 

Workbooks("WbStambestand").Worksheets("WsStam").Range("AA2", Selection, Selection.End(xlDown)).Copy 

但是,這些不起作用。我希望你們能幫助我。非常感激。這些是我的變數(他們是宣佈的)。 Ijk的是粘貼目的地。

Dim WbStambestand, WbIjk As Workbook 
Dim WsIjk, WsStam As Worksheet 

Set WsIjk = ActiveSheet 
Set WbIjk = ActiveWorkbook 
Set WsIjk = ActiveSheet 
Set WbIjk = ActiveWorkbook 
Set WbStambestand = Workbooks.Open(stam) 
Set WsStam = WbStambestand.Worksheets("stambestand") 
+0

我會建議只是不減磅的代碼,它很好的方式,它是在兩個長行任何你的「下調」的代碼是太難了閱讀是值得的。 –

+0

顯然宏代碼符號更快,當它不需要來回切換來選擇所有的東西(即時運行它15次或者有不同數量的行)。此外,我想盡可能高效地編寫代碼。 關於長度,我可以使用space_分割線。 – MyName

+0

啊所以你不想簡化它的長度,你正在尋找一個更高效的速度方法? –

回答

0

試一下這個

Sub abc() 
    Dim WbStambestand As Workbook 
    Dim WbIjk As Workbook 
    Dim WsIjk As Worksheet 
    Dim WsStam As Worksheet 
    Dim LastRow As Long 
    Dim stam As String 

    stam = "C:\Users\Admin\Desktop\Stambestand.xlsm" ' path with complete file name with extension. 
    Set WsIjk = ActiveSheet 
    Set WbIjk = ThisWorkbook ' workbook which has current code 
    Set WbStambestand = Workbooks.Open(stam) 
    Set WsStam = WbStambestand.Worksheets("stambestand") 

    LastRow = WsStam.Range("AA2").End(xlDown).Row 
    WsStam.Range("AA2:AA" & LastRow).Copy WsIjk.Range("B3") 
    End Sub 
+0

應該聲明爲範圍? – MyName

+0

聲明爲長 – Maddy

+0

哦,對不起,我專注於我的代碼中的最後2行。 編輯:關於粘貼的目的地。爲什麼WsIjk或WbIjk.WsIjk,Range(「B3」)不起作用?它顯示需要的對象。 (WbIjk是ijking.document.xlsm,WsIjk是Wb中的工作表) – MyName

相關問題