Excel 使用宏隐藏行

Excel 使用宏隐藏行,excel,Excel,我有一个我正在做的项目,我有一个“数据”表,把数据拉到“表2”。我希望“第2页”上的一行在该行的特定单元格中没有数据时自动隐藏/取消隐藏 一般来说,我对宏和编码非常陌生。我试着在YouTube上查找这些内容,但没有一个能深入了解你为什么选择某些东西,而我也没有运气让它们发挥作用 我的问题是: 当我在“数据”上时,影响“工作表2”的宏是否放在“工作表2”或“ThisWorkbook”中 在编写宏之前,您需要选择下拉菜单“工作簿”,然后我假设您检测到更改,那么“SheetChange”是否正确 宏是

我有一个我正在做的项目,我有一个“数据”表,把数据拉到“表2”。我希望“第2页”上的一行在该行的特定单元格中没有数据时自动隐藏/取消隐藏

一般来说,我对宏和编码非常陌生。我试着在YouTube上查找这些内容,但没有一个能深入了解你为什么选择某些东西,而我也没有运气让它们发挥作用

我的问题是:

  • 当我在“数据”上时,影响“工作表2”的宏是否放在“工作表2”或“ThisWorkbook”中

  • 在编写宏之前,您需要选择下拉菜单“工作簿”,然后我假设您检测到更改,那么“SheetChange”是否正确

  • 宏是否会检测到单元格内隐藏的更改,然后该单元格的行是否可以取消隐藏


  • 最后,我到底要写些什么来检测0和隐藏/取消隐藏单元格,到目前为止我还没有让任何一个单元格做任何事情


  • 谢谢你们的帮助。

    回答你们的问题:

  • 当我在“数据”上时,影响“工作表2”的宏是否放在“工作表2”或“ThisWorkbook”中
  • 除非代码是由内置事件(如工作表_Change())触发的,否则将代码放置在何处并不重要。在这种情况下,它必须位于您希望检测其更改的工作表中。如果它不是事件驱动的,那么我会将代码放在它自己的模块中。每个人都有自己的想法

  • 在编写宏之前,您需要选择下拉菜单“工作簿”,然后我假设您检测到更改,那么“SheetChange”是否正确
  • 如果您希望在工作表发生更改时执行该子例程中包含的代码,这将是合适的。您还可以通过用户操作触发代码,如按钮单击、双击或工作表激活等

  • 宏是否会检测到单元格内隐藏的更改,然后该单元格的行是否可以取消隐藏
  • 当然!为什么不呢?例如:

    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
    

  • 最后,我到底要写些什么来检测0和隐藏/取消隐藏单元格,到目前为止我还没有让任何一个单元格做任何事情
  • 使用最后一个示例来检测特定列是否发生了更改,检测它是否只是一个单元格,检测该单元格现在是否为
    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
    

    把它放在你想要检测变化的任何工作表中。如果,则先更改
    ,这样您只会检测到您预期发生更改的任何范围内的更改(我选择C列作为示例)

    要回答您的问题:

  • 当我在“数据”上时,影响“工作表2”的宏是否放在“工作表2”或“ThisWorkbook”中
  • 除非代码是由内置事件(如工作表_Change())触发的,否则将代码放置在何处并不重要。在这种情况下,它必须位于您希望检测其更改的工作表中。如果它不是事件驱动的,那么我会将代码放在它自己的模块中。每个人都有自己的想法

  • 在编写宏之前,您需要选择下拉菜单“工作簿”,然后我假设您检测到更改,那么“SheetChange”是否正确
  • 如果您希望在工作表发生更改时执行该子例程中包含的代码,这将是合适的。您还可以通过用户操作触发代码,如按钮单击、双击或工作表激活等

  • 宏是否会检测到单元格内隐藏的更改,然后该单元格的行是否可以取消隐藏
  • 当然!为什么不呢?例如:

    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
    

  • 最后,我到底要写些什么来检测0和隐藏/取消隐藏单元格,到目前为止我还没有让任何一个单元格做任何事情
  • 使用最后一个示例来检测特定列是否发生了更改,检测它是否只是一个单元格,检测该单元格现在是否为
    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
    

    把它放在你想要检测变化的任何工作表中。如果
    ,则先更改
    ,这样您只会检测到您预期发生更改的任何范围内的更改(我选择C列作为示例)

    我假设工作表2通过一个公式拉入数据?“到目前为止,我还没有让他们中的任何人做任何事情?”--你能编辑你的问题来发布你的代码吗?对于工作表上大多数没有处理特定动作(事件)的代码,创建一个新模块来放置你的代码,不在Sheet1或ThisWorkbook模块中。在VBA编辑器中的模块树上单击鼠标右键,然后选择“插入->模块”。如果要使用
    SheetChange
    事件,则该事件会出现在要捕获该事件的特定工作表模块中。你可以检查代码中隐藏的单元格,看看@PeterT,我认为OP意味着事件,但无论如何,我认为这可能是事件的一个例子。我们会看到…我假设工作表2通过公式拉入数据?“到目前为止,我还没有让他们中的任何人做任何事情?”--你能编辑你的问题来发布你的代码吗?对于你工作表上大多数没有处理特定动作(事件)的代码,创建一个新模块来开始你的代码,不在Sheet1或ThisWorkbook模块中。在VBA编辑器中的模块树上单击鼠标右键,然后选择“插入->模块”。如果要使用
    SheetChange
    事件,则该事件会出现在要捕获该事件的特定工作表模块中。你可以检查代码中隐藏的单元格,看看@PeterT,我认为OP意味着事件,但无论如何,我认为这可能是事件的一个例子。我们等着瞧吧……好直觉@BigBen。我真的希望能和某个前男友接近OP的目标