我对宏的世界全新,但之前在QTP上做了一些VBScript。我希望创建一个宏,它将隐藏某些列,具体取决于从下拉列表中的用户选择。我不确定语法以及如何识别我想隐藏的列以及如何使用下拉列表识别单元格。
以下是我看待它的大致情况 -
Sub HideColumns()
If cell(ViewType).Value = "Option 1" Then
Cells(Column_1, Column_2).EntireColumn.Hidden = True
ElseIf cell(ViewType).Value = "Option 2" Then
Cells(Column_2, Column_3).EntireColumn.Hidden = True
ElseIf cell(ViewType).Value = "Option 3" Then
Cells(Column_3, Column_4).EntireColumn.Hidden = True
End If
End Sub
我在Excel中使用下拉列表ViewType
命名了单元格 - VBA会以这种方式识别对象,还是需要声明它?
如何识别我想隐藏的列?
答案 0 :(得分:1)
您在Excel中定义的名称在Excel中可用作常规变量,因此这不应该是任何问题。
在您的情况下,我建议使用Switch Case
声明。这看起来如下:
Select Case ActiveWorkbook.Names("ViewType").RefersToRange
Case "Option 1"
' Hide Column X
Case "Option 2"
' Hide Column Y
End Select
另请注意,一旦更改单元格,要调用宏,您需要将此代码放入
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
此Sub必须放在Sheet本身的代码部分中,并且每次在Sheet中更改单元格时都会执行。
请告诉我这是否足以让您继续,或者如果您需要更多帮助。
答案 1 :(得分:1)
我喜欢在隐藏和取消隐藏列时使用自定义视图。自定义视图位于“视图”选项卡(> = 2007)和“视图”菜单(< = 2003)下。这是一个例子:
右键单击工作表选项卡,然后选择“查看代码”并将以下代码放在该代码窗格中
Private Sub Worksheet_Change(ByVal Target As Range)
'Only work on the cell named ViewType
'The Me keyword refers to the sheet whose code module you're in
If Target.Address = Me.Range("ViewType").Address Then
'Show the custom view that corresponds to the value selected
'in the dropdown
ActiveWorkbook.CustomViews(Target.Value).Show
End If
End Sub
当用户从下拉列表中选择Option1时,会显示隐藏第1列和第2列的Option1视图。这是一种管理隐藏和取消隐藏的好方法,因为如果您想要更改自定义视图,可以调整自定义视图,而不是编辑代码。