1

Тема: Как создать и работать средствами VBA с пользовательской панелью.

У меня Офис 2007 (есть и 2010).
Пробовал средствами VBA создать панель и кнопку на ней, но получается создать только во вкладке Надстройки.
Я сам создал вкладку "Custom", там группу "Автозакладки" и в ней кнопку "Автозакладка".

Как сделать так, чтобы при нажатии кнопки она принимала нажатое/отжатое положение?
У меня получается это делать только если кнопка во вкладке Надстройки.

Я так понимаю, чтобы кн. запоминала своё положение при выходе из Ворда, нужно записывать настройки в реестр, а при запуске ворда - считывать. И в соответствии с этим изменять свойства кнопки и включать либо выключать макрос Автозакладок при закрытии документа.
А может уже есть готовое решение?

2

Re: Как создать и работать средствами VBA с пользовательской панелью.

Почти готовое решение есть в моём блоге. Там нет только сохранения и восстановления состояния при выходе и запуске. Реестр для этого использовать не обязательно, можно обойтись шаблоном, в котором находится лента и записывать в переменные документа этого шаблона.
Вспомнил. Есть пример с сохранением состояния! http://wordexpert.ru/page/vstavka-izobr … -word-2007

Лучше день потерять — потом за пять минут долететь!

3

Re: Как создать и работать средствами VBA с пользовательской панелью.

Спасибо за подсказки.
Я новичок, поэтому сложновато разобраться в коде примеров.
Накидал на основе примеров код как смог, автозакладки работают, состояние галочки "Автозакладки" сохраняется. Курсор переходит в нужную позицию, но при открытии документа ворд всё время ругается, что макрос не найден, хоть ты убейся. Уже всё перерыл, не пойму какой именно макрос он ищет.

Во вложении шаблон.

Post's attachments

AvtoZakladki2.docm 21.79 Кб, 2 скачиваний с 2011-06-13 

You don't have the permssions to download the attachments of this post.

4

Re: Как создать и работать средствами VBA с пользовательской панелью.

svshilo пишет:

... при открытии документа ворд всё время ругается, что макрос не найден, хоть ты убейся. Уже всё перерыл, не пойму какой именно макрос он ищет.

Во вложении шаблон.

Word искал процедуру UILoading, ссылка на которую содержалась в атрибуте onLoad элемента customUI:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"
  onLoad="UILoading">
<ribbon startFromScratch="false">
...

Во вложении документ с исправленным файлом customUI\customUI.xml.

Post's attachments

AvtoZakladki3.docm 21.44 Кб, 5 скачиваний с 2011-06-13 

You don't have the permssions to download the attachments of this post.

5

Re: Как создать и работать средствами VBA с пользовательской панелью.

Спасибо.

6

Re: Как создать и работать средствами VBA с пользовательской панелью.

а из-за чего при закрытии документа каждый раз при закрытии документа предлагается сохранить документ или нет?
Даже если ничего в документе не менял, а просто читал.
Ну первое понятно, вызывает добавление закладки при закрыти документа, но я вставил команду сохранения

Sub autoOpen()
    'Чтение предыдущего состояния ленты
    zakladkaChecked = GetSetting(REGAPPNAME, REGSECTION, "zakladkaChecked", False)
    If ActiveDocument.Bookmarks.Exists("MyBookmarks") And (zakladkaChecked) Then
        'Перейти к закладке
        Selection.GoTo What:=wdGoToBookmark, Name:="MyBookmarks"
        With ActiveDocument.Bookmarks
            .DefaultSorting = wdSortByName
            .ShowHidden = False
        End With
        ActiveDocument.Bookmarks("MyBookmarks").Delete
        ActiveDocument.Save
    End If
End Sub

Sub AutoClose()
'
' Макрос "autoClose"
' Закрытие всех окон активного документа
'
    On Error Resume Next
    zakladkaChecked = GetSetting(REGAPPNAME, REGSECTION, "zakladkaChecked", False)
    If (zakladkaChecked) Then
       Options.AllowFastSave = False ' Запретить быстрое сохранение
       With ActiveDocument.Bookmarks
           .Add Range:=Selection.Range, Name:="MyBookmarks"
           .DefaultSorting = wdSortByName
           .ShowHidden = False
       End With
    End If
End Sub

Как сделать так, чтобы окно сохранения выдавалось только если я действительно что то менял в тексте? И если после изменений нажал кнопку "Сохранить", чтобы тоже не появлялось.

7

Re: Как создать и работать средствами VBA с пользовательской панелью.

я делал так

Sub AutoClose()
'
' Макрос "autoClose"
' Закрытие всех окон активного документа
'
    On Error Resume Next
    zakladkaChecked = GetSetting(REGAPPNAME, REGSECTION, "zakladkaChecked", False)
    If (zakladkaChecked) Then
       Options.AllowFastSave = False ' Запретить быстрое сохранение
       With ActiveDocument.Bookmarks
           .Add Range:=Selection.Range, Name:="MyBookmarks"
           .DefaultSorting = wdSortByName
           .ShowHidden = False
       End With
       ActiveDocument.Save
    End If
End Sub

Но тогда никогда не спрашивает сохранить изменения или нет, а иногда мне нужно закрывать документ без сохранения изменений.