2017-04-22 69 views
-1

我新手在編寫VBA代碼 - 我會geatfull如果你能指點我如何更有效地寫這個隱藏列代碼:這可以隱藏列代碼更有效地寫入?

代碼的目的是:如果在列的單元格F4然後隱藏列F等。

Private Sub Worksheet_Change(ByVal Target As Range) 

If Range("F4").Value = "" Then 
    Columns("F").EntireColumn.Hidden = True 
Else 
    Columns("F").EntireColumn.Hidden = False 
End If 

If Range("G4").Value = "" Then 
    Columns("G").EntireColumn.Hidden = True 
Else 
    Columns("G").EntireColumn.Hidden = False 
End If 

If Range("H4").Value = "" Then 
    Columns("H").EntireColumn.Hidden = True 
Else 
    Columns("H").EntireColumn.Hidden = False 
End If 

If Range("I4").Value = "" Then 
    Columns("I").EntireColumn.Hidden = True 
Else 
    Columns("I").EntireColumn.Hidden = False 
End If 

If Range("J4").Value = "" Then 
    Columns("J").EntireColumn.Hidden = True 
Else 
    Columns("J").EntireColumn.Hidden = False 
End If 

If Range("K4").Value = "" Then 
    Columns("K").EntireColumn.Hidden = True 
Else 
    Columns("K").EntireColumn.Hidden = False 
End If 

If Range("L4").Value = "" Then 
    Columns("L").EntireColumn.Hidden = True 
Else 
    Columns("L").EntireColumn.Hidden = False 
End If 

If Range("M4").Value = "" Then 
    Columns("M").EntireColumn.Hidden = True 
Else 
    Columns("M").EntireColumn.Hidden = False 
End If 

End Sub 
+0

我覺得奇怪,是隱藏列每當發生「變更」事件時。 – YowE3K

回答

2

跨列6環路至13可能改善的事情:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim c As Long 
    For c = 6 To 13 
     Columns(c).EntireColumn.Hidden = IsEmpty(Cells(4, c).Value) 
    Next 
End Sub 
+0

我喜歡'.Hidden'是如何基於'IsEmpty()'的,因爲它會返回'TRUE'或'FALSE',而不是使用另一個'IF'語句。我真的需要在我的宏中學習/關注更多的注意力,並且做這樣的事情,非常高效! – BruceWayne

+0

@ YowE3K非常感謝你這個偉大的作品! –

+1

@BruceWayne - 我最初把那行寫成'... = Cells(4,c).Value =「」'(它也返回'True'或'False'),但在問題中看到「empty」並決定'IsEmpty'是編碼它的更合適的方式。 – YowE3K

0

檢查: -

Sub Hide_Columns() 
Dim c As Range 

    For Each c In Range("F4:K4").Cells 
     If c.Value = "" Then 
      c.EntireColumn.Hidden = True 
     End If 
    Next c 

End Sub 

感謝:-)

+0

我想擴展VBA代碼 - 但第二部分不工作,任何想法爲什麼? '私人小組Worksheet_Change(BYVAL目標作爲範圍) 尺寸C只要 昏暗增量只要 當c = 6至13個 列(c)中.EntireColumn.Hidden =爲IsEmpty(細胞(4,C)。價值) 下一頁 對於delta = 17到22 列(delta).EntireColumn.Hidden = IsEmpty(Cells(4,c).Value) Next End Sub' –