将一个宏用于多个实例

时间:2015-06-10 20:30:32

标签: excel vba excel-vba

我尝试使用Excel VBA来控制文本框背景颜色,具体取决于某些单元格中的值。每个文本框对应于具有值的不同单元格。我有大约60个文本框可供控制,每种颜色有4种可能的颜色。使用switch语句,我基本上必须为60个文本框中的每一个做4个案例...假设我使用它现在设置的方式,如下所示:

Select Case Cells(50, 2).Value
        Case Is = 1, 6, 11, 16
            .TextBox13.BackColor = RGB(0, 255, 0)
        Case Is = 5
            .TextBox13.BackColor = RGB(255, 0, 0)
        Case Is = 0
            .TextBox13.BackColor = RGB(255, 255, 255)
        Case Is = 10, 15
            .TextBox13.BackColor = RGB(255, 255, 0)
    End Select

依此类推所有60.但是,值范围始终相同,并且颜色对应于每个颜色的相同值。我假设必须有一种方法来构建一个模块来实际设置颜色,并且只使用switch语句来确定要发送到该模块的单元格吗?

编辑:我已附上工作区的屏幕截图,以便您了解我的目标

screenshot

2 个答案:

答案 0 :(得分:0)

你的一些代码是错误的。它是Select Case ... End Select

Select Case Cells(50, 2).Value
    Case 1, 6, 11, 16
        tbxObject.BackColor = RGB(0, 255, 0)
    Case 5
        tbxObject.BackColor = RGB(255, 0, 0)
    Case 0
        tbxObject.BackColor = RGB(255, 255, 255)
    Case 10, 15
        tbxObject.BackColor = RGB(255, 255, 0)
End Select

请参阅:Select ... Case statement

如果多次使用某段代码,则必须将其移动到单个通用soubroutine中,该soubroutine可以接受TextBox个对象作为输入参数。

Sub ColorMyTextBox(wsh As Worksheet, sTextBoxName As String)
   Dim txtObject As OleObject

   Set txtObject = wsh.OleObjects(sTextBoxName)
   If TypeName(txtObject) <> "TextBox" Then Goto Exit_Sub

  'here Select Case statement

Exit_Sub:

End Sub

知道了吗?

答案 1 :(得分:0)

好的,如果我使用它,我将如何指定要在case语句中使用的单元格数?它不会永远是单元格(50,2)...而且在发送工作表名称时也会出错