Excel VB每点击一个按钮就发布到新行

Excel VB每点击一个按钮就发布到新行,excel,vba,Excel,Vba,我在sheet1上录制了一个链接到按钮的宏。我需要完成的目标是: 当按下按钮时,某些单元格被选中并复制到另一页上的“摘要”页面 Sheet1有一个下拉列表,显示某些信息。因此,在从下拉列表中选择数据后,用户将按下按钮并将该数据发布到汇总表中 宏工作正常(请注意,我是VBA noob),但我需要帮助添加功能,即每次按下按钮后,它都会将数据复制到下一行-换句话说,如果数据已经在第1行,它必须将数据放置在第2行,依此类推 我的VB代码如下: Sub Test() ' ' Test Macro ' '

我在sheet1上录制了一个链接到按钮的宏。我需要完成的目标是:

当按下按钮时,某些单元格被选中并复制到另一页上的“摘要”页面

Sheet1有一个下拉列表,显示某些信息。因此,在从下拉列表中选择数据后,用户将按下按钮并将该数据发布到汇总表中

宏工作正常(请注意,我是VBA noob),但我需要帮助添加功能,即每次按下按钮后,它都会将数据复制到下一行-换句话说,如果数据已经在第1行,它必须将数据放置在第2行,依此类推

我的VB代码如下:

Sub Test()
'
' Test Macro
'

'
Range("C32:N32").Select
Selection.Copy
Sheets("Summary").Select
Range("D3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks 
_
    :=False, Transpose:=False
Sheets("Comm Payable").Select
Range("C3:D3").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Summary").Select
Range("B3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks 
 _
    :=False, Transpose:=False
Sheets("Comm Payable").Select
Range("N1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Summary").Select
Range("C3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks 
_
    :=False, Transpose:=False
Range("B4").Select
Sheets("Comm Payable").Select
Range("O1").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = ""
Range("O1").Select
 End Sub
请有人协助添加上述内容吗


非常感谢

您必须阅读PEH发布的链接,因为您可以大大缩短和加速代码。我想这正是你想要的

Sub Test()

Dim r As Long

r = WorksheetFunction.Max(Sheets("Summary").Range("D" & Rows.Count).End(xlUp).Row + 1, 3)

Sheets("Comm Payable").Range("C32:N32").Copy
Sheets("Summary").Range("D" & r).PasteSpecial Paste:=xlPasteValues

Sheets("Comm Payable").Range("C3:D3").Copy
Sheets("Summary").Range("B" & r).PasteSpecial Paste:=xlPasteValues

Sheets("Comm Payable").Range("N1").Copy
Sheets("Summary").Range("C" & r).PasteSpecial Paste:=xlPasteValues

Sheets("Comm Payable").Range("O1").ClearContents

End Sub
另一方面,直接传输值比复制和粘贴更有效,下面是一个例子

With Sheets("Comm Payable").Range("C32:N32")
    Sheets("Summary").Range("D" & r).Resize(.Rows.Count, .Columns.Count).Value = Value
End With

您必须阅读PEH发布的链接,因为您可以大大缩短和加速代码。我想这正是你想要的

Sub Test()

Dim r As Long

r = WorksheetFunction.Max(Sheets("Summary").Range("D" & Rows.Count).End(xlUp).Row + 1, 3)

Sheets("Comm Payable").Range("C32:N32").Copy
Sheets("Summary").Range("D" & r).PasteSpecial Paste:=xlPasteValues

Sheets("Comm Payable").Range("C3:D3").Copy
Sheets("Summary").Range("B" & r).PasteSpecial Paste:=xlPasteValues

Sheets("Comm Payable").Range("N1").Copy
Sheets("Summary").Range("C" & r).PasteSpecial Paste:=xlPasteValues

Sheets("Comm Payable").Range("O1").ClearContents

End Sub
另一方面,直接传输值比复制和粘贴更有效,下面是一个例子

With Sheets("Comm Payable").Range("C32:N32")
    Sheets("Summary").Range("D" & r).Resize(.Rows.Count, .Columns.Count).Value = Value
End With

你可能会从阅读中受益。强烈建议在继续更改代码之前,首先将此技术应用于所有录制的代码。您可能会从阅读中受益。强烈建议在继续更改代码之前,首先将此技术应用于所有录制的代码。谢谢!代码工作得很好。我将通过链接阅读佩赫共享。谢谢你们两位!非常感谢。代码工作得很好。我将通过链接阅读佩赫共享。谢谢你们两位!