2017-01-22 4 views
1

Меня смущает свойство Range.Cells. Согласно документации MSN:Синтаксис свойства Range .Cells

Range.Cells Property (Excel)

Синтаксис должен быть expression .Cells

Однако на примере далее вниз код не после этого синтаксиса, но, кажется, использует Cells как функцию:

Worksheets("Sheet1").Activate 
Range(Cells(1, 1), Cells(5, 3)).Font.Italic = True 

ответ

3

Когда точка . не предшествует методу Cells или Range, это называется неквалифицированный справочник по дальности; Excel VBA автоматически переносит его на текущий активный лист.

Cells(1, 1) <==> Activesheet.Cells(1, 1) 
Range("A1") <==> Activesheet.Range("A1") 

Однако, это считается плохой практикой и его следует избегать, поскольку это приводит к случайным проблемам и ошибкам; поведение кода зависит от того, на каком лике, который пользователь имеет в верхней части в графическом интерфейсе Excel. Опытные разработчики всегда избегают его как можно больше и используют квалифицированные диапазоны; т.е.

Worksheets("someSheetName").Cells(1, 1).

+0

«Ячейки» на самом деле являются свойством не методом, и в данном примере это свойство «Range». Итак, какой активный «диапазон»? Кажется, что нет такого, поскольку доступ к «Range» будет доступен, так как имеет смысл использовать и неквалифицированное свойство «Ячейки», если нет активного «диапазона»? – Roland

+1

Свойства - это особый тип методов, а последний обычно используется в ООП для обозначения всех * callables * класса (VBA Sub, Function, Property и т. Д.). Во втором вопросе в вашем примере как «Range», так и «Cells» относятся к «ActiveSheet», который рассматривается как глобальная переменная * в Excel VBA. –

+0

Понял. Тем не менее связанная документация MSN запуталась, потому что свойство «Ячейки» в фрагменте кода фактически ссылается на «ActiveSheet», а не на «Range». – Roland