2016-12-22 35 views
0

有人可以請指點我在正確的方向嗎?創建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」,等等......

回答

0

我除非你有,否則不會使用循環e更多的專欄來改變能見度。

但是,我會做的肯定是避免Ifs,並簡單地使用關聯複選框的值的相反設置爲像下面的隱藏屬性值。更可讀,可維護,當然更短。

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 
+0

哇,太感謝了,這些選項都可能引發對我來說...謙虛地感謝您的時間。 –

+0

@DjrileyFdkns聽起來很有幫助!別客氣。因此,現在是時候點擊「接受爲答覆」按鈕來將這一努力標記爲答案。祝大家2017! – smozgur