Страницы: 1
RSS
Как сделать, чтоб надстройка не размножалась?
 
Коллеги, доброе утро!  
Где-то взял пример надстройки, сделал свою по образу и подобию, вроде все работает, но на отдельных машинах она множится. И получается такой внешний вид:  
 
Файл  Правка   Вид  Вставка  Формат  Сервис  Данные  Окно  Справка  СМК  СМК  СМК  СМК  
 
Подскажите, в чем причина?
 
Наверное, с макросом спуталась, не предохраняется :)
 
{quote}{login=vikttur}{date=25.02.2011 08:42}{thema=чтоб надстройка не размножалась}{post}Наверное, с макросом спуталась, не предохраняется :){/post}{/quote}  
 
Смешно, ха-ха-ха  
С утра подняли настроение :-)  
Спасибо!
 
Кастрируйте свою надстройку - она не будет размножаться)  
 
Делается это так:  
 
 
Private Sub Workbook_Open()  
   On Error Resume Next  
   Application.CommandBars("Worksheet Menu Bar").Controls("СМК").Delete  
     
   Dim MenuBar As CommandBar  
   ' и т.д.
 
Посмотрел код... испытал множество неописуемых чувств)  
 
Зачем делать сотню однотипных макросов?  
 
Чтобы открыть тот или иной файл с кнопки меню, можно поступить проще - при формировании кнопки запускать полный путь к файлы в свойство TAG кнопки, а макрос всем кнопкам назначить один и тот же.  
 
При срабатывании этого макроса будет анализироваться свойство TAG активизировавшего макрос объекта:  
application.CommandBars.ActionControl.Tag    
 
и количество кода уменьшится в несколько раз.  
 
Пример можно глянуть здесь: http://excelvba.ru/tools/CommandBar
 
{quote}{login=EducatedFool}{date=25.02.2011 09:16}{thema=}{post}Кастрируйте свою надстройку - она не будет размножаться)  
{/post}{/quote}  
 
Спасибо большое, очень помогли
 
Я бы(вдруг там уже куча этих СМК) сделал так:  
   Dim MenuName As Object  
    For Each MenuName In Application.CommandBars.ActiveMenuBar.Controls  
       If MenuName.Caption = "СМК" Then  
           MenuName.Delete  
       End If  
   Next  
Это после всех Dim'ов в Workbook_Open.
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=25.02.2011 09:55}{thema=}{post}Я бы(вдруг там уже куча этих СМК) сделал так:  
   Dim MenuName As Object  
    For Each MenuName In Application.CommandBars.ActiveMenuBar.Controls  
       If MenuName.Caption = "СМК" Then  
           MenuName.Delete  
       End If  
   Next  
Это после всех Dim'ов в Workbook_Open.{/post}{/quote}  
 
Да, это здорово, а то я хотел уже обходить всех у кого 2 и более надстройки и вручную их убивать. Спасибо!  
 
Да и к тому же, благодаря этому, в коде можно прибить процедуру перед закрытием книги:  
 
Private Sub Workbook_BeforeClose(Cancel As Boolean)  
   On Error Resume Next  
   Application.CommandBars("Worksheet Menu Bar").Controls("СМК").Delete  
   Application.CommandBars("СМК").Delete  
End Sub
 
Я бы не стал прибивать. Уходишь - прибери за собой:-)
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=25.02.2011 10:15}{thema=}{post}Я бы не стал прибивать. Уходишь - прибери за собой:-){/post}{/quote}  
 
Да, это правильно, согласен
Страницы: 1
Читают тему
Наверх
Loading...