Если у вас есть идея или совет по эффективному использованию редактора Word, то пишите мне через форму контактов на сайте. Любые ваши дельные советы и подсказки будут размещены в очередных выпусках рассылки и на сайте (с указанием вашего авторства).
Как поменять местами знак препинания и знак сноски
Андрей задал вопрос:
Возможен ли макрос, который менял бы местами знак препинания (чаще всего точку) и стоящий вслед за ним значок сноски?
Имеется документ с огромным числом концевых сносок, символы которых (числа) стоят после точки (или запятой), а не перед ней, как принято в издательствах. Требуется поменять их местами.
В данном случае лучше использовать диалоговое окно Найти и заменить («CTRL+H»).
В поле Найти вставьте выражение: ([.,:;\!|?])(^2)
А в поле Заменить: \2\1
Не забудьте установить флажок на параметре Подстановочные знаки.
И нажмите кнопку Заменить все.
Неверное расположение знака сноски будет исправлено.
Николай задал вопрос:
В файле Стандартный.doc с образцом текста есть макрос AutoOpen, предлагающий сохранить файл с другим именем. Существует ли возможность автоматического программного удаления макроса при сохранении файла с другим именем? Версия - Word XP.
Вот конкретный макрос, который удалит ваш макрос AutoOpen из конкретного модуля Module1 конкретного проекта Normal (конкретность необходима, чтобы точно указать удаляемый макрос):
Sub removeModule()
'Удаление конкретного макроса при сохранении документа под другим именем
Dim aMdl As Variant
Dim aPrj As Variant
Dim lLin As Long
Dim lLin2Del As Long
Dim strSub2Del As String
Dim oDlg As Dialog
Set oDlg = Dialogs(wdDialogFileSaveAs)
On Error Resume Next
'Открываем окно "Сохранить как"
oDlg.Show
'Вводим имя макроса
strSub2Del = "AutoOpen"
'Присваиваем переменной имя конкретного проекта (в данном случае это проект "Normal")
Set aPrj = Application.VBE.VBProjects("Normal")
'Присваиваем переменной имя конкретного модуля, содержащего удаляемый макрос (например, "Module1")
Set aMdl = aPrj.VBComponents("Module1")
'Процедура удаления макроса из кода модуля
With aMdl.CodeModule
'метод ProcBodyLine возвращает первую строку конкретной процедуры как номер строки (число) _
(например, строка Sub может находиться на 3-й строке в модуле, значит возвращено будет 3)
iLin = .ProcBodyLine(strSub2Del, vbext_pk_Proc)
'метод ProcCountLines возвращает количество строк в конкретной процедуре
iLin2Del = .ProcCountLines(strSub2Del, vbext_pk_Proc)
'собственно удаление строк кода макроса
.DeleteLines iLin, iLin2Del - 1
End With
End Sub
Александр предлагает скачать (ниже) бета-версию его разработки кто заинтересован в подобном решении. Вот, что он предлагает.
Это третья бета-версия макроса пакетной замены. Теперь ее нужно тестировать.
Что уже сделано:
1. Доработан механизм поиска в документе. Текст можно заменять как в основном тексте, так и в надписях, в гиперссылках и объектах WordArt.
2. Добавлены опции «Учитывать регистр» и «Слово целиком».
3. Если файл доступен только для чтения, то он просто пропускается. Запись об этом делается в лог-файл. Таким образом, можно работать и с документами в локальной сети.
4. Глубина вложенности каталогов, в которых можно искать файлы, удовлетворяющие шаблону, не ограничена.
5. Каждый сеанс поиска\замены записывается в подробный лог-файл с указанием документа, проведенных в нем замен, затраченного времени и настроек замены.
6. В процессе поиска\замены отображается прогресс-бар.
Я со своей стороны провел тесты, у меня ошибок не возникает. Возможные ошибки я постарался предусмотреть, но над этим еще нужно будет работать.
Итак, пожалуйста скачивайте макрос и пробуйте его в деле. Все замечания по макросу (ошибки, предложения) пишите в комментариях к этой заметке.
Макрос пакетной замены от Александра Витера.
Как автоматически увеличивать номер договора при каждом открытии документа
Иван задал вопрос:
Существует договор в формате word 2003. У него есть номер. Как можно сделать, чтобы при новом открытии данного документа у него увеличивался номер на один?
Я могу предложить два варианта (спасибо за помощь Александру Витеру). Оба варианта связаны с созданием макроса AutoOpen (действия, выполняемые при открытии документа).
1. Макрос, использующий закладки.
Вам нужно выделить номер договора и создать закладку для него с именем num.
Sub AutoOpen()
'увеличиваем номер договора при каждом открытии документа
'в документе существующий номер должен быть закладкой с именем num
Dim bm As Bookmark
Dim i As Long
Set bm = ActiveDocument.Bookmarks("num")
i = Val(bm.Range.Text)
bm.Range.Select
With Selection
.Text = i + 1
.Bookmarks.Add Name:="num"
.Collapse wdCollapseEnd
End With
Set bm = Nothing
End Sub
2. Макрос с использованием переменной DOCVARIABLE.
Выделите номер договора и вставьте сочетанием клавиш «CTRL+F9» поле (появятся фигурные скобки и мигающий курсор между ними). Между скобками вставьте выражение DOCVARIABLE dog, чтобы получилось примерно так: {DOCVARIABLE dog}.
Затем разместите этот макрос в модуле документа или шаблона Normal.dot. Сохраните документ и закройте. При следующем открытии документа номер договора будет увеличен на единицу.
Sub AutoOpen()
On Error Resume Next
ActiveDocument.Variables("dog").Value = ActiveDocument.Variables("dog").Value + 1
If Err.Number = 5825 Then ActiveDocument.Variables.Add "dog", 1: Err.Clear
ActiveDocument.Fields.Update
End Sub
Вся информация, представленная на сайте WordExpert.ru и в этой рассылке, никаким образом не связана с корпорацией Microsoft. В рассылке упоминаются компании и продукты, которые могут быть зарегистрированными торговыми марками и принадлежать различным физическим и юридическим лицам как на территории РФ, так и за ее пределами.
Авторские права на все материалы, опубликованные на сайте WordExpert.ru и в этой рассылке (включая текст, фотографии, подборку, расположение и т.п.) принадлежат Кокину Антону Вадимовичу, если не указано иное. Вы можете свободно использовать и распространять эти материалы с обязательной ссылкой вида "Информация с сайта WordExpert.ru" и с обязательным указанием автора материала.
Все материалы, опубликованные на сайте WordExpert.ru и в этой рассылке, представлены на информационной основе. Вы можете использовать любую информацию с сайта WordExpert.ru или из данной рассылки исключительно на свой страх и риск. Тем не менее, я рекомендую перед применением какой-либо информации с сайта WordExpert.ru или из данной рассылки обязательно сохранять и создавать резервные копии ваших документов.
В этой рассылке также упоминаются различные web-страницы с соответствующими ссылками. Эти ссылки указываются исключительно в информационных целях и никакой рекомендации или одобрения с моей стороны данных веб-страниц не подразумевается, если не указано иное.