VBA循环用于隐藏行的命名范围

时间:2018-12-10 18:01:21

标签: excel vba excel-vba

根据Loop through named range list的建议,我试图通过循环使以下代码更有效。

Sub Worksheet_Calculate()
  Application.EnableEvents = False
    Range("in1.1").Rows.EntireRow.Hidden = (Range("in1.1").Cells(1, 1).Value = "No")
    Range("in1.2").Rows.EntireRow.Hidden = (Range("in1.2").Cells(1, 1).Value = "No")
  Application.EnableEvents = True
End Sub

但是,我仍然遇到各种风格的运行时错误,并且我不太了解VBA属性如何工作。

Sub Worksheet_Calculate()
    Application.EnableEvents = False

    Dim TargetSheetName As String
    TargetSheetName = "Input data"

    For Each nmdrange In ThisWorkbook.Names
        If Range(nmdrange.RefersTo).Parent.Name = TargetSheetName Then
        'Loop over benefits
            Range(nmdrange).Rows.EntireRow.Hidden = (Range(nmdrange).Cells(1, 1).Value = "No")
        End If
    Next nmdrange

    Application.EnableEvents = True
End Sub

1 个答案:

答案 0 :(得分:0)

这对我有用:

Sub Worksheet_Calculate()

    Dim nmdrange As Name, rng As Range

    On Error GoTo haveError
    Application.EnableEvents = False

    For Each nmdrange In ThisWorkbook.Names
        Set rng = Range(nmdrange.RefersTo) '<< set a variable to simplify subsequent code
        'you can use Me to refer to the sheet where this code is running
        If rng.Parent.Name = Me.Name Then
            'Loop over benefits
            rng.Rows.EntireRow.Hidden = (rng.Cells(1, 1).Value = "No")
        End If
    Next nmdrange

haveError:
    '## alert if error
    If Err.Number <> 0 Then MsgBox "Error" & Err.Description
    Application.EnableEvents = True
End Sub