Excel VBA: цикл для настройки динамических именованных диапазонов на листах - PullRequest
0 голосов
/ 31 октября 2018

Мне нужно циклически проходить по каждому листу в моей книге и устанавливать динамические именованные диапазоны в каждом из них, кроме сводного отчета по листам. Мне нужно назвать диапазоны с именем рабочего листа и «Закрыть».

У меня сейчас есть это:

Option Explicit
Public Sub DefineNamedRanges()

    Dim WSheet As Worksheet

    Dim ShtName As Variant

    For Each WSheet In Worksheets

        ShtName = WSheet.Name

        If ShtName <> "Summary Report" Then

            WSheet.Names.Add Name:=ShtName & "Close", _
                RefersTo:="=OFFSET(ShtName!$A$2,0,0,COUNTA(ShtName!$A$2:$A$1048576),COUNTA(ShtName!$2:$2))"

        End If

    Next WSheet

End Sub

Этот код создает диапазоны и называет их так, как я хочу. Когда я открываю диспетчер имен, кажется, что диапазоны ни к чему не относятся. Как будто создаются только имена, а не сами диапазоны.

Names Manager

1 Ответ

0 голосов
/ 31 октября 2018

Если ShtName равно в кавычках, то это больше не переменная, а текст "ShtName", о чем свидетельствует ваш снимок экрана.

Переместите все экземпляры ShtName за пределы кавычек и объедините их с &. Возможно, вам следует добавить одинарные кавычки вокруг имени листа.

Изменить

"=OFFSET(ShtName!$A$2,0,0,COUNTA(ShtName!$A$2:$A$1048576),COUNTA(ShtName!$2:$2))"

до

"=OFFSET('" & ShtName & "'!$A$2,0,0,COUNTA('" & ShtName & "'!$A$2:$A$1048576),COUNTA('" & ShtName & "'!$2:$2))"
...