Excel VBA UserForm – 更新/覆盖数据

我试图拉和更新通过UserForm一些logging,我几乎得到它,除了一块代码不按预期工作。 它应该覆盖之前的logging(无论在与IDNumfind的logging相同的行中find的信息)。

出于某种原因,它开始复制B列的数据,因为它应该覆盖Column A所有内容。

这是代码。

 Private Sub RecordUpdate_Click() Dim LastRow As Long Dim IDNum As String Dim rngIDNum As Range Dim WriteRow As Long Dim ws As Worksheet Set ws = Worksheets("Records") With ActiveSheet LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row Set rngIDNum = .Range("E1:E" & LastRow) IDNum = txtID.Value WriteRow = Application.Match(IDNum, rngIDNum, 0) Cells(WriteRow, 1).Select With ActiveCell .Offset(0, 1).Value = txtName.Value .Offset(0, 2).Value = txtlName.Value .Offset(0, 3).Value = txtGender.Value .Offset(0, 4).Value = txtAge.Value .Offset(0, 5).Value = txtID.Value End With End With End Sub 

它将完好无损地保留在Column A ,并将编辑后的条目从B复制到F,而不是A复制到E.任何input都将不胜感激。

它应该从以下开始:

 .Offset(0, 0).Value = txtName.Value 

ColumnIndex设置为1将使其向右1列。
此外,而不是使用Select你可以直接在这个对象上工作:

 With .Cells(WriteRow, 1) .Offset(0, 0).Value = txtName.Value . . .Offset(0, 4).Value = txtID.Value End With 

或者您也可以使用Range.Find Method来尝试您的代码版本。

 Private Sub RecordUpdate_Click() Dim LastRow As Long Dim IDNum As String Dim rngIDNum As Range Dim ws As Worksheet Set ws = Worksheets("Records") ' Find the ID With ws LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row IDNum = txtID.Value Set rngIDNum = .Range("E1:E" & LastRow).Find(IDNum, .Range("E" & LastRow)) End With ' Inform and Exit if ID doesn't exist If rngIDNum Is Nothing Then MsgBox "ID not found": Exit Sub ' Update the values With rngIDNum .Offset(0, -4).Value = txtName.Value .Offset(0, -3).Value = txtlName.Value .Offset(0, -2).Value = txtGender.Value .Offset(0, -1).Value = txtAge.Value .Offset(0, 0).Value = txtID.Value End With End Sub 

我以为你正在工作Worksheet("Records") ,你已经在ws分配variables。