Vba Excel宏-将数据复制到新行

Vba Excel宏-将数据复制到新行,vba,excel,Vba,Excel,我以前从未使用excel做过类似的事情,所以我可以提供一些建议 我有一个非常简单的表单,它有一个基本表单,当用户完成表单时,我希望他们单击保存按钮,然后表单中的数据被插入到新行中 希望这张图片能解释。Marcus的详细信息已添加到表单中,单击“保存”时,我需要添加一个包含Marcus详细信息的新行(11) 这可能吗?有人能给我指出正确的方向吗 这是我第一次在excel中查看宏并执行类似操作 使用宏记录器,我可以从C3:C5和G3:G5复制数据并将其粘贴到第11行,但如何添加新行并粘贴到该行。最

我以前从未使用excel做过类似的事情,所以我可以提供一些建议

我有一个非常简单的表单,它有一个基本表单,当用户完成表单时,我希望他们单击保存按钮,然后表单中的数据被插入到新行中

希望这张图片能解释。Marcus的详细信息已添加到表单中,单击“保存”时,我需要添加一个包含Marcus详细信息的新行(11)

这可能吗?有人能给我指出正确的方向吗

这是我第一次在excel中查看宏并执行类似操作

使用宏记录器,我可以从C3:C5和G3:G5复制数据并将其粘贴到第11行,但如何添加新行并粘贴到该行。最后,如何将宏绑定到保存单元

Sub Copy()
'
' Copy Macro
'

'
    Range("C3:C5").Select
    Selection.Copy
    Range("A11").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Range("G3:G5").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("D11").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
End Sub

左下角的宏录制器是一个很好的起点(它是一个红色圆圈覆盖的窗体):

如果不存在,则右键单击并选择它(如下所示):

然后自动记录你想要发生的事情,这就是你的出发点

更新:

您需要创建一个“保存”按钮,在这里您可以创建一个按钮并将复制宏分配给:

这是您更新的代码(请参阅我在“'”符号后面的注释:


左下角的宏录制器是一个很好的起点(它是一个红色圆圈覆盖的窗体):

如果不存在,则右键单击并选择它(如下所示):

然后自动记录你想要发生的事情,这就是你的出发点

更新:

您需要创建一个“保存”按钮,在这里您可以创建一个按钮并将复制宏分配给:

这是您更新的代码(请参阅我在“'”符号后面的注释:


尝试下面的VBA过程

我是根据你在问题中提出的形式写的。 字段的位置是硬编码的

Public Sub SubmitForm()

Dim horizontalPosition As Integer
Dim formSheet As Worksheet

Set formSheet = ThisWorkbook.Worksheets(1)


horizontalPosition = Application.WorksheetFunction.CountA(formSheet.Range("A9:A1000")) + 9

formSheet.Cells(horizontalPosition, 1).Value = formSheet.Cells(3, 3).Value
formSheet.Cells(horizontalPosition, 2).Value = formSheet.Cells(4, 3).Value
formSheet.Cells(horizontalPosition, 3).Value = formSheet.Cells(5, 3).Value
formSheet.Cells(horizontalPosition, 4).Value = formSheet.Cells(3, 7).Value
formSheet.Cells(horizontalPosition, 5).Value = formSheet.Cells(4, 7).Value
formSheet.Cells(horizontalPosition, 6).Value = formSheet.Cells(5, 7).Value

End Sub

尝试下面的VBA过程

我是根据你在问题中提出的形式写的。 字段的位置是硬编码的

Public Sub SubmitForm()

Dim horizontalPosition As Integer
Dim formSheet As Worksheet

Set formSheet = ThisWorkbook.Worksheets(1)


horizontalPosition = Application.WorksheetFunction.CountA(formSheet.Range("A9:A1000")) + 9

formSheet.Cells(horizontalPosition, 1).Value = formSheet.Cells(3, 3).Value
formSheet.Cells(horizontalPosition, 2).Value = formSheet.Cells(4, 3).Value
formSheet.Cells(horizontalPosition, 3).Value = formSheet.Cells(5, 3).Value
formSheet.Cells(horizontalPosition, 4).Value = formSheet.Cells(3, 7).Value
formSheet.Cells(horizontalPosition, 5).Value = formSheet.Cells(4, 7).Value
formSheet.Cells(horizontalPosition, 6).Value = formSheet.Cells(5, 7).Value

End Sub

这将使用数组存储信息,然后在下一行打印信息
(有关更多详细信息,请参阅评论!)

数组比引用工作表快得多

我还添加了最后一部分来清理表单输入!(如果不需要,可以删除或注释它)


这将使用数组存储信息,然后在下一行打印信息
(有关更多详细信息,请参阅评论!)

数组比引用工作表快得多

我还添加了最后一部分来清理表单输入!(如果不需要,可以删除或注释它)


您可以将其与您的
工作表\u Change
事件绑定,并检查是否有人更改了单元格“J6”(您放置“Save”的位置)中的值

选项显式
私有子工作表_更改(ByVal目标作为范围)
变暗粘贴行为长,C为范围

如果不相交(范围(“J6”),目标)什么都不是,那么您可以将其与您的
工作表\u Change
事件绑定,并检查是否有人更改单元格“J6”(您放置“保存”的位置)中的值

选项显式
私有子工作表_更改(ByVal目标作为范围)
变暗粘贴行为长,C为范围

如果不相交(范围(“J6”),目标)为空,则“尝试将此宏绑定到yout按钮。宏对象按钮

Type employee
    Name As String
    Email As String
    Phone As String
    ID As String
    StaffNo As String
    Location As String
End Type

Sub MacroToBindOnButton()



' Create new Employee from sheet
Dim newEmployee As employee
newEmployee = createNewEmployee(newEmployee)

result = saveNewEmployee(newEmployee)

End Sub

Function createNewEmployee(employee As employee) As employee


employee.Name = ActiveWorkbook.activeSheet.Cells(2, 3).Value
employee.Email = ActiveWorkbook.activeSheet.Cells(3, 3).Value
employee.Phone = ActiveWorkbook.activeSheet.Cells(4, 3).Value
employee.ID = ActiveWorkbook.activeSheet.Cells(2, 7).Value
employee.StaffNo = ActiveWorkbook.activeSheet.Cells(3, 7).Value
employee.Location = ActiveWorkbook.activeSheet.Cells(4, 7).Value

createNewEmployee = employee
End Function

Function saveNewEmployee(newEmployee As employee)

Dim i As Integer
i = 9

Do While activeSheet.Cells(i, 1).Value <> ""

i = i + 1

Loop

' Save it into the rows
ActiveWorkbook.activeSheet.Cells(i, 1).Value = newEmployee.Name
 ActiveWorkbook.activeSheet.Cells(i, 2).Value = newEmployee.Email
 ActiveWorkbook.activeSheet.Cells(i, 3).Value = newEmployee.Phone
 ActiveWorkbook.activeSheet.Cells(i, 4).Value = newEmployee.ID
ActiveWorkbook.activeSheet.Cells(i, 5).Value = newEmployee.StaffNo
ActiveWorkbook.activeSheet.Cells(i, 6).Value = newEmployee.Location


   End Function
类型员工
名称为字符串
电子邮件作为字符串
电话串
ID作为字符串
斯塔夫诺队
位置作为字符串
端型
亚宏按钮()
'从工作表创建新员工
将新员工视为员工
newEmployee=createNewEmployee(newEmployee)
结果=saveNewEmployee(newEmployee)
端接头
函数createNewEmployee(雇员作为雇员)作为雇员
employee.Name=ActiveWorkbook.activeSheet.Cells(2,3).Value
employee.Email=ActiveWorkbook.activeSheet.Cells(3,3).Value
employee.Phone=ActiveWorkbook.activeSheet.Cells(4,3).Value
employee.ID=ActiveWorkbook.activeSheet.Cells(2,7).Value
employee.StaffNo=ActiveWorkbook.activeSheet.Cells(3,7).Value
employee.Location=ActiveWorkbook.activeSheet.Cells(4,7).Value
createNewEmployee=employee
端函数
函数saveNewEmployee(newEmployee作为雇员)
作为整数的Dim i
i=9
当activeSheet.Cells(i,1)时执行。值“”
i=i+1
环
'将其保存到行中
ActiveWorkbook.activeSheet.Cells(i,1).Value=newEmployee.Name
ActiveWorkbook.activeSheet.Cells(i,2).Value=newEmployee.Email
ActiveWorkbook.activeSheet.Cells(i,3).Value=newEmployee.Phone
ActiveWorkbook.activeSheet.Cells(i,4).Value=newEmployee.ID
ActiveWorkbook.activeSheet.Cells(i,5).Value=newEmployee.StaffNo
ActiveWorkbook.activeSheet.Cells(i,6).Value=newEmployee.Location
端函数

尝试将此宏绑定到yout按钮。宏按钮

Type employee
    Name As String
    Email As String
    Phone As String
    ID As String
    StaffNo As String
    Location As String
End Type

Sub MacroToBindOnButton()



' Create new Employee from sheet
Dim newEmployee As employee
newEmployee = createNewEmployee(newEmployee)

result = saveNewEmployee(newEmployee)

End Sub

Function createNewEmployee(employee As employee) As employee


employee.Name = ActiveWorkbook.activeSheet.Cells(2, 3).Value
employee.Email = ActiveWorkbook.activeSheet.Cells(3, 3).Value
employee.Phone = ActiveWorkbook.activeSheet.Cells(4, 3).Value
employee.ID = ActiveWorkbook.activeSheet.Cells(2, 7).Value
employee.StaffNo = ActiveWorkbook.activeSheet.Cells(3, 7).Value
employee.Location = ActiveWorkbook.activeSheet.Cells(4, 7).Value

createNewEmployee = employee
End Function

Function saveNewEmployee(newEmployee As employee)

Dim i As Integer
i = 9

Do While activeSheet.Cells(i, 1).Value <> ""

i = i + 1

Loop

' Save it into the rows
ActiveWorkbook.activeSheet.Cells(i, 1).Value = newEmployee.Name
 ActiveWorkbook.activeSheet.Cells(i, 2).Value = newEmployee.Email
 ActiveWorkbook.activeSheet.Cells(i, 3).Value = newEmployee.Phone
 ActiveWorkbook.activeSheet.Cells(i, 4).Value = newEmployee.ID
ActiveWorkbook.activeSheet.Cells(i, 5).Value = newEmployee.StaffNo
ActiveWorkbook.activeSheet.Cells(i, 6).Value = newEmployee.Location


   End Function
类型员工
名称为字符串
电子邮件作为字符串
电话串
ID作为字符串
斯塔夫诺队
位置作为字符串
端型
亚宏按钮()
'从工作表创建新员工
将新员工视为员工
newEmployee=createNewEmployee(newEmployee)
结果=saveNewEmployee(newEmployee)
端接头
函数createNewEmployee(雇员作为雇员)作为雇员
employee.Name=ActiveWorkbook.activeSheet.Cells(2,3).Value
employee.Email=ActiveWorkbook.activeSheet.Cells(3,3).Value
employee.Phone=ActiveWorkbook.activeSheet.Cells(4,3).Value
employee.ID=ActiveWorkbook.activeSheet.Cells(2,7).Value
employee.StaffNo=ActiveWorkbook.activeSheet.Cells(3,7).Value
employee.Location=ActiveWorkbook.activeSheet.Cells(4,7).Value
createNewEmployee=employee
端函数
函数saveNewEmployee(newEmployee作为雇员)
作为整数的Dim i
i=9
当activeSheet.Cells(i,1)时执行。值“”
i=i+1
环
'将其保存到行中
ActiveWorkbook.activeSheet.Cells(i,1).Value=newE
Type employee
    Name As String
    Email As String
    Phone As String
    ID As String
    StaffNo As String
    Location As String
End Type

Sub MacroToBindOnButton()



' Create new Employee from sheet
Dim newEmployee As employee
newEmployee = createNewEmployee(newEmployee)

result = saveNewEmployee(newEmployee)

End Sub

Function createNewEmployee(employee As employee) As employee


employee.Name = ActiveWorkbook.activeSheet.Cells(2, 3).Value
employee.Email = ActiveWorkbook.activeSheet.Cells(3, 3).Value
employee.Phone = ActiveWorkbook.activeSheet.Cells(4, 3).Value
employee.ID = ActiveWorkbook.activeSheet.Cells(2, 7).Value
employee.StaffNo = ActiveWorkbook.activeSheet.Cells(3, 7).Value
employee.Location = ActiveWorkbook.activeSheet.Cells(4, 7).Value

createNewEmployee = employee
End Function

Function saveNewEmployee(newEmployee As employee)

Dim i As Integer
i = 9

Do While activeSheet.Cells(i, 1).Value <> ""

i = i + 1

Loop

' Save it into the rows
ActiveWorkbook.activeSheet.Cells(i, 1).Value = newEmployee.Name
 ActiveWorkbook.activeSheet.Cells(i, 2).Value = newEmployee.Email
 ActiveWorkbook.activeSheet.Cells(i, 3).Value = newEmployee.Phone
 ActiveWorkbook.activeSheet.Cells(i, 4).Value = newEmployee.ID
ActiveWorkbook.activeSheet.Cells(i, 5).Value = newEmployee.StaffNo
ActiveWorkbook.activeSheet.Cells(i, 6).Value = newEmployee.Location


   End Function