Проблема с назначением объекта - почему Таблицы ([SheetName]) не работают? - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь скопировать / вставить из одного листа в книге на другой лист в той же книге. У меня возникла очень неприятная проблема со следующей ошибкой при попытке назначить мои диапазоны:

Ошибка времени выполнения '438': объект не поддерживает это свойство или метод.

Dim c As Range
Dim ws1 As Worksheet
Dim ws2 As Range
Dim tgt As Range

Set ws1 = Sheets("Sheet 1")

Set c = ws1.Range("Named_Range").Cells(1, 1)
Set tgt = ws1.Range(c, c.Cells(10, 1)) 'Purpose is to create a range with the first 10 cells of Named_Range, but I need it to be dynamic

'To test that range is being assigned correctly
tgt.Select

На этом этапе я получаю код ошибки, указанный выше. Однако код выполняется при условии, что я добавляю

ws1.Select

выше «Set c = ...»

Есть идеи, что происходит? Насколько я понимаю, использование «Выбрать» таким образом не рекомендуется. , и я не хочу возиться с выбором конкретных листов, потому что я пытаюсь со временем переключаться между ними при копировании / вставке.

1 Ответ

1 голос
/ 07 мая 2020
  1. Worksheet отличается от Range, ws1 должно быть определено как Worksheet.
  2. Именованный диапазон не может содержать пробелов в имени. Это работает:

Sub TestMe()

    Dim c As Range
    Dim ws1 As Worksheet
    Dim ws2 As Range
    Dim tgt As Range

    Set ws1 = Sheets("Sheet 1")
    Set c = ws1.Range("Named_Range_A").Cells(1, 1)
    Set tgt = ws1.Range(c, c.Cells(10, 1))

    Debug.Print tgt.Address

End Sub

В качестве дополнительного бонуса - Worksheet - это другой объект, чем Sheet, вы можете рассмотреть возможность использования Set ws1 = Worksheets("Sheet 1"). Объект Sheet может быть либо Worksheet, либо Chart, поэтому было бы неплохо быть более явным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...