Так и не решил поставленную задачу.
Выкрутился по другому. Кнопка лежит на созданном мной документе. Раз так, то можно кнопку разместить не в документе, а в меню Word, которое создается автоматически при открытии. Данное решение пока работает для офиса 2003, для другого офиса потом буду думать.
Процедура SetMenu вызывается из модуля (см. код ниже) при открытии файла по событию Document_Open()
Option Explicit
Private Const GLPAMenuCount As Byte = 3 'Количество пунктов меню ГЛПА (ГЛПА - название организации)
Public Sub SetMenu()
'Процедура создает меню для включения макросов надстройки
Dim MyBar As CommandBar, MyButton(1 To GLPAMenuCount) As CommandBarButton
Static GLPAMenu As CommandBarControl
Dim i As Byte
#If VBA7 Then
'В Офис 2010 ленту надстроек будем настраивать через API
#Else
'В Офис 2003 меню можно создать программно
Set MyBar = Application.CommandBars("Menu Bar")
'Нужно ставить проверку, имеется ли уже созданное меню ГЛПА
If GLPAMenu Is Nothing Then
Set GLPAMenu = MyBar.Controls.Add(msoControlPopup, 1, , , True)
GLPAMenu.Caption = "ГЛПА" 'Создаем вкладку ГЛПА на панели меню
With GLPAMenu.Controls
For i = 1 To GLPAMenuCount
Set MyButton(i) = .Add(msoControlButton, 1, , , True) 'Создаем кнопки в меню
Next i
End With
With MyButton(1)
.Caption = "Погода"
.Style = msoButtonCaption
.OnAction = "Weather.weather"
End With
With MyButton(2)
.Caption = "Акт списания"
.Style = msoButtonCaption
.OnAction = "Reports.Act"
End With
With MyButton(GLPAMenuCount)
.Caption = "Отправить файл по почте"
.Style = msoButtonCaption
.OnAction = "Internet.SendMail"
End With
GLPAMenu.Visible = True
End If
#End If
End Sub