Переменная точки VBA для диапазона

Я хочу указать ячейку как диапазон в VBA. Я пробовал использовать:

         Dim range
         range = Sheet("sheet").Range("A1")

Но это просто возвращает значение в диапазоне. Что мне действительно нужно, так это объект диапазона, чтобы я мог манипулировать им, например. установив range.Value = "Привет"

Любые идеи?


person Karl    schedule 16.07.2009    source источник


Ответы (1)


Во-первых, я настоятельно рекомендую вам сделать явное объявление переменных в вашем коде обязательным. Перейдите в раздел Инструменты - Параметры, на вкладке Редактор установите флажок "Требовать объявление переменной" или поставьте Option Explicit в первой строке всех ваших скриптов.

Во-вторых, я думаю, что в вашем коде есть небольшая опечатка, должно быть Sheets.("sheet").

Чтобы ответить на ваш вопрос, с помощью range = Sheets("sheet").Range("A1") вы назначаете переменную значения, а не объект. Поэтому неявно назначается переменная по умолчанию объекта диапазона, которая равна value. Чтобы назначить объект, используйте ключевое слово Set. Мой полный пример кода выглядит так:

Option Explicit

Public Sub Test()
    Dim RangeObject As range
    Set RangeObject = Sheets("Sheet1").range("A1")    
    RangeObject.Value = "MyTestString"
End Sub

Это должно поместить текст «MyTestString» в ячейку A1.

Изменить. Если вы используете именованные диапазоны, попробуйте RangeObject.Value2 вместо RangeObject.Value. Именованные диапазоны не имеют свойства Value.

person Treb    schedule 16.07.2009
comment
Использование Require Variable Declaration не повлияет задним числом на какие-либо существующие модули — оно просто определяет, будет ли Excel автоматически размещать Option Explicit вверху любых новых модулей. Таким образом, даже если вы включите эту опцию, вам все равно придется просмотреть все существующие модули и добавить Option Explicit. - person Gary McGill; 16.07.2009
comment
Если у вас есть несколько именованных диапазонов, давайте назовем их Name1, Name2 и Name3. Я хочу получить к ним доступ следующим образом: Установите nameRange= range(Name & Number) и сделайте следующее: If nameRange.Value ‹› someValue Then nameRange.Value = someValue - Однако это не удается! - person Karl; 16.07.2009