我制作了一个电子表格来从一系列标准选项中指定装饰选择。
有五个不同的范围,因此这是第一个选择,然后每个范围内还有其他选择。
因此,在工作表的开始处,我使用了一个“框架”和五个“单选按钮”,并将此选择链接到单元格P1
。
因此,一旦做出此选择,那么我想隐藏各行并仅显示与第一个选择相关的选择(第 10-19 行与范围 1 相关,第 20-29 行与范围 2 相关等)。
下面是我的“代码”,但当我更改单选按钮选择时它什么也不做(我可以看到单元格中的值P1
按预期变化)。
Sub HideShow()
'
' HideShow Macro
' Show only the selection pane assocated to the Design line selection
If Range("P1").Value = 1 Then ‘Decoration Range A
Rows("10:19").Select
Selection.EntireRow.Hidden = False
Rows("20:59").Select
Selection.EntireRow.Hidden = True
ElseIf Range("P1").Value = 2 Then 'Decoration Range B
Rows("10:19").Select
Selection.EntireRow.Hidden = True
Rows("20:29").Select
Selection.EntireRow.Hidden = False
Rows("30:59").Select
Selection.EntireRow.Hidden = False
ElseIf Range("P1").Value = 3 Then 'Decoration Range C
Rows("10:29").Select
Selection.EntireRow.Hidden = True
Rows("30:39").Select
Selection.EntireRow.Hidden = False
Rows("40:59").Select
Selection.EntireRow.Hidden = False
ElseIf Range("P1").Value = 4 Then 'Decoration Range D
Rows("10:39").Select
Selection.EntireRow.Hidden = True
Rows("40:49").Select
Selection.EntireRow.Hidden = False
Rows("50:59").Select
Selection.EntireRow.Hidden = False
ElseIf Range("P1").Value = 5 Then 'Decoration Range E
Rows("10:49").Select
Selection.EntireRow.Hidden = True
Rows("50:59").Select
Selection.EntireRow.Hidden = False
End If
End Sub
我知道我可能并不真正需要最终选择(如果不是 A、B、C 或 D,那么只能是 E)但我只是为了整洁才把它放进去。
我也尝试使用单元格值作为文本,ElseIf Range("P1").Value = "5" Then...
但同样没有任何效果。
任何指导都值得赞赏。
答案1
如果你希望你的代码在单选按钮选择上运行,你需要使用单选按钮调用宏,或者你需要让宏私有子工作表_更改()在工作表更改时运行。
代码本身运行良好。有更好的方法可以实现,但您的代码没有任何问题。
将其放入您正在使用的工作表的 VBA 中:
Private Sub worksheet_change(ByVal Target As Range)
'
' HideShow Macro
' Show only the selection pane assocated to the Design line selection
If Not Intersect(Target, Cells(1, 16)) Is Nothing Then
If Range("P1").Value = 1 Then
'Decoration Range A
Rows("10:19").Select
Selection.EntireRow.Hidden = False
Rows("20:59").Select
Selection.EntireRow.Hidden = True
ElseIf Range("P1").Value = 2 Then 'Decoration Range B
Rows("10:19").Select
Selection.EntireRow.Hidden = True
Rows("20:29").Select
Selection.EntireRow.Hidden = False
Rows("30:59").Select
Selection.EntireRow.Hidden = False
ElseIf Range("P1").Value = 3 Then 'Decoration Range C
Rows("10:29").Select
Selection.EntireRow.Hidden = True
Rows("30:39").Select
Selection.EntireRow.Hidden = False
Rows("40:59").Select
Selection.EntireRow.Hidden = False
ElseIf Range("P1").Value = 4 Then 'Decoration Range D
Rows("10:39").Select
Selection.EntireRow.Hidden = True
Rows("40:49").Select
Selection.EntireRow.Hidden = False
Rows("50:59").Select
Selection.EntireRow.Hidden = False
ElseIf Range("P1").Value = 5 Then 'Decoration Range E
Rows("10:49").Select
Selection.EntireRow.Hidden = True
Rows("50:59").Select
Selection.EntireRow.Hidden = False
End If
End If
End Sub
但我会这样做:
Private Sub worksheet_change(ByVal Target As Range)
'
' HideShow Macro
' Show only the selection pane assocated to the Design line selection
If Not Intersect(Target, Range("p1")) Is Nothing Then
On Error Resume Next
ActiveSheet.Cells.EntireRow.Hidden = False
If Range("P1") = 1 Then 'Decoration Range A
Rows("20:59").Hidden = True
ElseIf Range("P1") = 2 Then 'Decoration Range B
Rows("10:19").Hidden = True
ElseIf Range("P1") = 3 Then 'Decoration Range C
Rows("10:29").Hidden = True
ElseIf Range("P1") = 4 Then 'Decoration Range D
Rows("10:39").Hidden = True
ElseIf Range("P1") = 5 Then 'Decoration Range E
Rows("10:49").Hidden = True
End If
End If
End Sub