如何在VBA中动态定义标签?
How to define a label dynamically in VBA?
我有一个带有列表视图的用户窗体。在此列表视图中,一列是用复选框定义的。因此,当用户单击多行中的复选框时,我想在标签的标题中显示选定的 ID,例如:
"You are selected: 848, 12133, 414"
我怎样才能做到这一点?
编辑:我刚刚看到你在谈论列表视图...
这是 ExcelForum 上来自 AlphaFrog 的修改后的代码片段:
Private Sub Listview1_ItemCheck(ByVal Item As MSComctlLib.ListItem)
Dim si As MSComctlLib.ListSubItem
For Each si In Item.ListSubItems
si.ForeColor = IIf(Item.Checked, vbBlue, vbBlack)
Next
End Sub
他所做的是根据复选框的状态更改字体颜色 (Item.Checked
)。
您可以使用我下面的原始回复逻辑来获得您想要的结果。
原回复:
这是一个包含 3 个复选框的示例,我只会发布 Checkbox1 的代码以及初始化。 Checkbox1_Click 中的代码将 one-to-one 变为 Checkbox2_Click 和 Checkbox3_Click.
Dim cnt As Integer
Dim checked() As Integer
Dim tmp As Integer
Private Sub CheckBox1_Click()
cnt = 0
ReDim checked(1 To 3)
tmp = 1
For i = 1 To 3
If UserForm1.Controls("Checkbox" & i).Value = True Then
checked(tmp) = i
cnt = cnt + 1
tmp = tmp + 1
End If
Next i
Select Case cnt
Case 0
Label1.Caption = ""
Case 1
Label1.Caption = "You have selected: " & UserForm1.Controls("CheckBox" & checked(tmp - 1)).Caption
Case Is > 1
Label1.Caption = "You have selected: " & UserForm1.Controls("CheckBox" & checked(1)).Caption
For t = 2 To tmp - 1
Label1.Caption = Label1.Caption & ", " & UserForm1.Controls("CheckBox" & checked(t)).Caption
Next t
End Select
End Sub
'same code here for Checkbox2 and 3
Private Sub UserForm_Initialize()
For i = 1 To 3
UserForm1.Controls("CheckBox" & i).Value = False
Next i
Label1.Caption = ""
End Sub
概念验证:
我有一个带有列表视图的用户窗体。在此列表视图中,一列是用复选框定义的。因此,当用户单击多行中的复选框时,我想在标签的标题中显示选定的 ID,例如:
"You are selected: 848, 12133, 414"
我怎样才能做到这一点?
编辑:我刚刚看到你在谈论列表视图...
这是 ExcelForum 上来自 AlphaFrog 的修改后的代码片段:
Private Sub Listview1_ItemCheck(ByVal Item As MSComctlLib.ListItem)
Dim si As MSComctlLib.ListSubItem
For Each si In Item.ListSubItems
si.ForeColor = IIf(Item.Checked, vbBlue, vbBlack)
Next
End Sub
他所做的是根据复选框的状态更改字体颜色 (Item.Checked
)。
您可以使用我下面的原始回复逻辑来获得您想要的结果。
原回复:
这是一个包含 3 个复选框的示例,我只会发布 Checkbox1 的代码以及初始化。 Checkbox1_Click 中的代码将 one-to-one 变为 Checkbox2_Click 和 Checkbox3_Click.
Dim cnt As Integer
Dim checked() As Integer
Dim tmp As Integer
Private Sub CheckBox1_Click()
cnt = 0
ReDim checked(1 To 3)
tmp = 1
For i = 1 To 3
If UserForm1.Controls("Checkbox" & i).Value = True Then
checked(tmp) = i
cnt = cnt + 1
tmp = tmp + 1
End If
Next i
Select Case cnt
Case 0
Label1.Caption = ""
Case 1
Label1.Caption = "You have selected: " & UserForm1.Controls("CheckBox" & checked(tmp - 1)).Caption
Case Is > 1
Label1.Caption = "You have selected: " & UserForm1.Controls("CheckBox" & checked(1)).Caption
For t = 2 To tmp - 1
Label1.Caption = Label1.Caption & ", " & UserForm1.Controls("CheckBox" & checked(t)).Caption
Next t
End Select
End Sub
'same code here for Checkbox2 and 3
Private Sub UserForm_Initialize()
For i = 1 To 3
UserForm1.Controls("CheckBox" & i).Value = False
Next i
Label1.Caption = ""
End Sub
概念验证: