Что-то я не пойму, в какой последовательности открываются файлы надстроек и Personal Excel при его загрузке? Вот, к примеру, у меня в AddIns'ах лежат файлы надстроек: ConditionalFormatting_Menu v1.2.xla, Выбор даты v2.1.xla, Управление видимостью листов.xla Open А в XLSTART, естественно, Personal.xls
Проверил, в каком порядке они загружаются (добавил им в процедуры обработки событий Open строчку Debug.Print ThisWorkbook.Name & " Open") Получил такую фигню: Управление видимостью листов.xla Open Выбор даты v2.1.xla Open ConditionalFormatting_Menu v1.2.xla Open Personal.xls Open
Что-то я не пойму, в какой последовательности открываются файлы надстроек и Personal Excel при его загрузке? Вот, к примеру, у меня в AddIns'ах лежат файлы надстроек: ConditionalFormatting_Menu v1.2.xla, Выбор даты v2.1.xla, Управление видимостью листов.xla Open А в XLSTART, естественно, Personal.xls
Проверил, в каком порядке они загружаются (добавил им в процедуры обработки событий Open строчку Debug.Print ThisWorkbook.Name & " Open") Получил такую фигню: Управление видимостью листов.xla Open Выбор даты v2.1.xla Open ConditionalFormatting_Menu v1.2.xla Open Personal.xls OpenAlex_ST
Ну, я же говорю, что склероз крепчал... Помню, что кто-то где-то об этом спрашивал, но абсолютно не помню, к какому ответу пришли. А уж о том, чтобы это я спрашивал - вряд ли, т.к. я надстройками балуюсь очень редко.
Ну, я же говорю, что склероз крепчал... Помню, что кто-то где-то об этом спрашивал, но абсолютно не помню, к какому ответу пришли. А уж о том, чтобы это я спрашивал - вряд ли, т.к. я надстройками балуюсь очень редко.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Понедельник, 17.12.2012, 13:34
Да и кроме того, у меня это прописано только в секции 14.0, которая относится к Ех-2010, а в секции 12.0, которая "родная" для Ех-2003, у меня только:
Да и кроме того, у меня это прописано только в секции 14.0, которая относится к Ех-2010, а в секции 12.0, которая "родная" для Ех-2003, у меня только: Alex_ST
А чем тебе мой крайний пост не понравился, интересно? Ты говоришь, что последовательность открытия надстроек записана в секции 14.0 реестра. А я в ответ говорю, что таки-да, может быть. Но то, что прописано в секции 14.0 относится к Ех-2010, а для Ех-2003 есть секция 12.0 И если у меня на машине, например, стоит только Ех-2003, а Ех-2010 никогда не устанавливался, то секции 14.0 там в реестре просто нет.
А чем тебе мой крайний пост не понравился, интересно? Ты говоришь, что последовательность открытия надстроек записана в секции 14.0 реестра. А я в ответ говорю, что таки-да, может быть. Но то, что прописано в секции 14.0 относится к Ех-2010, а для Ех-2003 есть секция 12.0 И если у меня на машине, например, стоит только Ех-2003, а Ех-2010 никогда не устанавливался, то секции 14.0 там в реестре просто нет.Alex_ST
Блин! Позор на мои седые части тела! Попутал я... Ведь для Ех-2003 ветка 11.0 А 12.0 - это для Ех-2007! Потому она у меня и пустая, что 2007 я никогда не ставил. А в секции 11.0 всё то, о чём ты, Саня, говорил, есть! Вот теперь вопрос: какого... Ех сам туда прописывает именно такую последовательность и как её программно менять чтобы надстройки одинаково работали на любых машинах?
Блин! Позор на мои седые части тела! Попутал я... Ведь для Ех-2003 ветка 11.0 А 12.0 - это для Ех-2007! Потому она у меня и пустая, что 2007 я никогда не ставил. А в секции 11.0 всё то, о чём ты, Саня, говорил, есть! Вот теперь вопрос: какого... Ех сам туда прописывает именно такую последовательность и как её программно менять чтобы надстройки одинаково работали на любых машинах?Alex_ST
какого... Ех сам туда прописывает именно такую последовательность
по мере под-/выгрузки надстроек XL добавляет/удаляет OPEN№ в реестр
Quote (Alex_ST)
чтобы надстройки одинаково работали на любых машинах?
у тебя работа надстроек зависит от предыстории открытия других надстроек?!!! если это так, т.е. надстройки зависимы, реорганизуй их структуру - сделай независимыми...
можно написать vbs-файл, но не вижу смысла. Обоснуешь, придумаешь алгоритм, сделаем.
Quote (Alex_ST)
какого... Ех сам туда прописывает именно такую последовательность
по мере под-/выгрузки надстроек XL добавляет/удаляет OPEN№ в реестр
Quote (Alex_ST)
чтобы надстройки одинаково работали на любых машинах?
у тебя работа надстроек зависит от предыстории открытия других надстроек?!!! если это так, т.е. надстройки зависимы, реорганизуй их структуру - сделай независимыми...
можно написать vbs-файл, но не вижу смысла. Обоснуешь, придумаешь алгоритм, сделаем.Саня
Саш, у меня несколько надстроек модернизируют меню Cell Каждая надстройка добавляет в меню одну-две новых кнопки или новую менюшку. А одна из надстроек удаляет стандартный пункт "Очистить содер&жимое..." и вместо него вставляет пункт для вызова диалога xlDialogClear, в котором можно выбирать, что хочешь удалить. А из-за того, что позиция Before, в которую вставляю новые пункты, получается не фиксированной, а изменяющейся в зависимости от того, какая надстройка раньше сработала, следующие надстройки начинают глючить. Я, конечно, вывернулся: начал отсчитывать позицию от не изменяемого пункта, но всё равно это не порядок. Если есть желание, вот код одного из модулей одной из надстроек, заменяющий пункт "Очистить содер&жимое..."
[vba]
Code
'--------------------------- пункт "Очистить..." вместо "Очистить содер&жимое" ------------------------------- Private Sub MenuCell_ClearContext_Modify() ' модернизировать пункт "Очистить..." Dim sBefore$, sCaption$: sCaption = "Очистить..." On Error Resume Next With Application.CommandBars("Cell"): .Controls(sCaption).Delete sBefore = .FindControl(ID:=2031).Caption ' поиск названия пункта по известному ID вернёт его Caption "Добавить приме&чание" ' зная как пишется Caption в данной локализации, можно будет найти его индекс чтобы указать при добавлении нового пункта With .Controls.Add(Before:=.Controls(sBefore).Index, Temporary:=True): .Caption = sCaption: .BeginGroup = False: .OnAction = "ThisWorkbook.Clear_Dialog" End With .Controls(.FindControl(ID:=3125).Caption).Delete ' удалить не нужный старый пункт "Очистить содер&жимое..." End With End Sub Private Sub Clear_Dialog() ' вывести диалог выбора Clear On Error Resume Next: Application.Dialogs(xlDialogClear).Show ' xlDialogClear==52 If Err Then MsgBox Err.Description End Sub Private Sub MenuCell_ClearContext_Delete() ' удалить меню "Очистить...", восстановить пункт "Очистить содер&жимое..." On Error Resume Next With Application.CommandBars("Cell") .Controls("Очистить...").Delete ' удалить пункт "Очистить..." .Controls(.FindControl(ID:=3125).Caption).Delete ' на всякий случай прпробовать удалить пункт "Очистить содер&жимое..." .Controls.Add ID:=3125, Before:=.Controls(.FindControl(ID:=2031).Caption).Index 'восстановить удалённый пункт "Очистить содер&жимое..." после пункта "Вставить" (ID:=22) End With End Sub
[/vba]
Саш, у меня несколько надстроек модернизируют меню Cell Каждая надстройка добавляет в меню одну-две новых кнопки или новую менюшку. А одна из надстроек удаляет стандартный пункт "Очистить содер&жимое..." и вместо него вставляет пункт для вызова диалога xlDialogClear, в котором можно выбирать, что хочешь удалить. А из-за того, что позиция Before, в которую вставляю новые пункты, получается не фиксированной, а изменяющейся в зависимости от того, какая надстройка раньше сработала, следующие надстройки начинают глючить. Я, конечно, вывернулся: начал отсчитывать позицию от не изменяемого пункта, но всё равно это не порядок. Если есть желание, вот код одного из модулей одной из надстроек, заменяющий пункт "Очистить содер&жимое..."
[vba]
Code
'--------------------------- пункт "Очистить..." вместо "Очистить содер&жимое" ------------------------------- Private Sub MenuCell_ClearContext_Modify() ' модернизировать пункт "Очистить..." Dim sBefore$, sCaption$: sCaption = "Очистить..." On Error Resume Next With Application.CommandBars("Cell"): .Controls(sCaption).Delete sBefore = .FindControl(ID:=2031).Caption ' поиск названия пункта по известному ID вернёт его Caption "Добавить приме&чание" ' зная как пишется Caption в данной локализации, можно будет найти его индекс чтобы указать при добавлении нового пункта With .Controls.Add(Before:=.Controls(sBefore).Index, Temporary:=True): .Caption = sCaption: .BeginGroup = False: .OnAction = "ThisWorkbook.Clear_Dialog" End With .Controls(.FindControl(ID:=3125).Caption).Delete ' удалить не нужный старый пункт "Очистить содер&жимое..." End With End Sub Private Sub Clear_Dialog() ' вывести диалог выбора Clear On Error Resume Next: Application.Dialogs(xlDialogClear).Show ' xlDialogClear==52 If Err Then MsgBox Err.Description End Sub Private Sub MenuCell_ClearContext_Delete() ' удалить меню "Очистить...", восстановить пункт "Очистить содер&жимое..." On Error Resume Next With Application.CommandBars("Cell") .Controls("Очистить...").Delete ' удалить пункт "Очистить..." .Controls(.FindControl(ID:=3125).Caption).Delete ' на всякий случай прпробовать удалить пункт "Очистить содер&жимое..." .Controls.Add ID:=3125, Before:=.Controls(.FindControl(ID:=2031).Caption).Index 'восстановить удалённый пункт "Очистить содер&жимое..." после пункта "Вставить" (ID:=22) End With End Sub
Андрюха, спасибо! Твоя метода упорядочивания порядка открытия надстроек, описанная ЗДЕСЬ 100 пудов должна работать ибо логичная! Завтра на работе попробую. Отпишусь.
Андрюха, спасибо! Твоя метода упорядочивания порядка открытия надстроек, описанная ЗДЕСЬ 100 пудов должна работать ибо логичная! Завтра на работе попробую. Отпишусь.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Понедельник, 17.12.2012, 20:26