Вот так можно поместить содержимое определённых страниц из одного документа в другой (в данном случае помещается всё содержимое первой страницы одного документа в другой):
Visual Basic | ||
|
Есть 2 вида разрывов страниц:
- вставленный вручную (Word 2003: Вставка — Разрыв… — новую страницу или новую колонку);
- устанавливаемый программой Word (его видно между страницами в режиме просмотра документа Обычный режим).
Каждая страница в документе Word всегда имеет Разрыв страницы: если ручной не установлен, то есть естественный разрыв страницы, если ручной установлен, то ручной есть.
Этот Разрыв страницы в VBA всегда занимает положение в начале страницы (хотя визуально в программе Word разрыв страницы, естественно, находится в самом конце страницы).
Основываясь на том, что Разрыв страницы по подсчётам VBA всегда находится вначале страницы и имеет свойство Range, можно определить диапазон, находящийся на страницах.
ActiveWindow — чтобы понять, что это такое, нужно сделать следующее:
Word 2003
— Окно — Новое. В результате на Панели задач Windows (в самом низу монитора) появится ещё одна кнопка документа: т.е. один и тот же документ может быть открыт несколько раз. Зачем это надо? Я этим никогда не пользовался за всё время работы с Word. Могу предположить, зачем это надо, — чтобы просматривать документ в разных местах одновременно: т.е. в одном окне можем смотреть начало документа, а в другом окне — конец документа и сравнивать что-то в них.
Panes — чтобы понять что такое Panes:
Word 2003
— вставьте сноску (Вставка — Ссылка — Сноска… — Вставить). В результате в документ будет вставлена сноска. Далее: Вид — Обычный — Вид — Сноски. В результате внизу появилось что-то — это и есть Pane: т.е. в данной ситуации у нас два Pane: первый Pane — это собственно документ, а второй Pane — это что-то, связанное со сносками.
У документа всегда есть один Pane — это собственно сам документ. И этот Pane имеет порядковый номер всегда 1 (Panes(1)).
Итак строку кода:
Visual Basic | ||
|
можно прочитать так:
Активный документ — Активное окно — первая Pane — первая страница — первый разрыв на странице (кроме разрыва страницы на странице может быть ещё разрыв раздела) — место в документе, занимаемое этим разрывом страницы (или порядковый номер символа, находящегося вначале страницы. Порядковый номер считается сначала документа) — Start — начало разрыва страницы (начало и конец у разрыва страницы равны).
Если ваши коллеги или знакомые пользуются какими-либо макросами, автоматизирующими часто повторяемые действия или решающими специфические задачи в документах Word, то имеет смысл взять на вооружение такой макрос и использовать его на своем компьютере для своих нужд. Но здесь возникает вопрос: как перенести этот макрос в свои документы (шаблоны)?
Первый способ – воспользоваться диалоговым окном Организатор и скопировать модуль с макросами из одного документа (шаблона) в другой документ, который затем будет передан пользователю.
Здесь следует отметить, что автоматически создаваемые макросы в редакторе Word записываются в стандартный модуль NewMacros глобального (общего) шаблона Normal.dot. Этот модуль может содержать большое количество макросов для самых различных манипуляций с текстом.
Чтобы воспользоваться этим способом выполните следующие действия.
- Откройте документ или шаблон документа, содержащий макрос, который необходимо перенести на другой компьютер (в пользовательский документ) или в другой шаблон.
- В меню Сервис выберите команду Шаблоны и надстройки. Откроется одноименное диалоговое окно. В этом окне нажмите кнопку Организатор. Откроется другое диалоговое окно:
- Перейдите на вкладку Макросы. Слева и справа на этой вкладке будут отображаться панели с содержащимися в шаблонах или документах модулями макросов.
- Убедитесь, что в одной из панелей отображаются все модули из источника – документа (шаблона), из которого осуществляется перенос. Соответственно в другой панели должен быть документ-получатель модуля. Наименования документов присутствуют над панелями. Если ваш документ (источник или получатель) не открыт ни в одной панели, то следует нажать кнопку Закрыть файл на одной из панелей, а затем нажать на изменившееся наименование этой кнопки — Открыть файл — и выбрать нужный документ.
- Выберите в панели соответствующего шаблона или документа нужный модуль (например, модуль NewMacros) и нажмите кнопку Копировать. Модуль будет скопирован в другой документ.
После этого я рекомендую выбрать скопированный файл и нажать кнопку Переименовать, чтобы присвоить переданному модулю новое имя. Это делается для того, чтобы избежать замещение имеющегося в документах пользователя модуля с таким же именем. Ведь другой пользователь также мог создать для себя нужные макросы, которые по умолчанию сохраняются в модуле NewMacros.
- Закройте диалоговые окна и передайте этот документ другому пользователю.
Если вы не хотите передавать все макросы, содержащиеся в модуле NewMacros, а только некоторые из них, то имеет смысл создать отдельный модуль и уже в него включить необходимые для передачи макросы.
Чтобы воспользоваться этим способом, сначала следует открыть редактор Word с документом, содержащим ваши макросы, а затем открыть редактор Visual Basic с помощью сочетания клавиш «Alt»+«F11».
В открывшемся окне редактора кода макрокоманд будут отображаться несколько окон: Окно проектов (Project Explorer), Окно свойств (Properties Window) и, если доступно, то и окно кода:
В окне проектов вы можете видеть различные модули, объединенные в группу Modules. Именно в этой группе в шаблоне Normal.dot и создается стандартный модуль NewMacros.
В окне свойств отображаются доступные для редактирования свойства модулей. Выделив в окне проектов нужный модуль и перейдя в окно свойств можно переименовать этот модуль, дважды щелкнув мышью на поле Name.
Чтобы создать новый модуль, в меню Insert выберите команду Module. В группе Modules будет создан новый модуль с типовым названием Module1, и откроется окно кода с мигающим курсором ввода.
Перейдите на окно свойств и дважды щелкните мышью по полю Name. Типовое наименование модуля выделиться и вы можете переименовать модуль.
Чтобы скопировать во вновь созданный модуль нужные макросы, просто скопируйте коды нужных макросов в буфер обмена и вставьте их в ваш модуль.
После этого можно закрыть окно редактора VB и повторить действия по переносу нужного модуля с макросами из одного документа в другой.
И третий способ переноса макросов в другие документы – экспорт и импорт модулей.
- Выберите нужный модуль для экспорта.
- В меню File выберите команду Export File. Откроется стандартное окно сохранения файла. Обратите внимание, что файл модуля будет иметь расширение bas.
- Укажите место на диске, где файл будет сохранен и сохраните его под каким-нибудь понятным именем.
- На другом компьютере откройте редактор Visual Basic и из меню File выберите команду Import File. Откроется одноименное диалоговое окно, в котором следует выбрать ваш сохраненный файл модуля и нажать кнопку Открыть.
В списке модулей шаблона (или документа) будет создан (воссоздан) новый модуль с содержащимися в нем необходимыми макросами.
Как сохранить макросы в Word 2016?
Рассмотрим способы сохранения макросов в текстовом редакторе Word для дальнейшего использования или отправки другим пользователям.
Со временем у активных пользователей популярного текстового редактора Microsoft Office Word может собраться много макросов, которые не хотелось бы потерять после обновления, переустановки системы или других проблем с оборудованием или программным обеспечением.
Макросами часто нужно поделиться с коллегами по работе, знакомыми и тому подобное.
Все примеры показаны на версии Microsoft Office Word 2016.
Первый способ – это запись макросов в документ, который можно затем отсылать и использовать как шаблон.
Для сохранения макросов в шаблон нужна панель инструментов «Разработчик», которая по умолчанию отключена, поэтому в процессе работы ее нужно будет включить.
Для этого:
Открываем редактор Microsoft Office Word и создаем новый документ.
Нажимаем на «Файл», тогда открываем «Параметры».
Далее открываем «Настроить ленту» и ставим флажок на «Разработчик». Подтверждаем кнопкой «Ок».
Теперь в нашей панели появится вкладка «Разработчик». Открываем ее и нажимаем на кнопку «Шаблон документа».
Находим там кнопку «Организатор» и нажимаем на нее.
Далее открываем вкладку «Макросы». С правой стороны видим список наших макросов. Их с помощью кнопки «Копировать» нужно перенести в левую сторону. После этого можно закрыть окно.
Обратите внимание, что под текстом «Макросы и документы:» должно быть название нашего документа.
Теперь осталось сохранить наш документ с расширением *.docm. Данное расширение и будет вмещать наши добавленные макросы.
Такой документ можно использовать как шаблон, открывая и работая с ним. Все макросы, содержащиеся в данном документе можно будет применять в процессе работы.
При открытии документа с расширением *.docm, Word спросит разрешения на включение их содержимого. Чтобы можно было использовать макросы, нужно данное разрешение предоставить, нажав на кнопку «Включить содержимое».
Второй способ – сохранение файла модуля в окне визуального редактора Microsoft Visual Basic.
Открываем Microsoft Visual Basic с помощью сочетания клавиш Alt + F11 или открыв его с панели «Разработчик» (нужно нажать на кнопку Visual Basic).
В шаблоне Normal (обычно) находим папку Modules. Там можно видеть наши макросы.
Для удобства можно изменить имя. Для этого нужно выделить макрос (щелкнув на его имя левой клавишей мыши) и снизу в свойствах, напротив Name написать новое имя.
Дальше нужно экспортировать макросы. Для этого выделяем мышью макросы, идем в «File → Export File» и указываем место для сохранения файла.
Теперь данный файл можно импортировать на любой компьютер через команду «File → Import File», открыв Microsoft Visual Basic.
Создал несколько свих шаблонов документов MS Word. Каждый из них содержит макросы. Идея такая, что пользователи создают документы на основе этих шаблонов, а макросы обрабатывают документы нужным образом.
Все работает до тех пор пока созданный документ не передается куда-нибудь во вне. Т.к. шаблон хранится в локальной сети, то при открытии документа где-нибудь, где нет доступа к указанному шаблону, документ перестает содержать и макросы.
Можно ли автоматом макросы из шаблона встраивать и в создаваемый документ?
Ответы
Спасибо за ответ.
Возможно я неоднозначно описал проблему. Попробую конкретизировать: у меня есть шаблон Word с поддержкой макросов (Андрей.dot). Создаю документ на основе этого шаблона на своем компьютере («Новый_документ.doc») — макросы работают прекрасно, т.к. хранятся в шаблоне.
Теперь я передаю «Новый_документ.doc» на другой компьютер и вот тут макросы пропадают, т.к. «Новый_документ.doc» ссылается теперь уже на стандартный шаблон «Normal.dot». Ведь мой шаблон (Андрей.dot) стал недоступен.
Мой вопрос: можно ли макросы хранить не в шаблоне, а в создаваемом на его основе документе?
С уважением, Андрей.
- Помечено в качестве ответа Vinokurov Yuriy Moderator 22 ноября 2011 г. 7:52
Все ответы
Добрый день.
Создал несколько свих шаблонов документов MS Word. Каждый из них содержит макросы. Идея такая, что пользователи создают документы на основе этих шаблонов, а макросы обрабатывают документы нужным образом.
Все работает до тех пор пока созданный документ не передается куда-нибудь во вне. Т.к. шаблон хранится в локальной сети, то при открытии документа где-нибудь, где нет доступа к указанному шаблону, документ перестает содержать и макросы.
Можно ли автоматом макросы из шаблона встраивать и в создаваемый документ?
С уважением,
Андрей
- Изменено Жук MVP, Moderator 16 ноября 2011 г. 13:51
Спасибо за ответ.
Возможно я неоднозначно описал проблему. Попробую конкретизировать: у меня есть шаблон Word с поддержкой макросов (Андрей.dot). Создаю документ на основе этого шаблона на своем компьютере («Новый_документ.doc») — макросы работают прекрасно, т.к. хранятся в шаблоне.
Теперь я передаю «Новый_документ.doc» на другой компьютер и вот тут макросы пропадают, т.к. «Новый_документ.doc» ссылается теперь уже на стандартный шаблон «Normal.dot». Ведь мой шаблон (Андрей.dot) стал недоступен.
Мой вопрос: можно ли макросы хранить не в шаблоне, а в создаваемом на его основе документе?
Как перенести настройки Microsoft Word при переустановке Windows или переходе на другой компьютер
Юзабилити, функциональность и настраиваемость – основные преимущества текстового редактора Word от софтверного гиганта Microsoft. Чтобы сделать работу с документами максимально удобной, можно персонализировать ленту меню и панель быстрого доступа, создать свои шаблоны и коллекции стилей форматирования, сформировать свой словарь терминов и т.п. Однако при переустановке Windows или переходе на другой компьютер с частью нажитого добра придётся прощаться.
Столь сложный инструмент, как редактор Word, внутри интерфейса предусматривает лишь экспорт настроенной ленты меню и панели быстрого доступа. Благо, есть способы ручного переноса всех остальных данных. Рассмотрим эти способы для среды Windows.
Описываемые ниже инструкции подходят для Word 2010, 2013, 2016.
1. Лента меню и панель быстрого доступа
Экспорт ленты меню и размещающейся над или под ней панели с кнопками часто используемых функций — это, как упоминалось, единственное, что можно без лишних танцев с бубном извлечь, а затем внедрить в программу, когда та будет установлена уже в среде другой Windows. В меню «Файл» кликаем «Параметры».
Если в новую среду необходимо перенести одну лишь панель быстрого доступа, в левой колонке выбираем её вкладку. А чтобы перенести и панель, и изменённую под свои предпочтения ленту меню, выбираем вкладку «Настроить ленту». Далее в любом из случаев жмём «Импорт-экспорт» и выбираем, соответственно, экспортирование настроек.
Затем указываем путь создания файла с расширением «.exportedUI» . Этот файл храним на отличных от С дисках, помещаем на флешку, загружаем в «облако» или используем любой другой способ переноса данных на другой компьютер. В переустановленной системе или на новом устройстве для импорта настроек снова открываем параметры программы.
И импортируем файл с расширением «.exportedUI» .
Дальнейшие действия предполагают ручной перенос рабочих данных Word, потому текстовый редактор, соответственно, должен быть закрыт. Как добраться к этим данным? Проще всего клавишами Win + R вызвать команду «Выполнить» и ввести:
appdata
После нажатия Enter откроется каталог хранения настроек программ пользовательского профиля «AppData». В нём нам понадобится папка «Roaming», а в ней – подпапка «Microsoft». Все дальнейшие операции будут проводится именно здесь.
2. Пользовательский словарь
Когда мы отдельные слова добавляем в словарь с помощью опции в контекстном меню редактора,
они, естественно, не пополняют словарный запас предустановок Word, а хранятся в отдельном файле Custom.dic . И чтобы на новой Windows при проверке правописания не отвлекаться на формирование своего словаря по новой, его можно перенести. Заходим в папку «UProof», копируем файл Custom.dic в надёжное место и храним его.
В новой среде компьютера открываем эту же папку и переносим сохранённый Custom.dic с заменой исходной редакции.
3. Параметры автозамены
Настроенные нами внутри интерфейса Word параметры автозамены хранятся в файлах с расширением «.acl» . Чтобы их перенести в новую Windows, в папке «Microsoft» открываем подпапку «Office» и копируем в подготовленное место все файлы с этим расширением.
В новой операционной системе, соответственно, возвращаем их назад с заменой исходных редакций.
4. Шаблоны
Настроенный шаблон по умолчанию (открывающийся как любой новый документ) со своей темой оформления, коллекцией стилей форматирования, макетом, колонтитулами, подложкой и прочими индивидуальными вещами также можно перенести в другую среду Windows. В папке «Microsoft» открываем подпапку «Templates» (в Word 2010 эта папка имеет русскоязычное название «Шаблоны») и делаем резервную копию хранящегося там файла Normal.dotm .
В новой среде этот файл возвращаем на место с заменой исходной редакции.
Word предусматривает работу и с другими настраиваемыми образцами документов – личными шаблонами. Их местом хранения по умолчанию в Word 2013 и 2016 значится системная папка «Документы». Следовательно, оттуда шаблоны необходимо переместить на время переустановки Windows, а затем вернуть назад. Или поступить по-другому: в самих настройках редактора прописать путь текущего расположения шаблонов.
В Word 2010 любые отличные от Normal.dotm шаблоны – хоть перенесённые с других компьютеров, хоть сохранённые в процессе работы на текущем устройстве – можно сделать доступными для выбора внутри интерфейса редактора. Для этого их нужно поместить в подпапку «Шаблоны» внутри папки «Microsoft».
Для их задействования при создании нового документа в интерфейсе Word 2010 выбираем «Мои шаблоны».
Sub Процедура1() Dim Начало As Long, Конец As Long Dim Источник As Word.Document, Назначение As Word.Document Const ПутьДокумента As String = "C:Documents and SettingsПользовательРабочий столНазначение.doc" Set Источник = ActiveDocument With Источник.Content.Find .Text = "В С Т А Н О В И В:" .MatchPrefix = True .MatchSuffix = True If .Execute = True Then Начало = .Parent.End + 1 With Источник.Content.Find .Text = "а.м." .MatchPrefix = True .MatchSuffix = True If .Execute = True Then Конец = .Parent.Start - 1 Else MsgBox "Слова: а.м. нет в документе.", vbCritical Exit Sub End If End With Else MsgBox "Слова: В С Т А Н О В И В: нет в документе.", vbCritical Exit Sub End If End With Set Назначение = Documents.Open(FileName:=ПутьДокумента) Назначение.Range(Start:=0, End:=0) = Источник.Range(Start:=Начало, End:=Конец) End Sub
I’m trying to use VBA to extract sentences in one Word document and put it into another Word document.
So for example, if we need to find the title of the organization, we follow the algorithm:
Search for «Title»
Do (Take) each character after «Title» and (stop) until «Address»
asked Jun 7, 2013 at 23:59
0
The following works but there may be a more efficient way of doing this:
Sub FindIt()
Dim blnFound As Boolean
Dim rng1 As Range
Dim rng2 As Range
Dim rngFound As Range
Dim strTheText As String
Application.ScreenUpdating = False
Selection.HomeKey wdStory
Selection.Find.Text = "Title"
blnFound = Selection.Find.Execute
If blnFound Then
Selection.MoveRight wdWord
Set rng1 = Selection.Range
Selection.Find.Text = "Address"
blnFound = Selection.Find.Execute
If blnFound Then
Set rng2 = Selection.Range
Set rngFound = ActiveDocument.Range(rng1.Start, rng2.Start)
strTheText = rngFound.Text
MsgBox strTheText
End If
End If
'move back to beginning
Selection.HomeKey wdStory
Application.ScreenUpdating = True
End Sub
You can switch between documents using Activate, preferably using object variables.
Microsoft MVP Jay Freedman kindly revised this for me to work without the Selection object, making it much neater.
Sub RevisedFindIt()
' Purpose: display the text between (but not including)
' the words "Title" and "Address" if they both appear.
Dim rng1 As Range
Dim rng2 As Range
Dim strTheText As String
Set rng1 = ActiveDocument.Range
If rng1.Find.Execute(FindText:="Title") Then
Set rng2 = ActiveDocument.Range(rng1.End, ActiveDocument.Range.End)
If rng2.Find.Execute(FindText:="Address") Then
strTheText = ActiveDocument.Range(rng1.End, rng2.Start).Text
MsgBox strTheText
End If
End If
End Sub
The only remaining requirement is to get this text into the other document. Something like:
Documents(2).Range.Text = strTheText
answered Jun 8, 2013 at 0:20
Andy GAndy G
19.1k5 gold badges49 silver badges69 bronze badges
2
This code will write to external file:
Sub RevisedFindIt_savetofile2 ()
' Purpose: display the text between (but not including)
' the words "Title" and "Address" if they both appear.
'This file will search current document only, the data in open word document.
Dim rng1 As Range
Dim rng2 As Range
Dim strTheText As String
Dim DestFileNum As Long
Dim sDestFile As String
sDestFile = "C:test-folderf12.txt" 'Location of external file
DestFileNum = FreeFile()
'A valid file number in the range 1 to 511,
'inclusive. Use the FreeFile function to obtain the next available file number.
Open sDestFile For Output As DestFileNum 'This opens new file with name DestFileNum
Set rng1 = ActiveDocument.Range
If rng1.Find.Execute(FindText:="Title") Then
Set rng2 = ActiveDocument.Range(rng1.End, ActiveDocument.Range.End)
If rng2.Find.Execute(FindText:="Address") Then
strTheText = ActiveDocument.Range(rng1.End, rng2.Start).Text
MsgBox strTheText 'writes string to a message box
Print #DestFileNum, strTheText 'Print # will write to external file with the text strTheText
End If
End If
Close #DestFileNum 'Close the destination file
End Sub
answered May 10, 2016 at 13:20
equalizerequalizer
1442 silver badges10 bronze badges
Both Excel and Word have a Range
object. Because you are in Excel VBA but are trying to reference the Word Range
object you need to qualify the variable declaration so that Excel knows you are using a Word Range object.
Dim rng1 As Word.Range
Dim rng2 As Word.Range
Credit to ChipsLetten for spotting this
answered Jul 30, 2015 at 12:28
You could (preferably) use the name of the other document, rather than the index (2):
Documents("OtherName").Range.Text = strTheText
However, this will change the text for the entire document, so you need to navigate to where you wish to insert the text.
It is far better, if possible, that there are pre-existing Bookmarks in the document (or template) that you can refer to:
Documents("OtherName").Bookmarks("bkSome").Range.Text = strTheText
Good luck.
answered Jun 8, 2013 at 21:00
Andy GAndy G
19.1k5 gold badges49 silver badges69 bronze badges