根据唯一 ID 匹配将数据传输到外部 excel 数据库 sheet
Transfer data into an external excel database sheet, based on unique ID match
美好的一天,
我对 excel VBA 变量知之甚少,并且一直在努力使这个工作好几天。
我已将“Workbook2.xlsm”指定为中央数据库文件。它包含A列中的所有个人员工ID(从A2列开始,A1是table header)。
通过另一个“Workbook1.xlsm”中的输入部分,我试图用 VBA 触发以打开工作簿 2/Sheet1,将工作簿 1 中单元格 A2 中输入的个人 ID 与列中的 ID 列表相匹配A 在工作簿 2 中,将工作簿 1 中的培训类型、开始和结束日期复制到工作表 2 中相应 ID 的旁边,然后关闭并保存工作表 2。
Data entry Worksheet 1
Worksheet 2 Database to search ID and paste assignment, on and off from Worksheet 1
提前感谢您的想法。
我创建了类似的工作簿,它基本上使用一个 sheet 来更新另一个 sheet。下面的代码基于一个工作簿。您可以通过在sheet之前添加工作簿名称来修改这两个工作簿,关闭屏幕更新,打开工作簿2,分配值,保存工作簿2,打开屏幕更新。
我建议创建一个 table,以便在添加新员工“TblData”时范围会自动动态变化。您也可以使用命名范围来执行此操作,但根据我的经验,这有点麻烦。通过更多的编码,您可以选择添加员工。将您的按钮命名为“AssignTrainBtn”。此代码位于分配给 AssignTrainBtn
的单击操作的 ManageAssignment sheet 对象中
Private Sub AssignTrainBtn_Click()
Dim formSheet As Worksheet
Dim dataSheet As Worksheet
Dim nextRow As Integer
Dim IDCol As Range
Set formSheet = Sheets("ManageAssignments")
Set dataSheet = Sheets("TempAssignments")
Set IDCol = dataSheet.Range("TblData[ID]")
ID = Range("a2")
If ID <> vbNullString Then
Set Rng = IDCol.Find(what:=ID, _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
MatchCase:=False)
If Not Rng Is Nothing Then
nextRow = Rng.Row
Else
MsgBox ("employee not found")
Exit Sub
End If
dataSheet.Cells(nextRow, 2).Value = formSheet.Range("b2").Value
dataSheet.Cells(nextRow, 3).Value = formSheet.Range("c2").Value
dataSheet.Cells(nextRow, 4).Value = formSheet.Range("d2").Value
End If
End Sub
美好的一天, 我对 excel VBA 变量知之甚少,并且一直在努力使这个工作好几天。 我已将“Workbook2.xlsm”指定为中央数据库文件。它包含A列中的所有个人员工ID(从A2列开始,A1是table header)。 通过另一个“Workbook1.xlsm”中的输入部分,我试图用 VBA 触发以打开工作簿 2/Sheet1,将工作簿 1 中单元格 A2 中输入的个人 ID 与列中的 ID 列表相匹配A 在工作簿 2 中,将工作簿 1 中的培训类型、开始和结束日期复制到工作表 2 中相应 ID 的旁边,然后关闭并保存工作表 2。
Data entry Worksheet 1
Worksheet 2 Database to search ID and paste assignment, on and off from Worksheet 1
提前感谢您的想法。
我创建了类似的工作簿,它基本上使用一个 sheet 来更新另一个 sheet。下面的代码基于一个工作簿。您可以通过在sheet之前添加工作簿名称来修改这两个工作簿,关闭屏幕更新,打开工作簿2,分配值,保存工作簿2,打开屏幕更新。
我建议创建一个 table,以便在添加新员工“TblData”时范围会自动动态变化。您也可以使用命名范围来执行此操作,但根据我的经验,这有点麻烦。通过更多的编码,您可以选择添加员工。将您的按钮命名为“AssignTrainBtn”。此代码位于分配给 AssignTrainBtn
的单击操作的 ManageAssignment sheet 对象中Private Sub AssignTrainBtn_Click()
Dim formSheet As Worksheet
Dim dataSheet As Worksheet
Dim nextRow As Integer
Dim IDCol As Range
Set formSheet = Sheets("ManageAssignments")
Set dataSheet = Sheets("TempAssignments")
Set IDCol = dataSheet.Range("TblData[ID]")
ID = Range("a2")
If ID <> vbNullString Then
Set Rng = IDCol.Find(what:=ID, _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
MatchCase:=False)
If Not Rng Is Nothing Then
nextRow = Rng.Row
Else
MsgBox ("employee not found")
Exit Sub
End If
dataSheet.Cells(nextRow, 2).Value = formSheet.Range("b2").Value
dataSheet.Cells(nextRow, 3).Value = formSheet.Range("c2").Value
dataSheet.Cells(nextRow, 4).Value = formSheet.Range("d2").Value
End If
End Sub