Добрый день.
Есть программа на 2003 созданная как AddIn (1). При её запуске создается некое меню.
Есть еще программа на 2003 созданная как AddIn (2), цель которого открыть AddIn(1) в режиме только для чтения и самой закрыться.
При запуске в 2003 после всего этого остается ексель с новым пунктом в строке меню. Далее открываем файл и из меню с этим файлом работаем. Все ОК.
При запуске этого в 2016-м меню исчезает!
Addin(2) запускается и на открытие висит такой код.
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub Workbook_Open()
Dim Сервер As Workbook
' открываем Addin(1)
Set Сервер = Workbooks.Open(Filename:=ThisWorkbook.Path & "\AddIn1.xls", ReadOnly:=True)
' закрываем AddIn(2)
ThisWorkbook.Close
End Sub
После открытия AddIn(1) - меню создано, мы видим Надстройки и в нем наше меню.
После закрытия AddIn(2) пункт меню Надстройки исчезает.
При этом
- если до всего этого открыть любой файл xls - меню не исчезает, но при закрытии этого файла меню опять исчезает.
- если просто запустить Addin(1) - меню не исчезает.
Меню создается при открытии книги Addin(1)
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
Sub СозданиеМеню()
' Макрос создания пользовательского меню на основе данных листа "ЛистМеню" надстройки
' Выполяется при открытии книги.
Dim ЛистМеню As Worksheet
Dim ОбъектМеню As CommandBarPopup
Dim ОпцииМеню() As Object
Dim ОпцияПодменю As CommandBarButton
Dim Строка As Integer
Dim УровеньМеню, СледУровень, ПозицияИлиМакрос, Подпись, Разделитель, Иконка, Доступность
' Расположение данных меню
Set ЛистМеню = ThisWorkbook.Sheets("ЛистМеню")
' Инициализация счетчика строк
Строка = 2
' Добавляет меню и все вложенные в него элементы
Do Until IsEmpty(ЛистМеню.Cells(Строка, 1))
' Чтение данных очередной строки с листа "ЛистМеню"
With ЛистМеню
УровеньМеню = .Cells(Строка, 1)
Подпись = .Cells(Строка, 2)
ПозицияИлиМакрос = .Cells(Строка, 3)
Разделитель = .Cells(Строка, 4)
Иконка = .Cells(Строка, 5)
СледУровень = .Cells(Строка + 1, 1)
Доступность = .Cells(Строка, 6)
End With
If УровеньМеню = 1 Then
' Создание опции меню первого уровня
Set ОбъектМеню = Application.CommandBars(1). _
Controls.Add(Type:=msoControlPopup, _
Before:=ПозицияИлиМакрос, _
Temporary:=False)
ОбъектМеню.Caption = Подпись
ElseIf УровеньМеню = 2 Then
' Создание опции меню второго уровня
If СледУровень = УровеньМеню + 1 Then
' Создание подменю
ReDim Preserve ОпцииМеню(УровеньМеню - 1) As Object
Set ОпцииМеню(УровеньМеню - 1) = ОбъектМеню.Controls.Add(Type:=msoControlPopup)
Else
' Создание опции
ReDim Preserve ОпцииМеню(УровеньМеню - 1) As Object
Set ОпцииМеню(УровеньМеню - 1) = ОбъектМеню.Controls.Add(Type:=msoControlButton)
ОпцииМеню(УровеньМеню - 1).OnAction = ПозицияИлиМакрос
If Доступность <> "" Then ОпцииМеню(УровеньМеню - 1).Enabled = False
End If
ОпцииМеню(УровеньМеню - 1).Caption = Подпись
If Иконка <> "" Then ОпцииМеню(УровеньМеню - 1).FaceId = Иконка
If Разделитель Then ОпцииМеню(УровеньМеню - 1).BeginGroup = True
Else
' Создание опций меню уровней больше второго
If СледУровень = УровеньМеню + 1 Then
' Создание подменю
ReDim Preserve ОпцииМеню(УровеньМеню - 1) As Object
Set ОпцииМеню(УровеньМеню - 1) = ОпцииМеню(УровеньМеню - 2).Controls.Add(Type:=msoControlPopup)
Else
' Создание опции
ReDim Preserve ОпцииМеню(УровеньМеню - 1) As Object
Set ОпцииМеню(УровеньМеню - 1) = ОпцииМеню(УровеньМеню - 2).Controls.Add(Type:=msoControlButton)
ОпцииМеню(УровеньМеню - 1).OnAction = ПозицияИлиМакрос
If Доступность <> "" Then ОпцииМеню(УровеньМеню - 1).Enabled = False
End If
ОпцииМеню(УровеньМеню - 1).Caption = Подпись
If Иконка <> "" Then ОпцииМеню(УровеньМеню - 1).FaceId = Иконка
If Разделитель Then ОпцииМеню(УровеньМеню - 1).BeginGroup = True
End If
Строка = Строка + 1
Loop
End Sub
Чувство такое, что в 2016 надстройка-меню привязывается к какой-то книге и при закрытии книги надстройка так же исчезает
Как сделать, что бы меню не исчезало?
С прогой работают как в 2003, так и в 2016, поэтому переконвертить в формат 2016 нельзя.
AddIn(1) должен запускаться только для чтения.
Господа, Хелп.