使用Excel中的按钮将信息从一个工作表复制到另一个工作表

时间:2014-03-19 18:14:47

标签: excel vba excel-vba

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

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

  1. 工作表1上的用户填写Excel表单的正确部分
  2. 用户点击“提交”按钮
  3. 数据将在1行中自行复制到工作表2中,并清除工作表1条目
  4. 当下一个用户填写表单时,它应该在Sheet 2中添加一个新的ROW
  5. 所以,现在我的脚本将一个单元格复制到另一个指定的单元格,我从这个网站尝试了许多不同的代码,但似乎无法使用任何代码,我的副本脚本也是硬编码的副本&粘贴操作。我不知道如何解决这个问题。

    如果有人需要帮助,我可以在某处上传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
    



    *编辑*

    有了druciferre的回答,我收到了这个错误

      

    ERROR OVERFLOW

    在这一行

    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")
    

1 个答案:

答案 0 :(得分:1)

试试这个......

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。代码可以处理空格或不处理。