Vba 使用Excel中的按钮将信息从一张工作表复制到新行上的另一张工作表

Vba 使用Excel中的按钮将信息从一张工作表复制到新行上的另一张工作表,vba,excel,Vba,Excel,我有一本有两张纸的工作簿。表1的布局看起来像一个带有提交按钮的表单,名为TravelRequest。工作表2只是从工作表1中收集的一个数据库,名为TravelLog 下面是它现在的工作原理: 第1页上的用户填写Excel表格的适当部分 用户单击提交按钮 数据以其自己的列全部复制到表2的1行中,并清除表1条目 下一个用户填写表单时,应在工作表2中添加新行 所以,现在我的脚本将一个单元格复制到另一个指定的单元格,我尝试了该网站上的许多不同代码,但似乎都无法正常工作,而且我的复制脚本是硬编码的复制和粘

我有一本有两张纸的工作簿。表1的布局看起来像一个带有提交按钮的表单,名为TravelRequest。工作表2只是从工作表1中收集的一个数据库,名为TravelLog

下面是它现在的工作原理:

  • 第1页上的用户填写Excel表格的适当部分
  • 用户单击提交按钮
  • 数据以其自己的列全部复制到表2的1行中,并清除表1条目
  • 下一个用户填写表单时,应在工作表2中添加新行
  • 所以,现在我的脚本将一个单元格复制到另一个指定的单元格,我尝试了该网站上的许多不同代码,但似乎都无法正常工作,而且我的复制脚本是硬编码的复制和粘贴操作。我不知道如何解决这个问题

    如果有人需要帮助,我可以把Excel表格上传到某个地方

    Sub Submit()
        Application.ScreenUpdating = False
        Range("L5").Copy
        Sheets("TravelLog").Range("B6").PasteSpecial xlPasteValues
        Range("C5").Copy
        Sheets("TravelLog").Range("C6").PasteSpecial xlPasteValues
        Range("G5").Copy
        Sheets("TravelLog").Range("D6").PasteSpecial xlPasteValues
        Range("c10").Copy
        Sheets("TravelLog").Range("E6").PasteSpecial xlPasteValues
        Range("c9").Copy
        Sheets("TravelLog").Range("F6").PasteSpecial xlPasteValues
        Range("I9").Copy
        Sheets("TravelLog").Range("G6").PasteSpecial xlPasteValues
        Range("I10").Copy
        Sheets("TravelLog").Range("H6").PasteSpecial xlPasteValues
        Range("C13").Copy
        Sheets("TravelLog").Range("I6").PasteSpecial xlPasteValues
        Range("C14").Copy
        Sheets("TravelLog").Range("J6").PasteSpecial xlPasteValues
        Range("C15").Copy
        Sheets("TravelLog").Range("K6").PasteSpecial xlPasteValues
        Range("C16").Copy
        Sheets("TravelLog").Range("L6").PasteSpecial xlPasteValues
        Range("C17").Copy
        Sheets("TravelLog").Range("M6").PasteSpecial xlPasteValues
        Range("C18").Copy
        Sheets("TravelLog").Range("N6").PasteSpecial xlPasteValues
        Range("i13").Copy
        Sheets("TravelLog").Range("O6").PasteSpecial xlPasteValues
        Range("i14").Copy
        Sheets("TravelLog").Range("P6").PasteSpecial xlPasteValues
        Range("i15").Copy
        Sheets("TravelLog").Range("Q6").PasteSpecial xlPasteValues
        Range("i16").Copy
        Sheets("TravelLog").Range("R6").PasteSpecial xlPasteValues
        Range("i17").Copy
        Sheets("TravelLog").Range("S6").PasteSpecial xlPasteValues
        Range("h20").Copy
        Sheets("TravelLog").Range("W6").PasteSpecial xlPasteValues
    
        Application.ScreenUpdating = True
    End Sub
    


    *编辑*

    根据德鲁西费尔的回答,我得到了这个错误

    错误溢出

    在这条线上

    Worksheets("TravelLog").Range(Dest).Value = Worksheets("TravelRequest").Range(Field).Value
    
    以下是更新后的
    refTable
    数组

    refTable = Array("B = L5", "C = C5", "D=G5", "E=C10", "F=C9", "G=I9", "H=I10", "I=C13", "J=C14", "K=C15", "L=C16", "M=C17", "N=C18", "O=I13", "P=I14", "Q=I15", "R=I16", "S=I17", "W=H20")
    
    试试这个

    Dim refTable As Variant, trans As Variant
    refTable = Array("B = L5", "C = C5", "D=G5", "E=C10", "F=C9")
    Dim Row As Long
    Row = Worksheets("TravelLog").UsedRange.Rows.Count + 1 
    For Each trans In refTable
        Dim Dest As String, Field As String
        Dest = Trim(Left(trans, InStr(1, trans, "=") - 1)) & Row
        Field = Trim(Right(trans, Len(trans) - InStr(1, trans, "=")))
        Worksheets("TravelLog").Range(Dest).value = Worksheets("TravelRequest").Range(Field).value
    Next
    

    refTable
    数组中,每个项都是表单字段到目标列的转换。因此,如果表单中的
    L5
    应该进入日志中的
    B列,那么您可以编写
    B=L5
    。代码可以处理空格,也可以不处理空格

    你的代码只是从一张纸到另一张纸创建完全相同的东西,对吗?但是,如果用户删除表单中的任何信息,那么表2也将更新为该行?@user3438974,我更改了代码,以便插入新行。该脚本擅长创建新行,但它是从travellog复制数据,而不是从travelrequest表复制数据。如何解决这个问题?因此,B/C/D/E/F是行程日志,L5/G5/C10是来自行程请求。它将从聚焦的任何工作表复制。如果您想确保它是从TravelRequest复制的,那么将
    =范围(字段).value
    更改为
    =工作表(“TravelRequest”).Range(字段).value
    。哇,它似乎在工作!你真是个天才!我还有一个问题,关于在travelrequst表上清除表单并更新其发票号。我应该在这里输入一个新的主题或帖子吗?虽然它不能直接回答您的问题,但Excel内置了特定的功能,可以完全按照您的需要执行操作,而无需编写自己的宏。例如,我知道这一点,而且效果很好,只是我的公司希望在excel中进行实际的表单样式设计,而不仅仅是那个窗口。如果可以的话,我的生活会更轻松。