通过单元格结果更改自动隐藏行

时间:2018-11-19 14:18:54

标签: excel vba excel-vba

Sub hide()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim c As Range
    Dim targetRange As Range

    Set wb = ThisWorkbook
    Set ws = wb.Sheets("Ballast Quote")
    Set targetRange = ws.Range("A20:A30")

    targetRange.EntireRow.Hidden = False

    For Each c In targetRange.Rows
       If (WorksheetFunction.CountIf(c, "<>0") - WorksheetFunction.CountIf(c, "") = 0) And (WorksheetFunction.CountA(c) - WorksheetFunction.Count(c) = 0) Then
           c.EntireRow.Hidden = True
       End If
    Next c

End Sub

此宏运行完美,但是我不想每次单元格范围更改时都进入“ F5”。我的问题是触发宏的单元格不是手动更改,而是另一张纸的结果,示例单元格A20显示“ = Inventory!$ L $ 41”。我没有在此选项的任何答案上找到按钮或是否手动更改了单元格。任何参与者?

2 个答案:

答案 0 :(得分:0)

我建议调查事件,它们通常是Sub或函数,只要工作表/工作簿发生问题

您想要的特定事件是:Worksheet.Change(https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.tools.excel.worksheet.change?view=vsto-2017

或工作表。计算(https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.tools.excel.worksheet.calculate?view=vsto-2017

您可以钩住该子项以激活您的子项,或在其中输入您的代码。该文档使用C#,但是使用相同的事件,属性和方法

答案 1 :(得分:0)

使用inventory工作表上的Worksheet.Change Event测试原始数据是否已更改:

'this must be in Inventory worksheet!
Private Sub Worksheet_Change(ByVal Target as Range) 
    If Not Intersect(Target, Me.Range("L41")) Is Nothing Then     
        hide 'run your procedure to hide
    End If
End Sub

这将测试Inventory!$L$41是否已更改,如果是,它将运行您的隐藏过程。