2015-10-05 56 views
0

因此,我想知道如何設置一個宏,該數據將在一張紙上輸入數據,然後記錄下來到另一張紙上的日誌中。它會記錄它,但我的大問題是它需要去下一行,我不能完全弄清楚它的代碼。這裏是我的代碼如下所示:如何將數據從一張紙上的表單輸入到另一張紙上的日誌中

Sub Appt() 


' 
' Appt Macro 
' 
' 

Range("E4").Select 
Selection.Copy 
Sheets("Appointments").Select 
Range("G7").Select 
ActiveSheet.Paste 
Sheets("Data Entry").Select 
Range("E6").Select 
Application.CutCopyMode = False 
Selection.Copy 
Sheets("Appointments").Select 
Range("D7").Select 
ActiveSheet.Paste 
Sheets("Data Entry").Select 
Range("E8").Select 
Application.CutCopyMode = False 
Selection.Copy 
Sheets("Appointments").Select 
Range("E7").Select 
ActiveSheet.Paste 
Sheets("Data Entry").Select 
Range("E10").Select 
Application.CutCopyMode = False 
Selection.Copy 
Sheets("Appointments").Select 
Range("F7").Select 
ActiveSheet.Paste 
Sheets("Data Entry").Select 
Range("E12").Select 
Application.CutCopyMode = False 
Selection.Copy 
Sheets("Appointments").Select 
Range("H7").Select 
ActiveSheet.Paste 
Sheets("Data Entry").Select 
Range("E4").Select 
Application.CutCopyMode = False 
Selection.ClearContents 
Range("E6").Select 
Selection.ClearContents 
Range("E8").Select 
Selection.ClearContents 
Range("E10").Select 
Selection.ClearContents 
Range("E12").Select 
Selection.ClearContents 
End Sub 

回答

2

要獲得牀單下一個空行(「約會」),你會使用這個公式來獲取行號:

tRw = Sheets("Appointments").Range("D" & Rows.count).End(xlUp).Offset(1).Row 

這是假設有在D列下面的東西中沒有任何東西在粘貼。

很明顯,你使用了宏錄像機,這是一個很好的學習方式。但是如此使用.select會減慢速度並且不需要。

爲了解決這個問題,需要將表格聲明爲變量,然後爲每個副本粘貼一行。

Sub APPT() 
Dim oWs As Worksheet 
Dim tWs As Worksheet 
Dim tRw As Long 

Set oWs = Sheets("Data Entry") 
Set tWs = Sheets("Appointments") 
tRw = tWs.Range("D" & Rows.count).End(xlUp).Offset(1).Row 

With oWs 
    .Range("E4").copy tWs.Range("G" & tRw) 
    .Range("E6").copy tWs.Range("D" & tRw) 
    .Range("E8").copy tWs.Range("E" & tRw) 
    .Range("E10").copy tWs.Range("F" & tRw) 
    .Range("E12").copy tWs.Range("H" & tRw) 
    .Range("E4").ClearContents 
    .Range("E6").ClearContents 
    .Range("E8").ClearContents 
    .Range("E10").ClearContents 
    .Range("E12").ClearContents 
End With 
End Sub 

爲了找到下一行看看亞洲時報Siddharth潰敗的回答的其他方法here.

而作爲BruceWayne在他的評論中指出,this是一個很好的參考,爲什麼/如何避免使用.select

+1

要添加到不應該使用的想法'.select',這是一個[SO問題](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros),它有一些關於如何/爲什麼要避免它。 – BruceWayne

+0

@BruceWayne謝謝,我正要去尋找那個參考。 –

1

最好避免用戶的剪貼板並直接分配值:

Sub Appt() 
    Dim n&, v 
    v = [transpose(offset('data entry'!e4,{0;2;4;6;8},))] 
    With Sheets("appointments") 
     n = .Range("d" & .Rows.Count).End(xlUp).Row 
     .[g1].Offset(n) = v(1) 
     .[d1].Offset(n) = v(2) 
     .[e1].Offset(n) = v(3) 
     .[f1].Offset(n) = v(4) 
     .[h1].Offset(n) = v(5) 
    End With 
    Sheets("data entry").Range("e4,e6,e8,e10,e12").ClearContents 
End Sub 
相關問題