循环通过组合框 VBA答案

您所在的位置:网站首页 vba颜色代码 循环通过组合框 VBA答案

循环通过组合框 VBA答案

2023-04-07 13:05| 来源: 网络整理| 查看: 265

您要查找的语法是

Me.Controls.Item("ComboBox" & j)

但是让用户控件使用随机的默认名称是不好的风格。从一开始就给它们适当的名称,以便在 VBA 代码中对它们的引用实际上是有意义的。

这是一种更精细的方法:在包含颜色组合框的用户窗体中,编辑它们的属性并将它们命名为 ColorBox_0 到 ColorBox_4。然后,在该用户窗体的代码中,添加:

Option Explicit Private Const COLOR_BOX_COUNT As Integer = 4 ' actually that's 5, as we count from 0 Private Sub UserForm_Initialize() Dim cmb As ComboBox, i As Integer ' Prepare color combo boxes with actual RGB color codes and names For i = 0 To COLOR_BOX_COUNT Set cmb = Me.Controls.Item("ColorBox_" & i) cmb.Clear cmb.ColumnCount = 2 cmb.ColumnHeads = False cmb.ColumnWidths = "0;" cmb.AddItem "000000": cmb.Column(1, 0) = "Black" cmb.AddItem "FF0000": cmb.Column(1, 1) = "Red" cmb.AddItem "00FF00": cmb.Column(1, 2) = "Green" cmb.AddItem "0000FF": cmb.Column(1, 3) = "Blue" cmb.AddItem "FF00FF": cmb.Column(1, 4) = "Magenta" cmb.AddItem "7C2927": cmb.Column(1, 5) = "Brown" cmb.MatchRequired = True cmb.Value = cmb.List(0) ' pre-select first entry Next i End Sub Public Function GetSelectedColors() As Long() Dim cmb As ComboBox, i As Integer Dim result(COLOR_BOX_COUNT) As Long For i = 0 To COLOR_BOX_COUNT Set cmb = Me.Controls.Item("ColorBox_" & i) If IsNull(cmb.Value) Then result(i) = -1 Else result(i) = GetColor(cmb.Value) End If Next i GetSelectedColors = result End Function

注意GetSelectedColors() 如何返回颜色数组。

还有一个辅助函数可以将 RGB 颜色代码转换为数字(颜色是 VBA 中的 Long 值,因此如果您想以某种方式实际使用颜色,例如设置控件的BackColor,您实际上可以直接使用该值):

Function GetColor(rgb As Variant) As Long If Len(rgb) = 6 And IsNumeric("&H" & rgb) Then GetColor = CLng("&H" & Right(rgb, 2) & Mid(rgb, 3, 2) & Left(rgb, 2)) End If End Function

有了这一切,您不再需要魔法常量 (1 = Black, 3 = Red),用户窗体在启动时自行引导,全局变量也消失了,这是一件好事。

我做的唯一约定是-1 的颜色值意味着用户没有选择组合框中的项目。这不应该发生,因为 ComboBoxes 从预选的第一个条目开始。

现在可以直接获取选中的颜色了

Private Sub TestButton_Click() Dim colors() As Long colors = Me.GetSelectedColors ' do something with them' End Sub

或许

Private Sub ColorBox_1_Change() ColorLabel_1.BackColor = GetColor(ColorBox_1.Value) End Sub


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3