Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Непонятное поведение при добавлении Range в коллекцию - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Непонятное поведение при добавлении Range в коллекцию (Макросы/Sub)
Непонятное поведение при добавлении Range в коллекцию
Sagaan Дата: Четверг, 12.07.2018, 17:36 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Если добавить в коллекцию объект Cells, то при обращении к элементу коллекции получим объект Range:
[vba]
Код

Dim TestCol As New Collection
TestCol.Add (Cells(1, 1))
Debug.Print (TypeName(TestCol(1)))

Range
[/vba]
Но если добавить в коллекцию объект Range, то при обращении к элементу коллекции получим не ячейку, а значение, которое в этой ячейке хранится:
[vba]
Код

Dim TestCol As New Collection
Dim Add As String
Add = Cells(1, 1).Address
Debug.Print (TypeName(Range(Add)))

Range

TestCol.Add (Range(Add))
Debug.Print (TypeName(TestCol(1)))

String
[/vba]
Почему это происходит? Как мне добавить и извлечь из коллекции объект Range?
Добавление: можно обойти нежелательное поведение таким образом, если точно знать, что в диапазоне всего одна ячейка:
[vba]
Код

TestCol.Add (Range(Add).Cells(1,1))
Debug.Print (TypeName(TestCol(1)))

Range
[/vba]
Но при этом:
[vba]
Код

TestCol.Add (Range(Add).Cells())
Debug.Print (TypeName(TestCol(1)))

String
[/vba]
Что делать, если заранее неизвестно, одна ячейка будет в Range или несколько, непонятно...
К сообщению приложен файл: Range__Collecti.xlsm(12.6 Kb)


Сообщение отредактировал Sagaan - Четверг, 12.07.2018, 18:32
 
Ответить
СообщениеЕсли добавить в коллекцию объект Cells, то при обращении к элементу коллекции получим объект Range:
[vba]
Код

Dim TestCol As New Collection
TestCol.Add (Cells(1, 1))
Debug.Print (TypeName(TestCol(1)))

Range
[/vba]
Но если добавить в коллекцию объект Range, то при обращении к элементу коллекции получим не ячейку, а значение, которое в этой ячейке хранится:
[vba]
Код

Dim TestCol As New Collection
Dim Add As String
Add = Cells(1, 1).Address
Debug.Print (TypeName(Range(Add)))

Range

TestCol.Add (Range(Add))
Debug.Print (TypeName(TestCol(1)))

String
[/vba]
Почему это происходит? Как мне добавить и извлечь из коллекции объект Range?
Добавление: можно обойти нежелательное поведение таким образом, если точно знать, что в диапазоне всего одна ячейка:
[vba]
Код

TestCol.Add (Range(Add).Cells(1,1))
Debug.Print (TypeName(TestCol(1)))

Range
[/vba]
Но при этом:
[vba]
Код

TestCol.Add (Range(Add).Cells())
Debug.Print (TypeName(TestCol(1)))

String
[/vba]
Что делать, если заранее неизвестно, одна ячейка будет в Range или несколько, непонятно...

Автор - Sagaan
Дата добавления - 12.07.2018 в 17:36
doober Дата: Четверг, 12.07.2018, 20:20 | Сообщение № 2
Группа: Друзья
Ранг: Обитатель
Сообщений: 484
Репутация: 227 ±
Замечаний: 0% ±

Excel 2007
Cells-это объект Range[vba]
Код
Sub test2()
    Dim TestCol As New Collection
    TestCol.Add Cells(1, 1)
    Debug.Print TypeName(TestCol(1))
    Dim Add As String
    Add = "A1:B2"
    Debug.Print TypeName(Range(Add))
    TestCol.Add Range(Add)
    Debug.Print TypeName(TestCol(2))
    TestCol.Add Range(Add).Cells()
    Debug.Print TypeName(TestCol(3))
    Debug.Print TestCol(1).Cells(1).Address, TestCol(1).Cells.Count
    Debug.Print TestCol(2).Cells(1).Address, TestCol(2).Cells.Count
    Debug.Print TestCol(2).Cells(TestCol(2).Cells.Count).Address, TestCol(2).Cells.Count
    Debug.Print TestCol(3).Cells(1).Address, TestCol(3).Cells.Count
End Sub
[/vba]


 
Ответить
СообщениеCells-это объект Range[vba]
Код
Sub test2()
    Dim TestCol As New Collection
    TestCol.Add Cells(1, 1)
    Debug.Print TypeName(TestCol(1))
    Dim Add As String
    Add = "A1:B2"
    Debug.Print TypeName(Range(Add))
    TestCol.Add Range(Add)
    Debug.Print TypeName(TestCol(2))
    TestCol.Add Range(Add).Cells()
    Debug.Print TypeName(TestCol(3))
    Debug.Print TestCol(1).Cells(1).Address, TestCol(1).Cells.Count
    Debug.Print TestCol(2).Cells(1).Address, TestCol(2).Cells.Count
    Debug.Print TestCol(2).Cells(TestCol(2).Cells.Count).Address, TestCol(2).Cells.Count
    Debug.Print TestCol(3).Cells(1).Address, TestCol(3).Cells.Count
End Sub
[/vba]

Автор - doober
Дата добавления - 12.07.2018 в 20:20
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Непонятное поведение при добавлении Range в коллекцию (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2018 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!