显示/隐藏行每下拉select
我在网上find代码,作为一个例子,我已经调整了显示或隐藏特定的行,这取决于我在Excel文件的下拉列表中select的select。
无论我尝试什么,macros都无法工作。
我的代码如下(还附加了问题2(2a – 2d)中不显示/隐藏的行的截图)
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$F$13" Then If Range("F13").Value = "Yes" Then Rows("14:17").EntireRow.Hidden = False End If If Range("F13").Value = "No" Then Rows("14:17").EntireRow.Hidden = True End If If Range("F13").Value = " " Then Rows("14:17").EntireRow.Hidden = True End If End Sub
有一个End If
失踪。 我假设目标单元格(F13)的值需要testing它的值。 如果值为“是”,则应取消隐藏行14:17,如果是“”(空格键)则应该隐藏它们,如果是“否”,则应该隐藏它们。 其他值不会影响行的隐藏/取消隐藏。 在End Sub
之前应该有第二个End If
,这样上面的所有if语句都被包装在Address检查中。
还要注意,这个代码应该放在工作表本身中,因为你想挂钩到Worksheet_Change
事件。
在工作表模块中试试这个:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$F$13" Then 'Check if the changed value is indeed in F13 If Target.Value = "Yes" Then ActiveSheet.Rows("14:17").EntireRow.Hidden = False 'Show the rows if the value is Yes ElseIf Target.Value = "No" Then ActiveSheet.Rows("14:17").EntireRow.Hidden = True 'Hide them when it's No ElseIf Target.Value = " " Then ActiveSheet.Rows("14:17").EntireRow.Hidden = True 'Or space End If End If End Sub
其他评论:
- 而不是
ActiveSheet
你也可以使用Me
(Me.Rows...
)在这种情况下,他们可能也是这样做的。 但是,如果您从另一个工作表(例如重新计算的公式)更改工作表上的值,Me
将引用更改的触发事件的工作表,而activeworksheet将影响当前活动的工作表。 - 使用Target而不是再次引用Range。 目标是已经在内存中的范围对象。 因此,与再次访问工作表相比,执行速度会更快。
这是一个很好的示例,可以帮助您识别问题。 你错过了一个结束IF语句。 尝试这个:
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$F$13" Then If Range("F13").Value = "Yes" Then Rows("14:17").EntireRow.Hidden = False End If If Range("F13").Value = "No" Then Rows("14:17").EntireRow.Hidden = True End If If Range("F13").Value = " " Then Rows("14:17").EntireRow.Hidden = True End If End If End Sub
你也可以使用:
If Range("F13").Value = ""
代替
If Range("F13").Value = " "