Страницы: 1
RSS
sheets(1). после написания точки не выходит список методов
 
Добрый вечер.
В процессе написания кода когда пишу:
Код
sheets(1).
После написания точки не выходит список методов.
Точно так же при:
Код
activesheet.
worksheets(1).

Не помогает и добавление перед ними Workbooks(1).
Изменено: Бахтиёр - 02.11.2018 10:10:23
 
Код
Dim Sht As Worksheet
    Set Sht = Sheets(1)
    sht.
 
Юрий, спасибо, помогло.
Почему именно с worksheet такое?
 
Цитата
Бахтиёр написал:
activesheet.worksheets(1).
тинц
второе сообщение дает ответ на ваш вопрос.
если не понятно, пишите, постараємся обьяснить
Изменено: ivanok_v2 - 01.11.2018 18:50:22
 
ivanok_v2, я прочитал ссылку, если я правильно понял, там пишут код в vba Access'a и оттуда работают с Excel'ем.
Если это так, то ИМХО логично и правильно то, что VBA Access не даст напрямую увидеть методы листа Excel'я

Но я то работаю в vba Excel'я

Набираю:
Код
Workbooks(1). - выходит список методов
Range(...). - выходит список методов
Cells(...).- выходит список методов

А вот набираю:
Код
activesheet.  - НЕ выходит список методов
worksheets(1).  - НЕ выходит список методов
sheets(1).  - НЕ выходит список методов

Почему так?
Ведь worksheet/sheet - это чуть ли не самый главный объект в VBA Excel'я

???
Изменено: Бахтиёр - 02.11.2018 10:26:31
 
Листы бывают разные.
Владимир
 
Цитата
Бахтиёр написал:
Cells(...).- выходит список методов
Серьёзно Cells(2, 3) после точки выводится список методов? Можете привести пример этого чуда?
Цитата
Бахтиёр написал:
activesheet.  - НЕ выходит список методов
А с чего бы должен выводиться - это может быть и ChartSheet и DialogSheet и Worksheet. Какие методы должны отображаться на этапе ввода кода, как IDE должен догадаться?
Изменено: Андрей VG - 02.11.2018 11:22:55
 
Цитата
Андрей:  пример этого чуда?
Извиняюсь, ошибся.

Цитата
sokol92:  Листы бывают  разные .
Цитата
Андрей:  это может быть и ChartSheet и DialogSheet и Worksheet
Понятно, спасибо.

Тогда непонятно, почему ничего не выходит при наборе:
Код
worksheets(1).
 
Если честно, то и мне непонятно, почему разработчики так сделали. Согласно документации, конструкция Worksheets.Item(Index) должна возвращать объект Worksheet, фактически (можно посмотреть в Object Browser) возвращает Object. Может быть, наследие старых версий Excel. Возможно, корифеи ответят точнее.
Изменено: sokol92 - 02.11.2018 21:02:03
Владимир
 
Цитата
sokol92 написал: ...наследие старых версий Excel...
Владимир, добрый вечер. Скорее, наследование интерфейсов классов.
Если в Object Browser сравнить состав классов Sheets и Worksheets, то нет разницы в типах возвращаемых объектов для Add, Add2, Item, _Default.
Так как Sheets бывают разных типов, и в него могут входить, в том числе, и объекты Worsheet-типа, то там везде объекты As Object. А класс Worksheets, очевидно, просто наследует интерфейсы класса Sheets.

Что касается объекта Cells, то полное определение же Range.Cells As Range.
А объект Range бывает сборищем не только части ячеек, но и полных строк/столбцов (см. Range.Columns As Range, Range.Rows As Range), которые по разному прогоняются по For-Each, поэтому Range.Item(...) и определено универсально как As Variant, но могло быть, наверное, и As Object, что также исключает IntelliSense.
Для наглядности:
?Range("A:D").Columns.Item(1).Address
$A:$A
?Range("A:D").Rows.Item(1).Address
$A$1:$D$1
?Range("A:D").Item(1).Address
$A$1
Изменено: ZVI - 02.11.2018 22:20:45
 
Владимир, спасибо за, как всегда, исчерпывающие пояснения!
Владимир
 
Цитата
ZVI написал:
А класс Worksheets, очевидно, просто наследует интерфейсы класса Sheets.
А, по-моему, здесь даже не наследование, а тип. В Object Browser для Workbook свойство Worksheets показано As Sheets, во всяком случае в XP. Так что, вероятно
Цитата
sokol92 написал:
наследие старых версий Excel.
Хотя, судя по документации...
Изменено: Alec Perle - 03.11.2018 13:21:53
Страницы: 1
Наверх