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