Страницы: 1
RSS
Иерархия объектов(класcов) в VBA Excel.
 
Здравствуйте.
Начал изучать vba excel и столкнулся вот с какой трудностью.
В общем-то в различных уроках определенные авторы предлагают сделать определенные примеры. Показывают какие строки нужно вводить и что они означают.  Рассказывают про ООП модель в VBA. Все вроде бы хорошо и понятно, но вдруг возникает вопрос, а как автор понимает, что один объект является частью другого, более "большого" объекта.
Вот пример строки

Код
ActiveSheet.Chartobjects.count

По логике вроде все понятно. Обращаемся к самому "большому" объекту (к нашему активному листу) потом объекту "поменьше" (к диаграммам) и потом к методу count объекта Chartobjects. Т.е. тут вроде понятно, что понятие "лист" больше чем понятие "диаграммы". А вот как мне понять что один объект является частью другого, если эти объекты мне не знакомы вообще? Где найти такую информацию? Т.е. где посмотреть иерархию классов?
 
что-то типа Object Browser? Alt+F11, F2
 
Jack
Там не указано. Там просто список объектов его свойств и методов, но нет инфы частью чего он является и что "ниже" него.
 
Цитата
Aigeus пишет: но нет инфы частью чего он является и что "ниже" него.
как так - нет??? http :/ /joxi.ru/7BHRU4wyTJCDYx2X9Wc
F1 творит чудеса
 
Максим Зеленский
То же самое. Вы нашли свойство  range которое является членом класса worksheets. А worksheets часть библиотеки классов Excel.
В моем примере можно так же сделать. Найти свойство count, оно будет явятся частью класса Chartobjects. Однако если я на листе1 создам любую диаграмму и потом захочу в Excel VBA в окне immediate посмотреть сколько диаграмм у меня на листе1 мне надо будет ввести
Код
? ActiveSheet.Chartobjects.count
или
Код
? worksheets(1).Chartobjects.count
но никак не
Код
? excel.Chartobjects.count
или даже просто
Код
? Chartobjects.count
Т.е. по иерархии объект(класс) Chartobjects  стоит ниже чем объект(класс) Worksheets. Вот где эту иерархию найти?

Вот еще один пример. Что бы обратится к ячейке другого листа и книги нужно прописать вот такую иерархию:      
- WorkBooks    
- -WorkSheets
- - -Cells

Т.е. класс WorkBooks стоит во главе иерархии, а класс WorkSheets является его частью. Класс Cells в самом низу иерархии.
Это то как я это ООП понимаю. Может дело в том, что я неправильно понимаю?
 
А Вы не пробовали по F2 с объекта Application начать изучать иерархию? Там вот все видно - кто под кем. Можете себе даже схемы составить. Так же можно на MSDN обратиться - там структура сайта с левой стороны четко показывает кто кому подчиняется.

А еще ООП не имеет отношения к иерархии. Это совершенно иное и не имеет отношения к VBA вообще, т.к. он не является объектно-ориентированным языком программирования.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
в старой справке были картинки с иерархиями, почему-то сейчас их убрали, а зря, наглядно было.
А вообще еще можно начать с Уокенбаха, там в начале достаточно подробно и понятно про структуру объектов в Эксель.
F1 творит чудеса
 
Цитата
The_Prist пишет:
т.к. он (VBA) не является объектно-ориентированным языком программирования
обоснуй
Изменено: nerv - 24.07.2014 21:17:36
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Саша, а мог бы перед тем как делать резкие наезды и восклики "обоснуй" погуглить :-)

В центре ООП находится понятие объекта. Объект - это сущность, которой можно посылать сообщения и которая может на них реагировать, используя свои данные. Объект - это экземпляр класса. Данные объекта скрыты от остальной программы. Сокрытие данных называется инкапсуляцией.
Наличие инкапсуляции достаточно для объектности языка программирования, но ещё не означает его объектной ориентированности — для этого требуется наличие наследования.
Но даже наличие инкапсуляции и наследования не делает язык программирования в полной мере объектным с точки зрения ООП. Основные преимущества ООП проявляются только в том случае, когда в языке программирования реализован полиморфизм - возможность объектов с одинаковой спецификацией иметь различную реализацию.

Если кто-то мне сейчас покажет реализацию полиморфизма в VBA - признаю полностью и безоговорочно его принадлежность к языкам ООП.
Да хотя бы нормальное человечачье наследование покажите.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Вставлю свои пять копеек в тему, точно не скажу, т.к. сужу по другим языкам, но в ВБА тоже видел это свойство - называется оно Parent
http://msdn.microsoft.com/en-us/library/office/aa224980(v=office.11).aspx
Автоматизация приложений, разработка ботов, парсинг сайтов, поиск информации и многое другое на языках : Delphi, C++, VBA. Информация в профиле.
 
Цитата
The_Prist пишет: Саша, а мог бы перед тем как делать резкие наезды и восклики "обоснуй" погуглить :-)
это не наезд. Это быстрый способ задать вопрос: "Почему ты считаешь,  что VBA не является объектно ориентированным языком программирования?"
Цитата
The_Prist пишет: Если кто-то мне сейчас покажет реализацию полиморфизма в VBA - признаю полностью и безоговорочно его принадлежность к языкам ООП
Иван, уже привел пример. Проблема в том, что это встроенные (объекты приложения) объекты. У них, как мне видится, и наследование есть и полиморфизм =)
Цитата
The_Prist пишет: Да хотя бы нормальное человечачье наследование покажите.
А с чего ты решил, что будет "нормальное человеческое наследование" в языке, который больше не развивается? =)
Есть Implements. Но это не совсем то.
Я бы смотрел в сторону писать под эксель на других ЯП.
VBA официально похоронен Microsoft насколько мне известно.
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Цитата
nerv пишет: Иван , уже привел пример
Все понятно. О чем можно говорить дальше, если ссылку на родительский объект(реализованную как свойство объекта без возможности изменить реализацию метода или свойства как этого объекта, так и того, на который ссылка) начали приравнивать к полиморфизму.
Цитата
nerv пишет: А с чего ты решил, что будет "нормальное человеческое наследование"
А я и не решал ничего. Я лишь указал на то, что без нормального наследования язык не может быть объектно-ориентированным.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх