Страницы: 1 2 След.
RSS
VBA готовые классы для создания древовидной структуры
 
Коллеги, добрый день.

Я написал на VBA несколько классов, реализующих универсальные древовидные структуры. Если вам не хватало возможностей Collection / Dictionary, то, я думаю, вам стоит посмотреть. Писал для себя в качестве развлечения и обучения ООП, причём довольно долго, поэтому вышло крайне добротно (имхо, конечно). Хотелось бы, чтобы кому-то пригодилось. Лежит тут. Спасибо.
Изменено: dsb75 - 22.05.2017 22:54:48
с уважением,
Батьянов Денис
 
Код хороший, всё качественно сделано,
но почему бы не использовать объектную модель XML?
(в XML похожая объектная модель, плюс, что немаловажно, есть сохранение в файл и чтение из файла)
PS: под JSON не говорю, так как по-умолчанию в VBA нет его поддержки, в отличие от XML, коим я и пользуюсь для таких задач.
 
есть моменты, в которые Ваше творение превзошло TreeView?
раз уж было потрачено много времени на написание кода, не затруднит-ли Вас потратить еще полчаса-час на составление сравнения функционала. можно сосредоточится исключительно на преимуществах вашего "дерева"
спасибо
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Как-то так. Выявить причину не удалось, особо не разбирался. Excel 2016 x64.
Скрытый текст
Скрытый текст
 
Цитата
Jungl написал:
Как-то так.
Эх. Жалко, что не разбирались - у меня под рукой 16-го нет... Ошибки есть наверняка, но есть желание их исправить.
с уважением,
Батьянов Денис
 
Цитата
Ігор Гончаренко написал:
есть моменты, в которые Ваше творение превзошло TreeView?
Игорь, боюсь сравнивать будем красное и круглое. TreeView насколько я понимаю визуальный компонент, а у меня просто структура данные оптимизированная для программной манипуляции ею. Ближайший аналог - Dictionary.
с уважением,
Батьянов Денис
 
Цитата
Игорь написал:
почему бы не использовать объектную модель XML?
Наверное, по причине моего полного невежества в этой технологии :)
с уважением,
Батьянов Денис
 
Цитата
Jungl написал:
Excel 2016 x64.
Ой, да, у меня и в 2013-м перестала работать новая то версия :) Пардон, буду разбираться.
с уважением,
Батьянов Денис
 
dsb75, Ваш труд впечатляет, конечно возможностей Collection / Dictionary / NET 2.0 (System.Collections.ArrayList) вполне хватает. Но с целью изучения Вашего кода и самообразования в мире VBA  в ближайший проект с удовольствием добавлю класс PerfectTree.

Большое спасибо за труд.

 
dsb75, добрый день!
Если пошагово, ну как пошагово - зубочистка + F8, то выполняет процедуру до конца и без ошибок. Записи в дебаге есть.
После нескольких падений экселя пошаговый режим отваливается, выдает ошибку 13 в class_terminate. Может что поломалось во время многочисленних AppCrash.
Это так, пища для размышлений.
 
Может тему перенести в копилку, ведь скоро она может просто затеряться?
 
Цитата
dsb75 написал:
Ой, да, у меня и в 2013-м перестала работать новая то версия
Оно? x32, англоязычная версия системы.
Скрытый текст
Изменено: Jungl - 24.05.2017 01:22:13
 
Вроде бы нашёл источник бед. Кастомная коллеция. Там метод
Код
Public Property Get NewEnum() As IUnknown
Attribute NewEnum.VB_UserMemId = -4
Attribute NewEnum.VB_MemberFlags = "40"
  Set NewEnum = colNodes.[_NewEnum]
End Property

должен быть с указанными атрибутами, а они куда-то делись в процессе экспорта/импорта.
Вставил 2-х томный архив (из-за лимита 100К).
с уважением,
Батьянов Денис
 
Jungl, попробуйте, пожалуйста, если будет возможность, с файлом, который я выложил в предыдущем сообщении.
с уважением,
Батьянов Денис
 
Цитата
TSN написал:
Ваш труд впечатляет, конечно возможностей Collection / Dictionary / NET 2.0 (System.Collections.ArrayList) вполне хватает. Но с целью изучения Вашего кода и самообразования в мире VBA  в ближайший проект с удовольствием добавлю класс PerfectTree.
Я как-то пробовал .NET ArrayList из VBS, но поразила низкая производительность, поэтому более не трогал.

Цитата
Большое спасибо за труд.
Пожалуйста :)
с уважением,
Батьянов Денис
 
Цитата
Ivan.kh написал:
скоро она может просто затеряться
Ну совсем то не потеряется, скоро Яндекс её проиндексирует :)
с уважением,
Батьянов Денис
 
Цитата
Игорь написал:
Код хороший, всё качественно сделано
От вас, Игорь, это приятно слышать особенно. Не раз на вашем сайте "тырил" всякое полезное.
с уважением,
Батьянов Денис
 
Цитата
dsb75 написал:
который я выложил в предыдущем сообщении
Кажется, архивы выкладывать нельзя. Я, честно говоря, подозревал. На сайте только вечером выложу.
с уважением,
Батьянов Денис
 
Цитата
dsb75 написал:
Кажется, архивы выкладывать нельзя
Это почему?
 
Цитата
Юрий М написал:
Это почему?
Они изчезли... Я думал, админ прибрал :)
Изменено: dsb75 - 23.05.2017 14:39:51
с уважением,
Батьянов Денис
 
Ну, в любом случае, я у себя выложил версию 0.21. Сохраните её в нормальной папке (не Temporary Internet Files) перед запуском.
с уважением,
Батьянов Денис
 
Может не прикрепились? Каков размер архива?
 
Цитата
Юрий М написал:
Может не прикрепились? Каков размер архива?
Возможно я сам их удалил. К посту они прикрепились, а когда я начал писать следующий пост, они и в нём высветились. Ну, я и почистил...
с уважением,
Батьянов Денис
 
Какая-то печальная ситуация. Работает только при таком раскладе:
1. Скачиваем с сайта XLSM (ссылка в исходном сообщении)
2. Сохраняем в папку, которую ОС не считает потенциально опасной
3. Лезем в свойства файла, на первой вкладке может стоять галочка разблокировки подозрительного содержимого, пришедшего из инета, - разблокируем
4. Открываем файл
5. Открываем и сразу закрываем среду разработки VBA
6. После этого у меня работает так, как должен.

Пока нет идей с чем это может быть связано...
с уважением,
Батьянов Денис
 
Excel 2013 x32.

Если пошагово немного пробежаться в коде(F8) потом нажать выполнение макроса до конца(F5) то отрабатывает, если нажимать на кнопку на листе - Error 13, и при попытке посмотреть где ошибка(Debug) - AppCrash.
Скрытый текст
Изменено: Jungl - 24.05.2017 01:22:48
 
У меня отработало как есть без выкрутасов - Win10 всё х32
 
Цитата
Обратите внимание, как удобно использовать коллекции Nodes
Код
 ' а теперь дайте нам потомков корня, содержащих в имене слово File, с детьми и уровнем равным 5
  Set MyResultSet = MyRoot.Descendants.FilterByName("File").WithChildren.WithLevel(5)
  ' по-моему круто и удобно

круто
удобно
но мы имеем дело с VBA - далеко не самым лучшим языком программирования

тоже как-то пытался такое сделать
сделал
надоело смотреть на вылеты Excel
до ума доводить - кода много надо
забил на удобство
упростил код, - теперь не одна строка кода, а три. но зато всё четко работает

Excel не очень хорошо обрабатывает подобные конструкции, и вместо вывода ошибки сам вылетает из-за утечки памяти
Конечно, велика вероятность, что я что-то не учел в коде, но и Excel, безусловно, кривоват (вылеты Excel говорят именно об ошибках со стороны Microsoft)
Так что мой совет, - не мудрить излишне с этими объектами, либо переходить на более адекватную среду разработки
Изменено: Игорь - 23.05.2017 22:53:32
 
dsb75, Ну, что это такое?! Вы не знаете, что можно свои сообщения ДОПОЛНЯТЬ, а не строчить одно за другим с периодичностью в пару минут? Лень вернуться и дописать?
 
vikttur, я же редко пишу и у меня пока в голове не уложились правильные привычки. Учту :)
с уважением,
Батьянов Денис
 
Цитата
Игорь написал:
Так что мой совет, - не мудрить излишне с этими объектами, либо переходить на более адекватную среду разработки
Согласен. Мой опыт с ООП в VBA подтверждает ваши слова. Надеюсь, однако, что нащупаю проблемный участок кода и пойму, что делать не стоит.
с уважением,
Батьянов Денис
Страницы: 1 2 След.
Наверх