这个让我发疯,所以希望你们其中一个能告诉我自己做错了什么。
我想要做的就是如果第一列中的任何单元格包含值" 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
基本上代码绝对没有。这比惹恼我更让我烦恼,因为我不知道自己做错了什么。
答案 0 :(得分:0)
尝试以下方法......
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
答案 1 :(得分:0)
这是可行的:
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
答案 2 :(得分:0)
首先,如果您的工作簿中有一个单元格来测试列Y
中是否有I
,则可以使此VBA非常简单。我将以下内容放入单元格A1
=COUNTIF(I:I,"Y")
我建议将其放在工作表上,因为Excel很聪明,并且比VBA更快地执行此计算 - 它还可以让您了解正在进行的操作。
我们现在可以使用A1
的值来确定是否隐藏宏
<小时/> 首先,当您打开工作簿时,测试列
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
注意:此代码不是为用户一次更改多个单元格而设计的,如果您打算按照描述使用它,这不应该是一个问题。如果您希望一次粘贴多个单元格(例如),则需要稍微调整一下。
答案 3 :(得分:0)
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