Excel 2016 VBA проблема обратной совместимости до 2013 - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть простой код VBA, созданный в Excel 2016, который скрывает некоторые строки на других листах в зависимости от того, вводит ли пользователь «да / нет».К сожалению, он не запускается в Excel 2013.

Сообщение об ошибке:

Ошибка времени выполнения '1004' Определено приложением или определено объектомошибка.

Подсветка отладки находится в строке 9, которая начинается с If nmdrange.
Есть ли способ сделать его обратно совместимым?

Sub Worksheet_Change(ByVal Target As Range)
    Dim nmdrange As Name
    Dim Row As Range

    If Not Intersect(Target, Range("screener1")) Is Nothing Then
        'Input data sheet
        With Sheet4
            For Each nmdrange In ThisWorkbook.Names
                If nmdrange.RefersToRange.Parent.Name = .Name Then '***ERROR HERE***
                'Loop over benefits
                .Range(nmdrange.RefersTo).Rows.EntireRow.Hidden = (.Range(nmdrange.RefersTo).Cells(1, 1).Value = "No")
                End If
            Next nmdrange
        End With

        With Sheet5
            For Each nmdrange In ThisWorkbook.Names
                If nmdrange.RefersToRange.Parent.Name = .Name Then 
                'Loop over benefits
                .Range(nmdrange.RefersTo).Rows.EntireRow.Hidden = (.Range(nmdrange.RefersTo).Cells(1, 1).Value = "No")
                End If
            Next nmdrange
            'Hide in summary table
            For Each Row In .Range("sum_b1").Rows
                Row.Rows.EntireRow.Hidden = (Row.Rows.Cells(1, 1).Value = "No")
            Next Row
        End With

    End If
End Sub

Существует два именованных диапазона, которые относятся не к диапазону, а к одной ячейке / значению, например: enter image description here

1 Ответ

0 голосов
/ 19 декабря 2018

Есть ли у вас какие-либо именованные диапазоны, которые не относятся к рабочему листу?
Именованный диапазон может также ссылаться на константу или формулу, поэтому он может называться VAT и иметь плоское значение * 1003.*

Когда ваш цикл попадет в этот именованный диапазон, он не сможет найти родительский лист, так как у него его нет.

...