Страницы: 1
RSS
Отличие свойств Cells и Item у объекта Range
 
Добрый день.  
Может кто углубленно вникал и сможет подсказать есть ли отличия у свойств Cells и Item относящихся к Range.  
 
Например:  
 
Dim r as range  
Set r = [D5]
 
в чем отличие между:  
r.Cells(-1).Select и r.Item(-1).Select  
 
или  
 
r.Cells(2,-3).Select и r.Item(2,-3).Select  
 
не вижу никакой разницы.  
И что предпочтительнее использовать для получения смещенной ячейки Cells  и Item ?
Редко но метко ...
 
Нет разницы. Можно вообще опускать: r(-1), r(2,-3)
 
То есть и Cells и Item у объекта Range абсолютно идентичные, а зачем же делать два одинаковых свойства у объекта. Или все таки где то кто то зарыт ? ))
Редко но метко ...
 
Range бывает разным, Item всегда - единица этого разного, а Cells всегда Cells.  
 
Sub Test()  
 Dim Rng As Range  
 Set Rng = Range("A1:C10").Rows  
 Debug.Print Rng.Cells(1).Address, Rng.Item(1).Address  
End Sub
 
Че т проглядел я темку. Владимир, хороший пример) А еще мне кажется, что названия говорят сами за себя : )  
 
Range - диапазон  
Item ~ элемент  
Cell - ячейка
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Добавлю через Item доступно меньше свойств.
 
{quote}{login=VovaK}{date=22.10.2011 11:10}{thema=}{post}Добавлю через Item доступно меньше свойств.{/post}{/quote}А можно пример?)
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
{quote}{login=ZVI}{date=22.10.2011 02:19}{thema=}{post}Range бывает разным, Item всегда - единица этого разного, а Cells всегда Cells.  
 
Sub Test()  
 Dim Rng As Range  
 Set Rng = Range("A1:C10").Rows  
 Debug.Print Rng.Cells(1).Address, Rng.Item(1).Address  
End Sub{/post}{/quote}  
 
Спасибо Владимир, как всегда после вашего объяснения, да еще и с примером, все стало на свои места.
Редко но метко ...
 
Свойства Rows и Columns возвращают необычный Range.  
У нормального Range свойством по умолчанию является Cells, поэтому, например, при переборе ячеек диапазона Cells можно опустить:  
 
Set Rng = Range("A1:B5")  
For Each c In Rng.Cells  
 
это то же самое, что  
For Each c In Rng  
 
Но для диапазона, возвращаемого Rows или Columns, свойством по умолчанию, похоже, является сам этот диапазон. Для перебора ячеек приходится явно указывать свойство Cells:  
 
Sub TestRows()  
Dim Rng As Range, c  
Set Rng = Range("A1:B5").Rows(1)  
For Each c In Rng  
   Debug.Print c.Address  
Next  
Debug.Print  
For Each c In Rng.Cells  
   Debug.Print c.Address  
Next  
End Sub
 
Позволю себе дать ссылку на другой форум, где возник подобный вопрос:  
http://www.cyberforum.ru/vba/thread372597-page2.html#post2111712
 
{quote}{login=Казанский}{date=28.10.2011 09:37}{thema=}{post}Позволю себе дать ссылку на другой форум, где возник подобный вопрос:  
http://www.cyberforum.ru/vba/thread372597-page2.html#post2111712{/post}{/quote}  
 
Очень интересный пример, получается не совсем то что ожидалось !
Редко но метко ...
 
Пример я не понял, но знаю, что с Item так:  
 
Sub io()  
With Range("C3")  
   MsgBox .Item(1).Address ' or Item(1,1) C3  
   MsgBox .Item(1, 0).Address ' B3  
   MsgBox .Item(0, 0).Address ' B2  
   MsgBox .Item(-1, -1).Address ' A1  
End With  
End Sub
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Алексей, т.е.,если я правильно понял, r(i) это r.cells.item(i) (xl отсчитывает при отрицательных i в обратную сторону от адреса массива R) и при этом инвертирует форму исходного диапазона?
 
{quote}{login=nerv}{date=28.10.2011 11:14}{thema=}{post}Пример я не понял, но знаю, что с Item так:  
 
{/post}{/quote}  
 
Все правильно, если исходный диапазон это одна ячейка. А если несколько получается как и предположил Маугли происходит типа зеркальное отображение исходного массива относительно его первой ячейки.
Редко но метко ...
Страницы: 1
Читают тему
Наверх