用户在VBA中更改条目时隐藏行

时间:2018-04-24 14:36:40

标签: excel vba show-hide

如果在多个工作表上的指定字段中输入任何大于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.本地"上的相同的行54)。一切都运行良好,但如果用户由于输入错误而返回并将所有目标地址的总和从> 0更改回= 0,我无法弄清楚如何让第54行返回隐藏状态,因为这种变化。有什么建议?谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

使用此代码,您可以检查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

答案 1 :(得分:0)

我想我已经使用以下代码解决了这个问题。对于我需要跟踪的每个活动工作表,我更改了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