有人可以向我指出正确的方向吗?
查看以下代码,而不是重复行,我想循环以节省时间...
'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