Ошибка выполнения VBA 1004 «Ошибка, определяемая приложением или объектом» при попытке присвоить значение переменной - PullRequest
1 голос
/ 06 мая 2020

1-й я объясняю, что я пытаюсь сделать. У меня есть рабочая тетрадь с множеством листов, и на каждом из них есть много именованных диапазонов. Я хочу l oop через именованные диапазоны на определенном листе c, а затем скрыть / показать их, если у него есть определенное имя c. Сначала я хочу изолировать лист, и вот в чем проблема. Я пытаюсь получить имя листа, диапазон включен и присвоить это имя переменной. Вот часть кода, у меня проблемы с:

Dim rng as Name
Dim shP as String
for each rng in ThisWorkbook.Names
shp = rng.RefersToRange.Parent.Name 'here i get the error
... rest of the code ...

Если я просто Debug.Print rng.RefersToRange.Parent.Name вместо этого в этой строке, я получаю имя листа, распечатанное в немедленном окне. Я также пытался Dim shP as Variant, но это не помогло.

Заранее спасибо за ваши ответы.

Ответы [ 2 ]

2 голосов
/ 06 мая 2020

Вероятно, у вас есть Имя в книге, которое не соответствует блоку ячеек. Здесь я присваиваю имя when формуле =now()

enter image description here

Если я бегу:

Sub WhatsInaName()
    Dim nm As Name, s As String

    For Each nm In ThisWorkbook.Names
        MsgBox nm.RefersToRange.Parent.Name
    Next nm

End Sub

Я также получить 1004

Вы должны сначала запустить:

Sub listum()

    With ActiveWorkbook
        If .Names.Count > 0 Then
            For i = 1 To .Names.Count
                MsgBox (i & "  " & .Names(i).Name)
            Next
        End If
    End With
End Sub

, чтобы убедиться, что каждый Name является блоком ячеек.

0 голосов
/ 06 мая 2020

Если вы получаете рабочий лист, вам необходимо использовать объект Worksheet.

Option Explicit
Sub Test()

    Dim rng As Name
    Dim shP As Worksheet
    For Each rng In ThisWorkbook.Names
        Set shP = rng.RefersToRange.Parent 'here i get the error
    '... rest of the code ...
    Next rng

End Sub

Затем вы можете использовать shP, как если бы это был рабочий лист.

...