Worksheet_change 当单元格中的值被表单控件元素更改时隐藏行
Worksheet_change hide rows when value in cell is changed by form control element
我正在对其他人创建的 wb 进行一些更改,需要尽可能减少伤害,因为这个 excel 将在公司范围内使用。我的问题是,有两个表单控件按钮可根据选择将 Z1 中的值更改为 1 或 2。
选项 2 仅适用于一行,因此我需要在这一行之前隐藏几行。我正在通过更改工作表来尝试此操作,但没有运气,因为 VBA 的值未以正确的方式更改。更改宏在我手动使用 F2+enter 时有效,但在我仅通过按钮更改时无效。
我试过天桥F2+Enter通过
Range("Z1").FormulaR1C1 = Range("Z1").FormulaR1C1
但没有运气。我尝试了几个版本的代码。我最喜欢的是这个
If Target.Address = "$Z" Then
Range("Z1").FormulaR1C1 = Range("Z1").FormulaR1C1
If Target = "2" Then
Rows("5:13").EntireRow.Hidden = True
Else
Rows("5:13").EntireRow.Hidden = False
End If
End If
我的其他人是
If Not Intersect(Target, Range("Z1")) Is Nothing Then
Rows("5:13").EntireRow.Hidden = CBool(Range("Z1").Value = 2)
End If
========
If Not Application.Intersect(Target, Range(Target.Address)) Is Nothing Then ', Range(Target.Address)
Application.EnableEvents = False
Range("Z1").FormulaR1C1 = Range("Z1").FormulaR1C1
Select Case Target.Value
Case Is = "2": Rows("5:13").EntireRow.Hidden = True
Case Is = "1": Rows("5:13").EntireRow.Hidden = False
End Select
Application.EnableEvents = True
End If
========
If Intersect(Range("Z1"), Target) Is Nothing Then Exit Sub
Range("Z1").FormulaR1C1 = Range("Z1").FormulaR1C1
Select Case Range("Z1").Value
Case Is = 2
Set HideRows = Rows("5:13")
Set ViewRows = Nothing
Case Is = 1
Set ViewRows = Rows("5:13")
End Select
On Error Resume Next
HideRows.Hidden = True
ViewRows.Hidden = False
两个都不行,我做了一个video and uploaded on YouTube
我错过了什么?我需要它让用户连接到表单控件选择。我无法追求表单控件的更改。
更改“链接的单元格”值不会触发 worksheet_change
事件。
您可以通过在 Z2 中放置(例如)=Z1
使其触发 Worksheet_Calculate
事件,然后只要 Z1 中的值发生变化,该公式就会计算。这意味着您将对 sheet 上的每个计算做出响应,因此您可以确保仅在 Z1 中的值更改时 hide/unhide:
Private Sub Worksheet_Calculate()
Dim opt, cCache As Range
Set cCache = Me.Range("Z3") 'cell with last value
opt = Me.Range("Z1").Value 'get current value
If opt <> cCache.Value Then 'compare to last value
Debug.Print "Rows toggle"
Me.Rows("5:13").EntireRow.Hidden = (opt = 2) 'hide/unhide
cCache.Value = opt 'save this for next change
End If
End Sub
我正在对其他人创建的 wb 进行一些更改,需要尽可能减少伤害,因为这个 excel 将在公司范围内使用。我的问题是,有两个表单控件按钮可根据选择将 Z1 中的值更改为 1 或 2。
选项 2 仅适用于一行,因此我需要在这一行之前隐藏几行。我正在通过更改工作表来尝试此操作,但没有运气,因为 VBA 的值未以正确的方式更改。更改宏在我手动使用 F2+enter 时有效,但在我仅通过按钮更改时无效。
我试过天桥F2+Enter通过
Range("Z1").FormulaR1C1 = Range("Z1").FormulaR1C1
但没有运气。我尝试了几个版本的代码。我最喜欢的是这个
If Target.Address = "$Z" Then
Range("Z1").FormulaR1C1 = Range("Z1").FormulaR1C1
If Target = "2" Then
Rows("5:13").EntireRow.Hidden = True
Else
Rows("5:13").EntireRow.Hidden = False
End If
End If
我的其他人是
If Not Intersect(Target, Range("Z1")) Is Nothing Then
Rows("5:13").EntireRow.Hidden = CBool(Range("Z1").Value = 2)
End If
========
If Not Application.Intersect(Target, Range(Target.Address)) Is Nothing Then ', Range(Target.Address)
Application.EnableEvents = False
Range("Z1").FormulaR1C1 = Range("Z1").FormulaR1C1
Select Case Target.Value
Case Is = "2": Rows("5:13").EntireRow.Hidden = True
Case Is = "1": Rows("5:13").EntireRow.Hidden = False
End Select
Application.EnableEvents = True
End If
========
If Intersect(Range("Z1"), Target) Is Nothing Then Exit Sub
Range("Z1").FormulaR1C1 = Range("Z1").FormulaR1C1
Select Case Range("Z1").Value
Case Is = 2
Set HideRows = Rows("5:13")
Set ViewRows = Nothing
Case Is = 1
Set ViewRows = Rows("5:13")
End Select
On Error Resume Next
HideRows.Hidden = True
ViewRows.Hidden = False
两个都不行,我做了一个video and uploaded on YouTube
我错过了什么?我需要它让用户连接到表单控件选择。我无法追求表单控件的更改。
更改“链接的单元格”值不会触发 worksheet_change
事件。
您可以通过在 Z2 中放置(例如)=Z1
使其触发 Worksheet_Calculate
事件,然后只要 Z1 中的值发生变化,该公式就会计算。这意味着您将对 sheet 上的每个计算做出响应,因此您可以确保仅在 Z1 中的值更改时 hide/unhide:
Private Sub Worksheet_Calculate()
Dim opt, cCache As Range
Set cCache = Me.Range("Z3") 'cell with last value
opt = Me.Range("Z1").Value 'get current value
If opt <> cCache.Value Then 'compare to last value
Debug.Print "Rows toggle"
Me.Rows("5:13").EntireRow.Hidden = (opt = 2) 'hide/unhide
cCache.Value = opt 'save this for next change
End If
End Sub