我有一个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