我有一个Userform,它使用组合框和一些文本框来输入,更新或删除表中的行 . 因此,如果我从组合框中选择一条记录,它会自动使用该行中的所有数据填充文本框,然后可以对其进行编辑和更新 .

现在我想要合并一些复选框,作为一个例子,我希望我的表中的一列是“已婚”,所以在userform中有一个复选框,如果你点击它,它返回True . 现在最棘手的是我希望它的工作方式与文本框的工作方式相同,这意味着当我通过组合框选择现有记录时,应根据该条目选中或取消选中复选框 .

以下是userform的完整代码:

关于代码的一些注释:T_0X是我的文本框,C_01是我的组合框,B_0X是添加,删除和保存按钮 .

任何指针都表示赞赏!

Private Sub CheckBox1_Click()

End Sub

Private Sub UserForm_Initialize()
   c_01.List = Sheets("Data").ListObjects(1).DataBodyRange.Value

   sn = Sheets("Data").ListObjects(1).HeaderRowRange
   For j = 1 To UBound(sn, 2)
        Me("L_" & Format(j, "00")).Caption = sn(1, j)
   Next
End Sub

Private Sub c_01_Change()
   With c_01
        B_02.Visible = .ListIndex > -1
        B_03.Visible = True
        If .ListIndex = -1 Then Exit Sub

        For j = 0 To UBound(.List, 2)
            Me("T_" & Format(j, "00")).Text = .Column(j)
            Me("T_" & Format(j, "00")).Locked = False
            If j > 2 Then Me("T_" & Format(j, "00")).Text = Format(.Column(j), "0.00")
        Next
    End With
End Sub

Private Sub T_00_Change()
    M_text 0
    B_02.Visible = T_00.Text <> ""
End Sub
Private Sub T_01_Change()
    M_text 1
End Sub
Private Sub T_02_Change()
    M_text 2
End Sub
Private Sub T_03_Change()
    M_text 3
End Sub
Private Sub T_04_Change()
    M_text 4
End Sub
Sub M_text(y)
    If c_01.ListIndex > -1 Then c_01.Column(y) = Me("T_" & Format(y, "00")).Text
End Sub

Private Sub B_01_Click()    '   Add
   With c_01
        .AddItem
        For j = 0 To UBound(.List, 2)
          .List(.ListCount - 1, j) = ""
        Next

        .ListIndex = .ListCount - 1
   End With

    B_01.Visible = False
    B_02.Visible = False
End Sub
Private Sub B_02_Click()    '   Delete
    With c_01
       .RemoveItem .ListIndex
       If .ListCount > 0 Then .ListIndex = 0

       If .ListIndex = -1 Then
         For j = 0 To UBound(.List, 2)
            Me("T_" & Format(j, "00")) = ""
            Me("T_" & Format(j, "00")).Locked = True
         Next
        .Value = ""
       End If
    End With
End Sub
Private Sub B_03_Click()    '   Save
    With Sheets("Data").ListObjects(1)
       .ShowTotals = False
       If c_01.ListCount = 0 Then .DataBodyRange.ClearContents
       If c_01.ListCount > 0 Then
        ' [0] Write combobox values
         .DataBodyRange.Resize(c_01.ListCount).Value = c_01.List
        ' [1] Resize listobject range
         .Resize .Range.Resize(c_01.ListCount + 1)       ' << resize listobject including header (+1), too
        ' [2] Suggestion to clear at least some lines below as well
         .Range.Offset(.Range.Rows.Count).ClearContents  ' << clear lines after listobject table
       End If
      .ShowTotals = True
    End With

    Hide
  End Sub