我正在使用用户表单来更新工作表上的现有数据。我可以 创建新记录就好了。我创建了一个带有 组合框以搜索名称。它可以很好地提取人员数据,并且我可以更改信息。但是,当我单击更新按钮时,会发生错误。在添加一条我不想发生的全新行之前,我调整了代码。我只想用编辑后的信息更新现有的数据行。
在复制记录后,我尝试在VBA中使用MATCH函数。
Private Sub Update_record_Click()
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Master")
Dim n As Long
Dim empname As String
empname = Application.Match(VBA.CStr(Me.Update_record.Value),
sh.Range("C:C"), 0)
sh.Range("A" & empname).Value = Me.First_Name.Value
sh.Range("B" & empname).Value = Me.Last_Name.Value
sh.Range("D" & empname).Value = Me.MainPX.Value
sh.Range("E" & empname).Value = Me.AltPX.Value
sh.Range("F" & empname).Value = Me.Job_Role.Value
sh.Range("G" & empname).Value = Me.WristBand.Value
sh.Range("H" & empname).Value = Me.Team.Value
sh.Range("I" & empname).Value = Me.Unit.Value
Range("A2:J" & n).Sort key1:=Range("A2:A" & n), order1:=xlAscending,
Header:=xlNo
Me.First_Name.Value = ""
Me.Last_Name.Value = ""
Me.MainPX.Value = ""
Me.AltPX.Value = ""
Me.Job_Role.Value = ""
Me.WristBand.Value = ""
Me.Team.Value = ""
Me.Unit.Value = ""
MsgBox "Record has been updated", vbInformation
End Sub
这是应用程序出错的地方...它在此处停止...在此行上
empname = Application.Match(VBA.CStr(Me.Update_record.Value),
sh.Range("C:C"), 0)
因此数据永远不会更新到该行。以下是两个屏幕截图...一个工作表和一个用户窗体。
答案 0 :(得分:1)
我可以立即考虑通过三种方式进行处理。我还没有测试前两个,所以如果您遇到任何问题,请告诉我。
单向
Dim fName As String
Dim lName As String
Dim NameToSearch As String
Dim RecRow As Long
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Master")
fName = FirstNameTextbox.Value '<~~ First Name textBox
lName = LastNameTextbox.Value '<~~ Last Name textBox
NameToSearch = fName & ", " & lName
empname = Application.WorksheetFunction.Match(NameToSearch, sh.Range("C:C"), 0)
两种方式
此方法使用.Find
。
Dim fName As String
Dim lName As String
Dim NameToSearch As String
Dim aCell As Range
Dim ws As Worksheet
Dim RecRow As Long
fName = FirstNameTextbox.Value
lName = LastNameTextbox.Value
NameToSearch = fName & ", " & lName
Set ws = ThisWorkbook.Sheets("Master")
With ws
Set aCell = .Columns(3).Find(What:=NameToSearch, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not aCell Is Nothing Then
RecRow = aCell.Row '<~~ This is the row where the data is
Else
MsgBox SearchString & " not Found"
End If
End With
三种(我更喜欢)
在工作表A的列中插入一列,并将其命名为ID
。这将具有唯一的序列号(行号?)。读取项目时,也要阅读该项目,并将其写回到单元格中,请使用该ID
进行写回。无需使用Match
或.Find
在这种情况下,假设序列号从第2行的1开始,您将始终更新(ID + 1)
行。