使用宏隐藏行

时间:2019-05-17 18:13:21

标签: excel

我有这个项目,我正在处理“数据”表,并将数据拉到“表2”中。我希望“表2”上的一行自动隐藏/取消隐藏,如果该行中的特定单元格内没有数据。

我一般对宏和编码都是陌生的。我尝试过查找,但是按照YouTube上的教程进行操作,但是对于为什么选择某些内容,它们都没有做得太深入,我也没有运气让它们起作用。

我的问题是:

  1. 当我在“数据”上时,会影响“表2”的宏是放在“表2”中还是在“ ThisWorkbook”中?

  2. 在编写宏之前,您需要选择下拉列表“工作簿”,然后假定您正在检测更改,因此“ SheetChange”正确吗?

  3. 宏将检测到隐藏的单元格中的更改,然后可以取消隐藏该单元格的行吗?

  4. 最后,我什至要为检测0和隐藏/取消隐藏单元格写些什么,到目前为止我还没有让它们做任何事情?

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

要回答您的问题:

  
      
  1. 当我在“数据”上时,将影响“表2”的宏放置在“表2”中还是在“此工作簿”中?
  2.   

除非代码是由诸如Worksheet_Change()之类的内置事件触发的,否则将代码放置在哪里都没有关系。在那种情况下,它必须驻留在您要检测其变化的工作表中。如果不是事件驱动的,那么我会将代码放在它自己的模块中。彼此各有。

  
      
  1. 在编写宏之前,您需要选择下拉菜单“工作簿”,然后假设您正在检测更改,因此“ SheetChange”正确吗?
  2.   

如果您希望在工作表发生更改时执行该子例程中包含的代码,这将是适当的。您还可以通过单击按钮或双击或激活工作表等用户操作来触发代码。

  
      
  1. 宏会检测到隐藏的单元格中的更改,然后可以取消隐藏该单元格的行吗?
  2.   

当然!为什么不?例如:

Private Sub Worksheet_Change(ByVal Target As Range)

    'Detect if the change was in a cell we care about (it can be hidden, VBA don't care)
    If Not Intersect(Target, Column(3)) Is Nothing Then
        'Something changed in Column C! Unhide whatever row had the change
        Target.EntireRow.Hidden = False
    End If

End Sub
  
      
  1. 最后,我什至为检测0和隐藏/取消隐藏单元格写了什么,到目前为止我还没有让他们做任何事情?
  2.   

使用最后一个示例来检测特定列是否发生了更改,检测它是否只是单个单元格,检测该单个单元格现在是否为0并隐藏其行:

Private Sub Worksheet_Change(ByVal Target As Range)

    'Detect if the change was in a cell we care about (it can be hidden, VBA don't care)
    If Not Intersect(Target, Column(3)) Is Nothing Then
        'Something changed in Column C!
        If Target.Cells.Count = 1 Then
            If Target.Value = "0" Then
                Target.EntireRow.Hidden = True
            End If
        End If
    End If

End Sub

在要检测到更改的任何工作表中都保留该标记。更改第一个If,以便您仅在预期更改发生的范围内检测更改(我选择C列作为示例)。