Populate userform with records from current row

后端 未结 3 952
臣服心动
臣服心动 2021-01-25 06:16

I have a userform with several textboxes, radio buttons, dropdowns, etc. When a user creates a new entry, the data is saved on the Data sheet, with one record occupying one row.

3条回答
  •  梦毁少年i
    2021-01-25 06:43

    I'd go like follows:

    • use Tag property of the UserForm object to store a "calling parameter" that will tell UserForm whether to run an InitializeValues() Sub or a FillValues() one

    • use UserForm_Activate event handler to have UserForm decide which action is to be taken

    so, assuming you attach an Edit() sub to your sheet "edit" buttons, the former would be

    Sub Edit()
        With UserForm3
            .Tag = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row '<~~ tell the UserForm there's something to bring in so that it'll fill controls from the sheet instead of initializing them
            .Show
            .Tag = "" '<~~ bring Tag property back to its "null" value
        End With
        Unload UserForm3
    End Sub
    

    then in you UserForm code pane place this

    Private Sub UserForm_Activate()
        If Me.Tag = "" Then '<~~ if there's no info from Tag property...
            InitializeValues '<~~ ... then Initialize controls values
        Else
            FillValues '<~~ ...otherwise fill controls with sheet values
        End If
    End Sub
    
    Private Sub InitializeValues()
        With Me
            .ComboBox1.RowSource = "initRange"
            .serial.Value = "actText1"
            .created_on.Value = "actText2"
            .created_by.Value = "actText3"
            ' and so on...
        End With
    End Sub
    
    Private Sub FillValues()
        With Me
            .serial.Value = Cells(.Tag, 2).Value
            .created_on.Value = Cells(.Tag, 4).Value
            .created_by.Value = Cells(.Tag, 5).Value
            '.. and so on
        End With
    End Sub
    

提交回复
热议问题