首页 > 解决方案 > 如果指定单元格为空,则隐藏整个给定行

问题描述

我是 VBA 编码的新手。

我正在尝试在我的功能中实现这一点

sub Private Sub Worksheet_Change(ByVal Target As Range)

它检查一些指定的单元格值更改以运行给定的宏。我要添加的附加宏是,当单元格 a62 为空时,它将隐藏行 a56:a61。并且连续如果 a82 为空,它将隐藏行 a78:a82。

我有以下代码,但它只隐藏从第一个空单元格到工作表末尾的行。

Sub Test()
  Dim i As Long
  For i = 4 To 800
    If Sheets("Results").Cells(i, 1).Value = "" Then
      Rows(i & ":" & Rows.Count).EntireRow.Hidden = True
      Rows("1:" & i - 1).EntireRow.Hidden = False
      Exit Sub
    End If
  Next
End Sub

标签: excelvba

解决方案


请检查下一个事件代码:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$A$62" Or Target.Address = "$A$82" Then
        Select Case Target.Address
            Case "$A$62"
                If Target.Value = "" Then
                    Range("A56:A61").EntireRow.Hidden = True
                Else
                    Range("A56:A61").EntireRow.Hidden = False
                End If
            Case "$A$82"
                If Target.Value = "" Then
                    Range("A78:A81").EntireRow.Hidden = True
                Else
                    Range("A78:A81").EntireRow.Hidden = False
                End If
        End Select
  End If
End Sub

仅当您手动更改两个所需单元格之一的值时才会触发它。

如果它们的值是公式的结果,则Worksheet_Calculate必须使用事件,但方式不同。此事件没有任何参数(无目标),您必须检查讨论中的两个单元格并根据它们的值采取行动,与触发计算事件时它们是否已更改无关。如果是这种情况,我也可以发布这样的事件代码。

编辑:

对于不涉及手动更改值的版本,请将该事件代码复制到工作表代码模块中:

Private Sub Worksheet_Calculate()
    If Me.Range("A62").Value = "" Then
        Me.Range("A56:A61").EntireRow.Hidden = True
    Else
        Me.Range("A56:A61").EntireRow.Hidden = False
    End If
    If Me.Range("A82").Value = "" Then
        Me.Range("A78:A82").EntireRow.Hidden = True
    Else
        Me.Range("A78:A82").EntireRow.Hidden = False
    End If
    'Edited:
    'The part for both analyzed ranges being empty:
    If Me.Range("A62").Value = "" And _
                     Me.Range("A82").Value = "" Then
        'Do here what you need...
    End If
End Sub

推荐阅读