2015-10-05 57 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 
相关问题