如何将表单中的数据输入到另一个工作表上的日志中

时间:2015-10-05 18:26:07

标签: excel vba

所以我试图找出如何设置一个宏,它将把我输入的数据放在一张纸上,然后将其记录到另一张纸的日志中。它将记录它,但我的大问题是它需要转到下一行,我不能完全找出它的代码。这是我的代码:

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 个答案:

答案 0 :(得分:2)

要获取表格上的下一个空行("约会"),您可以使用此公式获取行号:

Selected

这假设D栏中没有任何内容,无论你粘贴的是什么。

很明显,您使用的是宏录制器,这是一种很好的学习方法。但是使用 tRw = Sheets("Appointments").Range("D" & Rows.count).End(xlUp).Offset(1).Row 这样会减慢速度并且不需要。

要解决这个问题,请将工作表声明为变量,然后需要为每个复制粘贴添加一行。

.select

有关寻找下一行的其他方法,请参阅Siddharth Rout的回答here.

正如BruceWayne在评论中所述,this是关于为什么/如何避免使用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 的好参考

答案 1 :(得分: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