如何为几个复选框执行相同的代码来设置复选框值?

时间:2016-02-18 17:00:17

标签: excel vba excel-vba checkbox

我在Excel userform中有几个复选框(总共10个),它们都应该具有相同的行为。这意味着,当我重新加载表单时,复选框的值应该更改,具体取决于电子表格中包含实际所选行的值。

以下代码适用于一个复选框:

If Sheet1.Cells(iRow, Sheets("aux").Range("B21")) = "X" Then
    cbERW.Value = True
ElseIf Sheet1.Cells(iRow, Sheets("aux").Range("B21")) = "?" Then
    cbERW.Value = Null
Else
    cbERW.Value = False
End If

如何以最简单的方式为多个复选框执行此操作?但是对于每个复选框,引用的行和列都可以更改。例如,下一个看起来像这样(cbHSAW而不是cbERW,列B22而不是B21):

If Sheet1.Cells(iRow, Sheets("aux").Range("B22")) = "X" Then
    cbHSAW.Value = True
ElseIf Sheet1.Cells(iRow, Sheets("aux").Range("B22")) = "?" Then
    cbHSAW.Value = Null
Else
    cbHSAW.Value = False
End If

有人知道如何轻松地做到这一点吗?

1 个答案:

答案 0 :(得分:2)

您可以将测试语句包装在函数中并传递特定复选框的范围。然后设置返回结果可以作为复选框的值。以下内容需要针对您的表单和范围进行修改,但会得到所需的结果。

'Function to test the value of the range
Private Function SetCheckBox(ByVal rng As Range)
If rng.Value = "X" Then
    SetCheckBox = True
ElseIf rng.Value = "?" Then
    SetCheckBox = Null
Else
    SetCheckBox = False
End If
End Function


Private Sub UserForm_Initialize()
'Set value for each checkbox by passing its range to the function
CheckBox1.Value = SetCheckBox(Sheets("aux").Range("A1"))
CheckBox2.Value = SetCheckBox(Sheets("aux").Range("A2"))
CheckBox3.Value = SetCheckBox(Sheets("aux").Range("A3"))
CheckBox4.Value = SetCheckBox(Sheets("aux").Range("A4"))
End Sub

enter image description here