创建VBA循环到索引复选框和列



有人可以向我指出正确的方向吗?

查看以下代码,而不是重复行,我想循环以节省时间...

'show/hide SN# DEFECTIVE
    If CheckBox2.Value = True Then Columns("f").EntireColumn.Hidden = False
    If CheckBox2.Value = False Then Columns("f").EntireColumn.Hidden = True
'show/hide SN# INSTALLED
    If CheckBox3.Value = True Then Columns("g").EntireColumn.Hidden = False
    If CheckBox3.Value = False Then Columns("g").EntireColumn.Hidden = True
'show/hide SN# DESCRIPTION
    If CheckBox4.Value = True Then Columns("h").EntireColumn.Hidden = False
    If CheckBox4.Value = False Then Columns("h").EntireColumn.Hidden = True
'show/hide SN# DESCRIPTION
    If CheckBox4.Value = True Then Columns("h").EntireColumn.Hidden = False
    If CheckBox4.Value = False Then Columns("h").EntireColumn.Hidden = True

我有以下内容,它效果很好...

For i = 2 To 4
     chk = Me.Controls("checkbox" & i).Value
        MsgBox "checkbox " & i & " " & chk
            If chk = False Then
                Columns("f").EntireColumn.Hidden = True
                Else
                    Columns("f").EntireColumn.Hidden = False
           End If
Next i

但是,我也想索引列,但是这些被确定为"字母",所以我还能将" f"递增到下一个字母" g",等等...

我不会为此使用循环,除非您还有更多可更改可见性的列。

但是,我要做的是避免使用IF,并简单地使用相反的相对值将其设置为隐藏的属性值,如下所示。更可读,可维护,当然也短。

Columns("f").EntireColumn.Hidden = Not CheckBox2.Value
Columns("g").EntireColumn.Hidden = Not CheckBox3.Value
Columns("h").EntireColumn.Hidden = Not CheckBox4.Value

编辑:我不建议您以您的方式为您的问题提供答案:使用CHR函数返回字母。

For i = 2 To 4
    chk = Me.Controls("checkbox" & i).Value
    MsgBox "checkbox " & i & " " & chk
        If chk = False Then
            Columns(chr(100+i)).EntireColumn.Hidden = True
        Else
            Columns(chr(100+i)).EntireColumn.Hidden = False
        End If
Next i

甚至用我的方式短:

For i = 2 To 4
    Columns(chr(100+i)).EntireColumn.Hidden = Not Me.Controls("checkbox" & i).Value
Next i

最新更新