VBA范围查找1列中显示/隐藏另一列
这个让我很生气,希望你们中的一个能告诉我我做错了什么。
我想要做的就是如果列I中的任何单元格包含值“Y”,则列J被隐藏。 如果您从任何单元格中删除Y,则J列再次出现。
这是我的代码:
Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range Set rng = Range("I:I") Set cell = rng.Find(What:="Y") If cell Is Nothing Then Columns("J").EntireColumn.Hidden = True Else Columns("J").EntireColumn.Hidden = False End If End Sub
基本上,代码完全没有。 这让我更难过,因为我不知道我做错了什么。
试试以下…
Private Sub Worksheet_Change(ByVal Target As Range) Dim cell As Range Columns("I:I").Select Set cell = Selection.Find(What:="Y", After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) If cell Is Nothing Then Columns("J").EntireColumn.Hidden = False Else Columns("J").EntireColumn.Hidden = True End If End Sub
这是有用的东西:
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range If Target.Column = 9 Then With Range("I:I") Set c = .Find("Y") If Not c Is Nothing Then Columns("J").EntireColumn.Hidden = True Else Columns("J").EntireColumn.Hidden = False End If End With End If End Sub
- 为了确保它能正常工作,请将代码放在相应的表单中,而不是放在模块中
- 确保macros已启用
首先,如果您的工作簿中有一个单元格用于testing列I
是否有任何Y
,则可以保持此VBA非常简单。 我把下面的单元格A1
=COUNTIF(I:I,"Y")
我build议把这个放在工作表上,因为Excel很聪明,并且比VBA更快地执行这个计算 – 它也让你看到发生了什么。
我们现在可以使用A1
的值来决定是否隐藏macrosJ中的J列
首先,当打开工作簿时,testing列J
是否处于正确的状态可能是一个好主意,因此将以下代码放入ThisWorkbook
模块中。 这个代码是可选的
Sub Workbook_Open() With Me.Worksheets("Sheet1") If .Range("A1").Value > 0 Then .Range("J:J").EntireColumn.Hidden = True Else: .Range("J:J").EntireColumn.Hidden = False End If End With End Sub
然后,要监视列I
值的任何更改,请将以下代码放入工作表模块中
Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Me.Range("I:I")) Is Nothing Then If Me.Range("A1") > 0 Then Me.Range("J:J").EntireColumn.Hidden = True Else Me.Range("J:J").EntireColumn.Hidden = False End If End If End Sub
注意:此代码不是为一次更改多个单元格的用户devise的,如果您打算如上所述使用它,则这不应该成为问题。 如果您希望一次粘贴多个单元格(例如),则需要稍微修改。
Private Sub Worksheet_Change(ByVal Target As Range) Columns("J").EntireColumn.Hidden = WorksheetFunction.CountIf(Columns("I"),"Y") >0 End Sub
要么
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Columns("I")) Is Nothing Then Columns("J").EntireColumn.Hidden = WorksheetFunction.CountIf(Columns("I"),"Y") >0 End Sub