powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Некоторые особенности работы в Word
18 сообщений из 18, страница 1 из 1
Некоторые особенности работы в Word
    #37256364
Фотография CoolMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, друзья!
Хотя существует раздел форума по MS Office, мне уютнее у вас. Думаю, многие программисты так или иначе работают с отчётами в Word. В связи с этим хотелось бы подсказать некоторые особенности, которые могут вам помочь в работе. Сразу оговорюсь, что к Access это не имеет отношения, вся работа с VBA ведётся исключительно в Word.
И начнём мы с простой процедуры, которая устанавливает в строке состояния (Status Bar) процент выполнения текущей задачи. После завершения формирования отчёта строка состояния автоматически принимает исходный вид: "Стр. 1 Разд. 1 "...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
' В строке состояния вывести процент выполнения.
Public Sub SetStatusbarProgress(ByVal oApplication As Word.Application, ByVal iPercent As Integer)
    Static sStatusbar As String
    Dim c As String
    Dim i As Integer
    
    If iPercent <  0  Then iPercent =  0 
    If iPercent >  100  Then iPercent =  100 
    If sStatusbar = "" Then
        c = ChrW( 2000 )
        For i =  1  To  100 
            sStatusbar = sStatusbar & c
        Next
    End If
    oApplication.StatusBar = Left(sStatusbar, iPercent) & " " & iPercent & "%"
End Sub
Вот так можно вызвать эту процедуру:
Код: plaintext
1.
SetStatusbarProgress Application, i *  100  \ iCount
На моём экране 1280x1024 полоска в 100% занимает почти всю ширину строки состояния. Вы можете писать сюда свои рецепты.
...
Рейтинг: 0 / 0
Некоторые особенности работы в Word
    #37257045
Фотография CoolMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После выдачи документа на экран полезно позаботиться о тех, кто его читает. Не у всех большие экраны, поэтому не всегда документ влезает на страницу по ширине, и его приходится прокручивать вправо.
Здесь при разрешении экрана, не большем 1024x768, страница выводится "по ширине страницы".
Код: plaintext
1.
2.
3.
4.
5.
'Подогнать ширину страницы под размер экрана (или окна Word).
Public Sub FitWordPage(ByVal oApp As Application, Optional ByVal wPageFit As WdPageFit = wdPageFitBestFit)
    If System.HorizontalResolution <=  1024  Then _
        oApp.ActiveWindow.ActivePane.View.Zoom.PageFit = wPageFit
End Sub
...
Рейтинг: 0 / 0
Некоторые особенности работы в Word
    #37257150
Фотография CoolMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В VBA для Word не существует функции Nz. Равно как не существует и обратной к Nz функции.
Вместо них с небольшими оговорками можно применить следующие приёмы.
Код: plaintext
1.
2.
'Вместо s = Nz(v, ""):
s = v & ""
Для числовых Nz можно попытаться применить другой приём (честно говоря, не приходилось):
Код: plaintext
1.
2.
'Вместо i = Nz(v, 0):
i = IIf(Len(v) >  0 , v,  0 )
Если стоит задача сбора строки из кусочков, в которых могут быть как полноценные слова, так и пустые строки, и Null, можно попытаться использовать операторы + , ( , ) , & :
Код: plaintext
1.
s = Fam & " " & Im & " " & Otch & (", г." & City) & (", ул." + Street) & (", д." + House)
Однако, если в соответствующих полях находятся пустые строки, получится некрасиво:
Смирнов Игорь Васильевич, г., ул.Молодёжная, д.
На помощь приходит обратная к Nz функция, которая для пустой строки создаёт Null:
Код: plaintext
1.
2.
3.
4.
5.
6.
' Отбрасывает из строки лишние пробелы. Если остаётся пустая строка, преобразует в Null.
' Удобно для конкатенации с другими строками.
Private Function ToNull(ByVal v As Variant) As Variant
    v = Trim(v)
    If Len(v) >  0  Then ToNull = v Else ToNull = Null
End Function
Пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    With address
        s = (ToNull(.Name) + "," + vbNewLine) & _
            (ToNull(.PostIndex) + ", ") & _
            (IIf(Trim(.City) Like "[Гг].*", Trim(.City) + ", ", "г." + ToNull(.City) + ", ")) & _
            ToNull(.Address) & ""
    End With
    If Right(s,  2 ) = ", " Then s = Left(s, Len(s) -  2 )
    If Right(s,  2 ) = "," + vbNewLine Then s = Left(s, Len(s) -  2 )
...
Рейтинг: 0 / 0
Некоторые особенности работы в Word
    #37257420
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CoolMind,

автормне уютнее у вас

Конечно здесь уютнее:)
...
Рейтинг: 0 / 0
Некоторые особенности работы в Word
    #37257460
Фотография CoolMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nebo, :) Здесь проще прослыть знатоком Word'а

Если при выдаче информации в любимый редактор вам требуется не показывать на бумаге какие-то данные, но при этом всё равно хочется их видеть, сделайте шрифт белым (в других местах - обратно чёрным). Это помогает при разборе сложных случаев.
...
Рейтинг: 0 / 0
Некоторые особенности работы в Word
    #37258512
Фотография CoolMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В некоторых случаях при запуске документа Word требуется уточнить какие-то данные у пользователя. Типичный InputBox в коде программы малоинформативен. Для работы с формами ввода информации служит модуль формы.
Откройте VBA (Alt+F11). Добавьте форму (например, через меню Insert > UserForm). Назовите её как-нибудь, например, "frmParameters" через Properties. Добавьте на форму необходимые компоненты. На рисунке их видно слева в панельке Toolbox.
Теперь в панели Project щёлкните правой кнопкой на названии вашей формы и выберите "View Code". Откроется код программы, ответственной за обработчики событий, возникающих в форме. Ключевое событие объекта UserForm - Activate.
Код: plaintext
1.
2.
3.
Private Sub UserForm_Activate()
  ' Здесь ваши действия по инициализации переменных
End Sub
Для выхода из формы и передачи управления обратно в главную программу используется команда
Код: plaintext
Unload Me
Для вызова формы в коде программы нужно прописать следующее:
Код: plaintext
1.
frmParameters.Show
У метода Show есть необязательный параметр - модальность формы. На время работы формы выполнение основной программы приостанавливается.
В Windows 7 замечена проблема: форма открывается на заднем плане и не видна. Кажется, что документ "завис". Вероятно, решением служит такая комбинация (не уверен, потому что работаю в XP):
Код: plaintext
1.
2.
ActiveDocument.Activate
frmParameters.Show vbModal
...
Рейтинг: 0 / 0
Некоторые особенности работы в Word
    #37258654
Фотография CoolMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Замечено, что примерно на 1% компьютеров возникает следующая проблема. Вы открываете документ, ничего не трогаете, а при закрытии он вдруг задаёт вопрос о сохранении. Или, пуще того, просит сохранить Normal.dot. А если документ был создан на основе вашего шаблона, то ещё и этот шаблон. Такое недостойное поведение Word'а надо исправить.
Известно, что Normal.dot сохраняется после каждого открытия/закрытия Word'а автоматически. Однако, он по-прежнему может пытаться об этом спрашивать. При попытке сохранения он может задать и дополнительный вопрос, а если отказались, то ещё два или три (действительно ли хотите выйти из Word; шаблон не сохранён).
Для обработки некоторых типичных ситуаций советую ознакомиться с документом Запрос на сохранение изменений в общем шаблоне Normal.dot или Normal.dotm либо в глобальном шаблоне Normal.dotm .
Давайте рассмотрим их подробнее.

1. Откройте наш текстовый редактор, войдите в VBA-редактор. Проверьте, всё ли в порядке в меню Add-Ins > Add-In Manager...
Хитрые надстройки могут прятаться там. Можете смело почикать их или снять галочки, ведь это не приведёт к сбою в работе Word.

2. Откройте Сервис > Настройка. Появится окно настройки панелей инструментов. Вы окажетесь во вкладке "Команды". Слева, в "Категориях", выберите "Сервис", а справа - "Надстройки для модели COM...". Перетяните хвостатой мышкой эту кнопку на панель инструментов. Теперь нажмите "Закрыть" в диалоговом окне. Нажмите на нашу новую кнопочку, откроется окно с надстройками. Снимите галочки с установленных надстроек. Если просто удалить их, то при загрузке того приложения, которое их создало, надстройки снова появятся. Закройте диалоговое окно. Можно затем убрать кнопку с панели инструментов.

Теперь зайдём в "Гарант", если он у вас установлен. Меню Файл > Настройка конфигурации...
Открывается диалоговое окно, в котором в разделе "Поведение системы" снимите галочку "Включить интеграцию с MS Office".
...
Рейтинг: 0 / 0
Некоторые особенности работы в Word
    #37258862
Фотография CoolMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если при выдаче документа вам требуется выводить по 2 страницы на листе А4 (например, в полях слияния), поступайте следующим образом.
Файл > Параметры страницы,
далее выберите "2 страницы на листе".
1) Если ориентация при этом останется книжной, то на экране лист А4 разделится пополам, нижняя половинка исчезнет, ширина будет больше высоты (см. рисунок). В этом случае, если вы вставите бумагу в принтер, на ней будут выходить документы по 2 штуки на страницу. Можно будет печатать отдельные странички на листах А5 (порежете лист пополам, вставите в принтер - он распечатается).
2) Если ориентация будет альбомной, то на экране лист А4 уменьшится в размерах, ширина будет меньше высоты. При печати будут выходить 2 странички на лист. К сожалению, отдельные странички на половинках листов не будут распечатываться. По крайней мере, на принтере HP 1020. Если вы вставите в принтер половинку листа и попробуете напечатать отдельную страничку из такого документа, то страничка останется чистой, а принтер попытается напечатать на несуществующей половинке листа, чем только испачкает барабан, и следующие копии будут слегка серыми.
...
Рейтинг: 0 / 0
Некоторые особенности работы в Word
    #37261989
Фотография CoolMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня поговорим об общих для нескольких проектов процедурах. Речь пойдёт о Word, но аналогичные действия можно провести и в Access. Я не упомянул о том, что в данном разделе Word выступает как самостоятельный инструмент отчётов, а не форма выдачи отчёта из Access. Т.е. работа с внешней базой данных возможна и из Word.
Известно, что внутри организации возможны изменения в оформлении документов. Это порождает проблему, из-за которой часто приходится менять и сами шаблоны, и отдельные процедуры. Поскольку шаблонов отчётов может быть много, а общие процедуры должны быть едины для всех, приходится часто их обновлять.
Стандартным способом является сохранение общих для нескольких проектов процедур в едином модуле, а затем добавление его в каждый шаблон. Это делается через VBA: Import File.
Однако, если шаблонов (проектов) у вас много, такой метод заставляет хорошо помучаться. Решением является добавление модуля через References.
Итак, откройте Word, затем VBA. Добавьте новый модуль (Insert > Module). Внесите в него все процедуры, которые будут использоваться в проектах. Можно добавить несколько модулей, можно также на панель инструментов шаблона внести дополнительные кнопки.
Так, у меня используется следующая кнопка:
Код: plaintext
1.
2.
3.
4.
' Закроет текущий документ без сохранения
Sub ЗакрытьДокумент()
    If Documents.Count =  1  Then Application.Quit wdDoNotSaveChanges Else ActiveDocument.Close wdDoNotSaveChanges
End Sub
На панель инструментов вынесена кнопка, соответствующая этой процедуре. Помогает закрывать документ, минуя вопрос о сохранении документа.

Далее следует сохранить шаблон (расширение - dot) в папке, которая будет использоваться для всех проектов.
Теперь осталось для каждого шаблона отчёта выполнить следующие действия:
- открыть шаблон,
- перейти в VBA,
- войти в меню Tools > References,
- нажать в диалоговом окне кнопку Browse, затем выбрать "Тип файлов" - "Документы Word (*.doc, *.dot)", перейти в папку, куда вы сохранили общий шаблон, выбрать его, нажать OK,
- сохранить и выйти из шаблона документа.
Всё, к форме отчёта подключён общий модуль. Можно точно также подключить общий модуль ко всем оставшимся шаблонам.
Теперь, если вы вносите какие-то изменения в общие процедуры, они отразятся на всех проектах. Не придётся заново обходить все проекты и копировать общие процедуры. Единственная сложность - это папка, в которой лежит общий модуль. Дело в том, что через Tools > References указывается абсолютный путь. Соответственно, на компьютере пользователя он должен быть таким же, как у вас. Если это не так, то во время выполнения отчёта общий модуль будет искаться в текущей для отчёта папке. Если он не будет найден, возникнет ошибка.
...
Рейтинг: 0 / 0
Некоторые особенности работы в Word
    #37266379
Фотография CoolMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Время от времени приходится исправлять ошибки. Так, например, процедуру FitWordPage придётся переделать.
Выяснилось, что если в открывшемся окне Word нет ни одного документа (пустое окно), то она выдаёт ошибку. Если документов много, то меняет масштаб только у активного окна. Исправим.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
'Подогнать ширину страницы под размер экрана (или окна Word).
Public Sub FitWordPage(ByVal oApp As Application, Optional ByVal wPageFit As WdPageFit = wdPageFitBestFit)
    Dim oWindow As Word.Window
    Dim oPane As Word.Pane
    
    If System.HorizontalResolution <=  1024  Then ' Для разрешения экрана <= 1024x768
        For Each oWindow In oApp.Windows
            For Each oPane In oWindow.Panes
                oPane.View.Zoom.PageFit = wPageFit
            Next
        Next
    End If
End Sub
Также хотел отметить, что если вы формируете документ по 2 страницы на лист (см. совет от 13 май 11, 12:38), то часто ножницами необходимо разрезать А4 на 2 части. Чтобы операторы ПК не замучились вычислять середину, поможем им в этом. Встаньте в пустое место шаблона. Нажмите панель рисования, выберите линию, проведите её через весь документ (можно с кнопкой Shift для точности). Расположите линию у края странички. Она перестанет быть видна, но на печати будет ровно посерединке страницы. Сохраните шаблон.
...
Рейтинг: 0 / 0
Некоторые особенности работы в Word
    #37411651
Фотография CoolMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Недавно озаботился тем, чтобы сделать шкалу выполнения (progressbar) более симпатичным. Нашёл пару изображений, которые помогли бы в этом.


Sonic Progress Bar Control и ProgressBarXP соответственно.

Сделал простенький пример. Внутри есть модуль формы со шкалой прогресса и заполнение таблицы. При нажатии на кнопку "Отмена" таблица перестаёт заполняться.
Чтобы запустить пример, достаточно дважды щёлкнуть по шаблону. Результат вы видите на экране.
...
Рейтинг: 0 / 0
Некоторые особенности работы в Word
    #37411697
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CoolMindХотя существует раздел форума по MS Office, мне уютнее у вас. Думаю, многие программисты так или иначе работают с отчётами в Word. В связи с этим хотелось бы подсказать некоторые особенности, которые могут вам помочь в работе. Сразу оговорюсь, что к Access это не имеет отношения, вся работа с VBA ведётся исключительно в Word.
Первое выделенное красным - не аргумент. А второе - как раз аргумент. Хороший и полезный топик, пусть у людей будет шанс его найти. Переношу.

Модератор: Тема перенесена из форума "Microsoft Access".
...
Рейтинг: 0 / 0
Некоторые особенности работы в Word
    #37412299
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поясните пжл получше о строке состояния (Status Bar) процент выполнения текущей задачи
так мы вызываем процедуру:
Код: plaintext
SetStatusbarProgress Application, i *  100  \ iCount
А когда она будет выполняться??
имею ввиду например код
Код: plaintext
1.
2.
for q =  1  To  999999 
Beep
Next
и куда писать вызов процедуры, чтобы всё выполнялось паралельно, Beep само собой, а прогресс само собой
...
Рейтинг: 0 / 0
Некоторые особенности работы в Word
    #37412311
Фотография CoolMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю, добрый вечер!
Ципихович Эндрю
Код: plaintext
1.
2.
for q =  1  To  999999 
Beep
Next

В этом случае вам можно написать так:
Код: plaintext
1.
2.
3.
for q =  1  To  999999 
    Beep
    SetStatusbarProgress Application, q *  100  \  999999 
Next
Звук лучше выключить
Правда, во время работы такого цикла будет заметно небольшое подёргивание строки состояния, поэтому лично я перешёл к другому варианту (см. предыдущий совет со шкалой прогресса в виде рисунка).
...
Рейтинг: 0 / 0
Некоторые особенности работы в Word
    #37412362
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CoolMind,
зря я такой пример написал 999999 Бипов, а если код в столбик 999999 Бипов, тогда где вызов процедуры писать???

Beep
Beep
Beep
Beep
Beep
Beep
Beep
......
999999Beep
...
Рейтинг: 0 / 0
Некоторые особенности работы в Word
    #37412763
Фотография CoolMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю, в этом случае вам можно добавить вызов процедуры в любом месте программы. Например, после каждого десятого оператора. Но тогда и считать кол-во процентов надо самостоятельно. Например, используя ещё одну процедуру (код не проверял).
Код: plaintext
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.
Dim i As Long
Dim lCount As Long

' Увеличивает счётчик выполненных операторов и рисует шкалу.
Private Sub ShowNextPercent
    i = i +  10 
    SetStatusbarProgress Application, i *  100  \ lCount
    DoEvents
End Sub

Private Sub ВашаПроцедура
    i =  0 
    lCount =  999999 

    Beep
    Beep
    ...
    Beep ' 10-ый раз
    ShowNextPercent
    Beep
    Beep
    ...
    Beep ' 20-ый раз
    ShowNextPercent
    ...
    Beep ' 999999-ый раз
    ShowNextPercent
End Sub
...
Рейтинг: 0 / 0
Некоторые особенности работы в Word
    #37413497
ALEXIS_22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СoolMindНедавно озаботился тем, чтобы сделать шкалу выполнения (progressbar) более симпатичным. Нашёл пару изображений, которые помогли бы в этом.

А можно немного поподробнее об использовании и настройке этих элементов? Скачать я смогу видимо только не раньше понедельника. Бесплатно - видимо только на какой-то ограниченный срок?
...
Рейтинг: 0 / 0
Некоторые особенности работы в Word
    #37413668
Фотография CoolMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ALEXIS_22, добрый день! Оба компонента платные, но в демо-режиме работают. Sonic Progress Bar ActiveX Control устанавливается как ActiveX; ProgressBarXP - это, по-моему, OCX, а в примере есть использование на VB. К сожалению, я не стал использовать их как ActiveX'ы в своих программах, пока ограничился одним рисунком.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Некоторые особенности работы в Word
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]