1

我正在使用一个包含许多工作表的工作簿,并且我正在使用一个具有 150 多个组合框和 200 个标签的用户窗体。

我想只在一个中设置组合框的特性和设计,并且我想在其中应用很多,所以我不想重复代码数百次。

我应该怎么做?我一直在阅读,但我无法将这些例子与我的相匹配。

这是错误的代码:

Private Sub ComboBox7_Change()
    Dim ws2 As Worksheet: Set ws2 = Sheets("C. VfM Questionnaire ")
    Dim i, p As Integer

    For i = 7 To 31
            If Controls("ComboBox" & i).Value = "Yes" Then
        ws2.Range("G7") = 4
        Me.Controls("Label" & i).BackColor = RGB(146, 208, 80)

        ElseIf Controls("ComboBox" & i).Value = "No" Then
        ws2.Range("G7") = 4
        Me.Controls("Label" & i).BackColor = RGB(255, 33, 26)

        ElseIf Controls("ComboBox" & i).Value = "Not Applicable" Then
        ws2.Range("G7") = 4
        Me.Controls("Label" & i).BackColor = RGB(255, 204, 0)
        End If
    Next i

End Sub

另外我不知道如何触发代码?它是在用户表单中初始化还是在模块中?如您所见,我很新手!

提前非常感谢。

4

1 回答 1

2

如果我正确理解了您的问题,那么您有很多组合框,并且您想更改它们的样式。但是,您不是要更改所有这些,而是​​要更改其中一个,然后让表单将此样式应用于所有这些,对吗?

因此,我们选择一个框作为“样式指南”并将其分配给一个变量。
然后我们遍历表单中的所有组合框,并应用特征。
至于如何触发它,UserForm initalize 肯定会起作用。

这段代码例如:

Private Sub UserForm_Initialize()
Dim origin As ComboBox, c As Variant

Set origin = Me.ComboBox1 'Combobox to copy style from

For Each c In Me.Controls
    If TypeName(c) = "ComboBox" Then
        c.BackColor = origin.BackColor
        c.BackStyle = origin.BackStyle
        c.BorderColor = origin.BorderColor
        c.BorderStyle = origin.BorderStyle
        c.ForeColor = origin.ForeColor
    End If
Next
End Sub

改变这个:
在此处输入图像描述

对此:
在此处输入图像描述

应用左上角第一个框的样式,称为ComboBox1

于 2021-05-22T23:20:34.720 回答