Цикл VBA для именованных диапазонов, которые скрывают строки - PullRequest
0 голосов
/ 10 декабря 2018

Следуя приведенному здесь совету, Перебирая список именованных диапазонов , я попытался сделать следующий код более эффективным с помощью цикла.

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 голосов
/ 10 декабря 2018

Это сработало для меня:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...