Excel VBA:隐藏两个给定日期之间的列

时间:2017-01-13 08:24:51

标签: excel vba excel-vba

我正在全年的工作日列表上工作。这些行将由不同的用户手动填充,目的是在整整一年中记录这些值。列特定于一年中的每一天,因此需要大量滚动才能找到特定范围。

我想要实现的是拥有两个可以填充两个日期的单元格,一个开始日期和结束日期,当输入这些日期时,所有其他列都将从视图中隐藏。

我发现了一种方法可以在一个单元格中的给定日期之前隐藏列,但是有些方法可以帮助我们在另一个单元格中的给定日期之后隐藏列。在这种情况下,单元格E35

到目前为止,该方法的VBA代码是:

Private Sub Worksheet_Change(ByVal Target As Range)
'Updateby Extendoffice 20160725
    Dim xCell As Range
    If Target.Address <> Range("E34").Address Then Exit Sub
    Application.ScreenUpdating = False
    For Each xCell In Range("H1:NG1")
        xCell.EntireColumn.Hidden = (xCell.Value < Target.Value)
    Next
    Application.ScreenUpdating = True
End Sub

这里的参考图片: Example

提前谢谢// R

2 个答案:

答案 0 :(得分:3)

跟进@dgorti回答,在以后的情况下,当您想监视多个范围的工作表时,您可以使用:

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("E34:E35")) Is Nothing Then
  ' perform your code hewe

Else
    ' you can put your Exit Sub here
End If

End Sub

答案 1 :(得分:2)

Private Sub Worksheet_Change(ByVal Target As Range)
 'Updateby Extendoffice 20160725
  Dim xCell As Range
  If Target.Address <> Range("E34").Address AND Target.Address <> Range("E35").Address Then Exit Sub
  Application.ScreenUpdating = False
  For Each xCell In Range("G1:NG1")
    xCell.EntireColumn.Hidden = (xCell.Value < Range("E34").Value or xCell.Value > Range("E35").Value )
  Next
  Application.ScreenUpdating = True
End Sub