Страницы: 1
RSS
Надстройка
 
С помощью пользователей форума сделал надстройку которой пользуюсь ежедненвно в своей работе. Надстройке еще далеко до Plex , но некоторые полезные вещи она умеет делать. Возможно возникновение ошибок при работе, но данные она угробить не должна :-)  
Принимаю отзывы по найденым багам и советы по оптимизации кода.    
 
"Zebra" - красит выделение через строчку в выбранный цвет  
"FormulaFinder" - выделяет цветом ячейки с формулами  
"ControlValues" - альтернативное окно контрольных значений (при щелчке на поле оно ассаоциируется с активной ячейкой , при щелчке по адресу активирует эту ячейку)  
"FormulaTool" - ведет журнал изменеией значения/формулы в целевой ячейке. Контролирует формулу и значение в целевой ячейке (может пригодиться при коструировании особо длинных формул)  
"Calendar" - тут все просто  
"FillDown" - заполнение пустых ячеек в списке (по столбцу вниз)  
"MultiChanger" - поиск и замена по словарю с несколькими условиями (Select - словарь -ОК; Select- где менять - ОК!  
"UniqueFilter" - фильтрует уникальные занчения и копирует их в буфер  
"ValueFilter"- включает автофильтр (условие для фильтра- значение в активной ячейке, повторный клик на таком-же значении убирает условие из поля)  
 
"CancelFilters" - отключает на листе все фильтры и отображает скрытые ячейки  
"ChartPointsByValue" - красит точки на графике в зависимоти от значения  
"ExporttoPPT" - экспротирует график на активный слайд презентации в виде картинки (запоминает размер графика и позицию на слайде - т.е. все графики будут нужного размера и в одном и том же месте)
 
Файл
 
Вот что обнаружилось при тестировании надстройки:  
 
1) При запуске наддстройки, помимо основной панели инструментов, вылезла ещё одна - "MyAddin" - с 5 настраиваемыми кнопками-смайликами, что не есть хорошо.  
 
2) При нажатии кнопки ControlValue (и некоторых других) макрос вылетает с ошибкой.  
Причина - строка Set wsh = ActiveWorkbook.ActiveSheet  
в процедуре UserForm_Initialize.  
Надо предусматривать, что у пользователя может быть не открыта ни одна книга.  
Выход - использовать On Error Resume Next    
 
3) макрос ValueFilter иногда вылетает на строке ActiveSheet.Range(ActiveCell.Address).AutoFilter  
 
4) макрос CollectSheets вылетает с ошибкой, если при вводе имени листа используются недопустимые символы.  
 
Короче, надо всерьёз заняться обработкой возможных ошибок.  
А так, в целом, - неплохо.
 
{quote}{login=The_Prist}{date=30.04.2010 04:29}{thema=}{post}При разработке надстроек старайтесь избегать элементов, которые могут отсутствовать на других компьютерах. Вот, например, календарь в 20% отсутствует. Так что имеет смысл делать универсальный календарь, т.е. конструируемый Вами лично из обычных контролов.{/post}{/quote} Спасибо за советы! Календарик целиком стянул из Internet.  хотите сказать, что календарь будет работать не на каждом компьютере? Я думал, он реализован стандартными средствами. Если не трудно, поясните как он тогда работает?
 
2 EducatedFool: Спасибо!    
 
При запуске наддстройки, помимо основной панели инструментов, вылезла ещё одна - "MyAddin" - пока не понял откуда это берется. Возникает 1 раз при установке на коомп на котором еще не запускалась- возможно тянется с самого начала экспериментов на надстройкой-когда панель была создана руками  
 
Макрос ValueFilter иногда вылетает на строке ActiveSheet.Range(ActiveCell.Address).AutoFilter - а каком случае? Причина вылета?
 
2 EducatedFool: Сам нашел ответы: панелька была создана стандартными средствами Excel (панель пользователя)  
 
ActiveSheet.Range(ActiveCell.Address).AutoFilter - при попытке включить фильтр там где он не может включиться в  т.е. пустой области буду обработчик ошибки делать
 
Подправил описаные ошибки.
 
Ошибки исправлены не все...  
 
К примеру, при нажатии на кнопку FormulaTool при отсутствии открытых книг по-прежнему выскакивает ошибка,  
поскольку форма при инициализации пытается обратиться к несуществующей книге:  
 
Private Sub UserForm_Initialize()  
Dim wsh As Worksheet  
Set wsh = ActiveWorkbook.ActiveSheet  
 
 
И никогда не используйте встроенные в Excel названия свойств в качестве названий переменных, как в этой строке:  
Public WithEvents Worksheet As Worksheet  
 
В данном случае это неважно, но, если вы будете так делать и в других проектах, это может привести к появлению сложновыявляемых ошибок.
 
2 EducatedFool: я думаю там гораздо больше ошибок... Может подскажите, как правильно организовать проверку на наличие активных книг?    
+ есть еще глюк - если в процессе работы FormulaTool закрыть целевую книгу (или удалить лист) вылетает ошибка, при этом переменная листа или книги is nothing не равна True. Как это оловить?  
Заранее благодарен.
 
> Может подскажите, как правильно организовать проверку на наличие активных книг?  
 
А что тут сложного?  
 
Sub макрос()  
   If Workbooks.count = 0 Then Exit Sub  
   ' код макроса
Страницы: 1
Читают тему
Наверх