【问题标题】:Hidding Row when user changes entry in VBA当用户更改 VBA 中的条目时隐藏行
【发布时间】:2018-04-24 14:36:40
【问题描述】:

当在多个工作表的指定字段中输入任何大于 0 的数字时,我有一行会打开。本质上,当所有目标地址的总和 > 0 时,我希望该行不隐藏,但当总和 = 0 时隐藏。我为此使用的示例代码部分是:

If Target.Address = "$D$16" Then
   If Target.Value > 0 Then
        Activate
        Sheets("6. Local").Rows("54").EntireRow.Hidden = False
     End If
End If
If Target.Address = "$D$31" Then
    If Target.Value > 0 Then
        Activate
        Sheets("6. Local").Rows("54").EntireRow.Hidden = False
     End If
End If
If Target.Address = "$D$32" Then
    If Target.Value > 0 Then
        Activate
        Sheets("6. Local").Rows("54").EntireRow.Hidden = False
         End If
End If

我有类似的代码在另外两个工作表上指定不同的单元格(但在“6. Local”上的同一行 54)。一切正常,但是如果用户因为输入错误而返回并将所有目标地址的总和从 > 0 更改回 = 0,我无法弄清楚如何让第 54 行返回隐藏,因为这个更改.有什么建议么?感谢您的帮助!

【问题讨论】:

  • 您是否尝试在您的If 语句中添加Else 语句并将隐藏设置为true? (即Sheets("6. Local").Rows("54").EntireRow.Hidden = True

标签: excel vba show-hide


【解决方案1】:

使用此代码,您可以检查 Target.address 是否与您的某个范围相交,然后检查范围的总和是否小于 0,如果不是,则该行将可见。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim xl_ranges As Range
Set xl_ranges = Range("D16,D31,D32")
Set isect = Application.Intersect(Target, xl_ranges)

        If Not isect Is Nothing And Application.WorksheetFunction.sum(xl_ranges) > 0 Then
            Target.Activate
            Sheets("6. Local").Rows("54").EntireRow.Hidden = False
        Else
            Sheets("6. Local").Rows("54").EntireRow.Hidden = True
        End If

End Sub

【讨论】:

  • 可以使用Intersect检查target.range是否在预期范围内
  • 我能够让下面的代码几乎完美地工作,但我是从百分比中提取出来的,出于某种原因,任何低于 51% 的值都不会触发代码高于 0。试过将 Target.Value 重置为 > 0.01,但没有任何乐趣。
  • 对不起,我的意思是华纳发布的早期版本。 Dim xl_ranges As Range Set xl_ranges = Range("$D$16,$D$31,$D$32") If Application.Intersect(Target, xl_ranges) And Target.Value > 0.001 Then Target.Activate Sheets("6. Local").Rows("54").EntireRow.Hidden = False Else Sheets("6. Local").Rows("54").EntireRow.Hidden = True End If
  • 您可以尝试使用我的最新答案吗?
  • 是的 - 给我一些。谢谢!
【解决方案2】:

我想我已经使用以下代码解决了它。对于我需要跟踪的每个活动工作表,我更改了 Me.Range 以覆盖相关单元格。如果有人发现此解决方案有任何问题,请告诉我!谢谢大家的帮助!

Private Sub Worksheet_Change(ByVal Target As Range)

  On Error GoTo errHandler
   Application.ScreenUpdating = False

    Dim rng1 As Range
    Set rng1 = ThisWorkbook.Sheets("6. Local").Range("$C$54")
    If Not Intersect(Target, Me.Range("$D$6,$D$27")) Is Nothing Then
        Application.EnableEvents = False
            If Target.Value > 0 Then
                Activate
                Sheets("6. Local").Rows("54").EntireRow.Hidden = False
            ElseIf rng1.Value > 0 Then
                Activate
                Sheets("6. Local").Rows("54").EntireRow.Hidden = False
            ElseIf rng1.Value = 0 Then
                Activate
                Sheets("6. Local").Rows("54").EntireRow.Hidden = True
            End If
        Application.EnableEvents = True
    End If


  Application.ScreenUpdating = True
errHandler:
  Application.ScreenUpdating = True


End Sub

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 2020-09-24
    • 2015-12-06
    • 2018-10-15
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    相关资源
    最近更新 更多