Excel VBA用户窗体 - 更新/覆盖数据

时间:2015-03-25 05:38:51

标签: excel excel-vba userform vba

我试图通过UserForm来提取和更新某些记录,但我几乎得到了它,除了那些没有按预期工作的代码。它应该覆盖以前的记录(无论在IDNum找到的记录的同一行中找到什么信息。

出于某种原因,当它应覆盖Column A之后的所有内容时,它会从B列开始复制数据。

这是代码。

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.任何输入都非常感谢。

1 个答案:

答案 0 :(得分:2)

它应该以:

开头
.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工作。