我目前正在处理我的工作项目,这需要对Excel有很好的理解。对于这个项目,我必须设计一个Excel模板,我目前正在研究这个。
我对如何使用Excel有一些了解,但是在使用VBA时不包含Excel中的编码。
我在互联网上找到了一些代码,这些代码并没有完全帮助我处理我的问题。我的问题是我想根据一个单元格中函数的结果隐藏一些列。正如您在下面看到的,我已经创建了一些代码,但在尝试了所有内容之后,我仍然无法隐藏多个列。我在互联网上找到了一些选择多列的解决方案,但不幸的是,我无法在我的代码中使用它。如果您对我的问题有任何解决方案,请告诉我。在此先感谢您的帮助。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("B5").Value = "USD" Then
Columns("C").EntireColumn.Hidden = True
ElseIf Range("B5").Value = "LC" Then
Columns("C").EntireColumn.Hidden = False
End If
End Sub
答案 0 :(得分:1)
可能有几种方法可以解决您的问题。与多个行或列交互时,需要使用Range
属性。这是一种方式(假设连续范围):
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("B5").Value = "USD" Then
Range("C:D").EntireColumn.Hidden = True
ElseIf Range("B5").Value = "LC" Then
Range("C:D").EntireColumn.Hidden = False
End If
End Sub
另外,正如Pᴇʜ在评论中指出的那样,使用Change事件可能更好,因为您只关心B5是否/何时发生变化。 SelectionChange
事件的触发可能比您需要的更多(再次,在您的工作表设置中等待)。以下是使用不同事件的相同代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$5" Then
If Target.Value = "USD" Then
Range("C:D").EntireColumn.Hidden = True
ElseIf Target.Value = "LC" Then
Range("C:D").EntireColumn.Hidden = False
End If
End If
End Sub
只是为了完成整体问题,这里是一种与非连续范围进行相同任务的方法:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$5" Then
If Target.Value = "USD" Then
Union(Columns("C"), Columns("G")).EntireColumn.Hidden = True
ElseIf Target.Value = "LC" Then
Union(Columns("C"), Columns("G")).EntireColumn.Hidden = False
End If
End If
End Sub
答案 1 :(得分:0)
请在下面找到帮助我解决问题的代码。感谢用户Pᴇʜ和sous2817。希望这可能有助于其他人。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("B5").Value = "USD" Then
Union(Columns("C"), Columns("E")).EntireColumn.Hidden = True
ElseIf Range("B5").Value = "LC" Then
Union(Columns("C"), Columns("E")).EntireColumn.Hidden = False
End If
End Sub