2013-04-26 75 views
2

这是我的。我正在使用3个值的下拉列表来隐藏列。每个值都具有对其唯一的特定列,并且在选择某个值时,我需要隐藏与其无关的其他列。我可以只使用worksheet_change作为特定列吗?

我用下面的代码:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Select Case Target.Value 
    Case "Marine" 
     Columns("T:X").EntireColumn.Hidden = True 
     Columns("Z").EntireColumn.Hidden = True 

    Case "Inland" 
     Columns("S").EntireColumn.Hidden = True 
     Columns("U").EntireColumn.Hidden = True 

    Case Else 
     Columns("T:X").EntireColumn.Hidden = False 
     Columns("Z").EntireColumn.Hidden = False 
     Columns("S").EntireColumn.Hidden = False 
     Columns("U").EntireColumn.Hidden = False 
    End Select 
End Sub 

这个工作,当我从下拉菜单中选择值下降,但只要我点击工作表,则隐藏列重新出现另一种细胞。我希望能够在下拉列表中选择一个值,并使单元格保持隐藏状态,直到我在下拉列表中选择另一个值。谁能帮我这个?我试图使用WorkSheet_SelectionChange,但这不起作用。

回答

1

在代码的开始处添加此代码(您需要对其进行调整),以检查单击的范围,并最终在用户单击特殊范围之外时终止该子范围。

Dim isect As Range 
Set isect = Intersect(Target, Me.Range("$a$8:$a$48")) 
If isect Is Nothing Then Exit Sub 

你也可以查看地址:

If Target.Range Like "$X$*" Then... 

更新:
在另一方面,如果列必须根据您在列中单击显示/隐藏例如,A,我宁愿使用SelectionChange事件。以下是一个示例:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
     Dim isect As Range 
     Set isect = Intersect(Target, Me.Range("$a$8:$a$48")) 
     If Not isect Is Nothing Then 
      select case Target.Value 
       ..... 
      end select 
     End If 
    End Sub 
+0

嗨@iDevlop感谢您的回复。下拉工作,但当我点击任何其他单元然后显示隐藏的列。即使点击其他单元格,我也希望列保持隐藏状态。 – 2013-04-26 16:28:06

+0

嘿@iDevlop,你能帮我解决这个问题吗?你之前的回答非常接近我想要做的。 – 2013-04-30 08:40:37

+0

我可以尝试...继续。不知道我能立即回答,因为我还必须工作一点:-)并被其他事情打断,但是去 – 2013-04-30 09:35:59

1

我认为问题是您的Case Else声明。当您转到其他单元格时将触发工作表更改事件,并且由于该值既不是“Marine”也不是“Inland”,因此将执行该语句并将所有列设置为Hidden = False

由于您在下拉菜单中有3个选项,因此只需要明确声明第三个Case语句而不是全部包含。

+0

嗨@Jay。我使用'Case Else'来确保如果没有选择单元格,则所有单元都不会被隐藏。我怎样才能确保在没有选择所有单元格出现时?我很感激帮助。 – 2013-04-30 08:46:07

2

用Target.Address包装代码。

例如,下拉是在Cell“B2”然后, 代码将如下所示:

If Target.Address(True, True) = "$B$2" Then 
    Select Case Target.Value 
    Case "Marine" 
     Columns("T:X").EntireColumn.Hidden = True 
     Columns("Z").EntireColumn.Hidden = True 

    Case "Inland" 
     Columns("S").EntireColumn.Hidden = True 
     Columns("U").EntireColumn.Hidden = True 

    Case Else 
     Columns("T:X").EntireColumn.Hidden = False 
     Columns("Z").EntireColumn.Hidden = False 
     Columns("S").EntireColumn.Hidden = False 
     Columns("U").EntireColumn.Hidden = False 
    End Select 
End If 

此外,猜测代码的目的,我已经调整了进一步它。 简化版本如下所示:

If Target.Address(True, True) = "$B$2" Then 
    Select Case Target.Value 
    Case "Marine" 
     Columns("S:Z").EntireColumn.Hidden = False 
     Columns("T:X").EntireColumn.Hidden = True 
     Columns("Z").EntireColumn.Hidden = True 
    Case "Inland" 
     Columns("S:Z").EntireColumn.Hidden = False 
     Columns("S").EntireColumn.Hidden = True 
     Columns("U").EntireColumn.Hidden = True 

    Case Else 
     Columns("S:Z").EntireColumn.Hidden = False 
    End Select 
End If 
+0

嗨@Aditya Deo,谢谢你的回复。下拉列表在整个列上。在这种情况下,我将如何使用范围? – 2013-04-26 15:48:29

+0

此外,在隐藏列后,我还想更改其他下拉列表中的值。而且即使在我改变列中的下拉列表时,这些值也应该保持不变。这可能吗? – 2013-04-27 12:24:21

1

查看此代码。

Private Sub Worksheet_Change(ByVal Target As Range) 
Select Case Target.Column 

Case 2 

    If Target.Value = "Marine" Then 

     Columns("S").EntireColumn.Hidden = False 
     Columns("U").EntireColumn.Hidden = False    
     Columns("T:X").EntireColumn.Hidden = True 
     Columns("Z").EntireColumn.Hidden = True 

    ElseIf Target.Value = "Inland" Then 

     Columns("S").EntireColumn.Hidden = True 
     Columns("U").EntireColumn.Hidden = True 
     Columns("T:X").EntireColumn.Hidden = False 
     Columns("Z").EntireColumn.Hidden = False 
    Else 

     Columns("T:X").EntireColumn.Hidden = False 
     Columns("Z").EntireColumn.Hidden = False 
     Columns("S").EntireColumn.Hidden = False 
     Columns("U").EntireColumn.Hidden = False 

    End If 

End Select 

End Sub 

立即在选择的情况下的码的第4行,得到在其中具有在片材启用下拉菜单或验证,在给定的情况下,它2的列数的列数,代表'B'栏,和Boom!

我根据过去在您的代码中的经验做了一些修正。假设对于海洋参赛作品必须在'S'栏和'U'栏中进行,并且岛项应在'T'和'Z'栏中进行。

在您的原始代码中,如果您先在特定的项目中选择了“Marine”,并且稍后将其更正为“Island”,那么只会隐藏所有必需的列,但您会拥有希望Island列不被隐藏(可能会输入这些字段中的数据),我现在已经纠正了这些问题。

+0

嗨彩信,谢谢你的回复,但我得到一个错误,因为我的选择案例没有结束选择。它不希望我在代码后的任何地方添加它! – 2013-04-27 18:41:52

+0

@PeterKhayundi代码适合我!将所有代码完全粘贴在您拥有数据的工作表中。 – MeenakshiSundharam 2013-05-03 13:47:28

相关问题