Word макросы скопировать текст
Доброго времени суток.
Прошу помочь решить следующую задачу:
Имеется документ Word, содержащий текст.
Пользователь выделяет участок текста и запускает макрос.
Макрос должен сохранить выделенный текст в последнюю пустую ячейку заданного столбца закрытой книги Excel.
Допускается, чтобы, на момент сохранения, макрос открывал книгу Excel в скрытом режиме, а затем закрывал.
Из одной книги Excel в другую это удается реализовать, а из Word не получается.
Заранее спасибо. И с наступающим Новым Годом!
Доброго времени суток.
Прошу помочь решить следующую задачу:
Имеется документ Word, содержащий текст.
Пользователь выделяет участок текста и запускает макрос.
Макрос должен сохранить выделенный текст в последнюю пустую ячейку заданного столбца закрытой книги Excel.
Допускается, чтобы, на момент сохранения, макрос открывал книгу Excel в скрытом режиме, а затем закрывал.
Из одной книги Excel в другую это удается реализовать, а из Word не получается.
Заранее спасибо. И с наступающим Новым Годом! Мур
Из одной книги Excel в другую это удается реализовать, а из Word не получается.
Заранее спасибо. И с наступающим Новым Годом! Автор - Мур
Дата добавления - 31.12.2013 в 13:19
Быть или не быть, вот в чем загвоздка!
Уважаемый RAN и остальные участники форума.
Прошу прощения, про решение аналогичной задачи с гиперссылками, предоставленное Вами ранее, я совсем забыл.
Необходимые изменения внес, все получилось. Большое спасибо.
Вместе с тем, к вопросу о копировании выделенного участка текста в Excel я пришел в связи с тем, что не смог добиться гиперссылки на произвольный участок текста в документе Word (текст не структурирован). Если поможете в решении и этой задачи, буду благодарен.
В любом случае, низкий поклон.
Уважаемый RAN и остальные участники форума.
Прошу прощения, про решение аналогичной задачи с гиперссылками, предоставленное Вами ранее, я совсем забыл.
Необходимые изменения внес, все получилось. Большое спасибо.
Вместе с тем, к вопросу о копировании выделенного участка текста в Excel я пришел в связи с тем, что не смог добиться гиперссылки на произвольный участок текста в документе Word (текст не структурирован). Если поможете в решении и этой задачи, буду благодарен.
В любом случае, низкий поклон. Мур
"Гиперссылка на Excel" не нужна. И не нужна любая "ссылка".
У вас же обратная задача - "сослаться на выделенный текст". И кто вам запрещает вставить ссылку на маркер из документа Word (или на поле документа) в таблицу Excel?
Что же касается "произвольного участка текста" - то это ненамного сложнее. Но намного затратнее по телепатическому восприятию ваших хотелок.
"Гиперссылка на Excel" не нужна. И не нужна любая "ссылка".
У вас же обратная задача - "сослаться на выделенный текст". И кто вам запрещает вставить ссылку на маркер из документа Word (или на поле документа) в таблицу Excel?
Что же касается "произвольного участка текста" - то это ненамного сложнее. Но намного затратнее по телепатическому восприятию ваших хотелок. AndreTM
Что же касается "произвольного участка текста" - то это ненамного сложнее. Но намного затратнее по телепатическому восприятию ваших хотелок. Автор - AndreTM
Дата добавления - 31.12.2013 в 17:37
Доброго времени суток!
AndreTM, спасибо за ваше желание помочь, но мне не ясно, что вы предлагаете, в частности
последнее выглядит, хочется так думать, что я не совсем корректно изложил свои "хотелки".
Попробую еще раз.
Каждое утро я обрабатываю (читаю с экрана) сводки происшествий по области, при этом периодически встречаются участки текста,
которые необходимо копировать в последнюю пустую ячейку заданного столбца Excel. Открыть оба файла и копировать в ручную нет возможности.
Выход вижу в том, чтобы создать макрос и прицепить его на какой-нибудь значок на панели инструментов. При появлении нужного текста, выделяю его
и запускаю макрос, который копирует выделенный фрагмент в последнюю пустую ячейку заданного столбца Excel. RAN, уже помог мне с ссылками, но в последствии я отказался от такого решения, потому, что ссылка возвращает весь документ, потом еще надо задавать поиск самого текста, что не совсем удобно.
И здесь, на мой взгляд, два выхода: либо копировать сразу участки текста, либо получать ссылку, возвращающую заданный участок текста в другом документе.
Доброго времени суток!
AndreTM, спасибо за ваше желание помочь, но мне не ясно, что вы предлагаете, в частности
последнее выглядит, хочется так думать, что я не совсем корректно изложил свои "хотелки".
Попробую еще раз.
Каждое утро я обрабатываю (читаю с экрана) сводки происшествий по области, при этом периодически встречаются участки текста,
которые необходимо копировать в последнюю пустую ячейку заданного столбца Excel. Открыть оба файла и копировать в ручную нет возможности.
Выход вижу в том, чтобы создать макрос и прицепить его на какой-нибудь значок на панели инструментов. При появлении нужного текста, выделяю его
и запускаю макрос, который копирует выделенный фрагмент в последнюю пустую ячейку заданного столбца Excel. RAN, уже помог мне с ссылками, но в последствии я отказался от такого решения, потому, что ссылка возвращает весь документ, потом еще надо задавать поиск самого текста, что не совсем удобно.
И здесь, на мой взгляд, два выхода: либо копировать сразу участки текста, либо получать ссылку, возвращающую заданный участок текста в другом документе. Мур
последнее выглядит, хочется так думать, что я не совсем корректно изложил свои "хотелки".
Попробую еще раз.
Каждое утро я обрабатываю (читаю с экрана) сводки происшествий по области, при этом периодически встречаются участки текста,
которые необходимо копировать в последнюю пустую ячейку заданного столбца Excel. Открыть оба файла и копировать в ручную нет возможности.
Выход вижу в том, чтобы создать макрос и прицепить его на какой-нибудь значок на панели инструментов. При появлении нужного текста, выделяю его
и запускаю макрос, который копирует выделенный фрагмент в последнюю пустую ячейку заданного столбца Excel. RAN, уже помог мне с ссылками, но в последствии я отказался от такого решения, потому, что ссылка возвращает весь документ, потом еще надо задавать поиск самого текста, что не совсем удобно.
И здесь, на мой взгляд, два выхода: либо копировать сразу участки текста, либо получать ссылку, возвращающую заданный участок текста в другом документе. Автор - Мур
Дата добавления - 05.01.2014 в 17:36
Гиперссылку на произвольный текст создать нельзя. A вот на закладку - можно.
Sub Мяу()
Dim bkm$
bkm = InputBox("Введите имя закладки")
On Error GoTo err_
If VarType(b) = vbBoolean Then Exit Sub
With ActiveDocument.Bookmarks
.Add Range:=Selection.Range, Name:=bkm
.DefaultSorting = wdSortByName
.ShowHidden = True
End With
Dim objExcel As Object
Dim FileName$
FileName = "C:\Documents and Settings\Андр\Мои документы\0.xls"
Set objExcel = CreateObject("Excel.Application")
DoEvents
With objExcel
.DisplayAlerts = False
With .Workbooks.Open(FileName)
DoEvents
.sheets(1).Hyperlinks.Add Anchor:=.sheets(1).Range("A1"), _
Address:=ActiveDocument.FullName, _
SubAddress:=bkm, _
TextToDisplay:=ActiveDocument.FullName
.Save
.Close
End With
.DisplayAlerts = False
End With
Set objExcel = Nothing
On Error GoTo 0
Exit Sub
err_:
MsgBox Err.Description
On Error GoTo 0
End Sub
Гиперссылку на произвольный текст создать нельзя. A вот на закладку - можно.
Sub Мяу()
Dim bkm$
bkm = InputBox("Введите имя закладки")
On Error GoTo err_
If VarType(b) = vbBoolean Then Exit Sub
With ActiveDocument.Bookmarks
.Add Range:=Selection.Range, Name:=bkm
.DefaultSorting = wdSortByName
.ShowHidden = True
End With
Dim objExcel As Object
Dim FileName$
FileName = "C:\Documents and Settings\Андр\Мои документы\0.xls"
Set objExcel = CreateObject("Excel.Application")
DoEvents
With objExcel
.DisplayAlerts = False
With .Workbooks.Open(FileName)
DoEvents
.sheets(1).Hyperlinks.Add Anchor:=.sheets(1).Range("A1"), _
Address:=ActiveDocument.FullName, _
SubAddress:=bkm, _
TextToDisplay:=ActiveDocument.FullName
.Save
.Close
End With
.DisplayAlerts = False
End With
Set objExcel = Nothing
On Error GoTo 0
Exit Sub
err_:
MsgBox Err.Description
On Error GoTo 0
End Sub
Sub Мяу()
Dim bkm$
bkm = InputBox("Введите имя закладки")
On Error GoTo err_
If VarType(b) = vbBoolean Then Exit Sub
With ActiveDocument.Bookmarks
.Add Range:=Selection.Range, Name:=bkm
.DefaultSorting = wdSortByName
.ShowHidden = True
End With
Dim objExcel As Object
Dim FileName$
FileName = "C:\Documents and Settings\Андр\Мои документы\0.xls"
Set objExcel = CreateObject("Excel.Application")
DoEvents
With objExcel
.DisplayAlerts = False
With .Workbooks.Open(FileName)
DoEvents
.sheets(1).Hyperlinks.Add Anchor:=.sheets(1).Range("A1"), _
Address:=ActiveDocument.FullName, _
SubAddress:=bkm, _
TextToDisplay:=ActiveDocument.FullName
.Save
.Close
End With
.DisplayAlerts = False
End With
Set objExcel = Nothing
On Error GoTo 0
Exit Sub
err_:
MsgBox Err.Description
On Error GoTo 0
End Sub
Не знаю, как обратиться к гостю, в общем очень похоже на то что требовалось.
гиперсылка создается, но пока не открывается, выдает "не удается открыть указанный файл"
Подумаю, может я что не так сделал. и отпишусь.
Про закладки в Word я вообще не знал, отдельное спасибо.
И еще, не могу сообразить как корректно поменять [vba]
Не знаю, как обратиться к гостю, в общем очень похоже на то что требовалось.
гиперсылка создается, но пока не открывается, выдает "не удается открыть указанный файл"
Подумаю, может я что не так сделал. и отпишусь.
Про закладки в Word я вообще не знал, отдельное спасибо.
И еще, не могу сообразить как корректно поменять [vba]
Строка
If VarType(b) = vbBoolean Then Exit Sub
лишняя. Необходимо удалить.
После добавления закладки документ нужно сохранить
ActiveDocument.Save
Андрей, "такая корова нужна самому".
Строка
If VarType(b) = vbBoolean Then Exit Sub
лишняя. Необходимо удалить.
После добавления закладки документ нужно сохранить
ActiveDocument.Save
Андрей, "такая корова нужна самому". .
Андрей, "такая корова нужна самому". Автор - .
Дата добавления - 07.01.2014 в 18:51
Заработало.
Про корову ничего не понял, одни догадки. навреное для Андрея понятно.
А как же вставить гиперссылку не в A1, а следующую свободную ячейку столбца.
Заработало.
Про корову ничего не понял, одни догадки. навреное для Андрея понятно.
А как же вставить гиперссылку не в A1, а следующую свободную ячейку столбца. Мур
Sub Мяуу() ' Создание закладки в Word для выделенного диапазона с последующим созданием гиперссылки в заданном документе Excel на созданную закладку
Dim bkm$ ' Задаем переменную для названия закладки
Dim lLastRow As Long ' Задаем переменную для номера последнего непустого столбца
bkm = InputBox("Введите номер задания") ' Окно с названием закладки, заодно и текст ссылки
On Error GoTo err_
With ActiveDocument.Bookmarks ' Для активного документа
.Add Range:=Selection.Range, Name:=bkm
.DefaultSorting = wdSortByName
ActiveDocument.Save
.ShowHidden = True
End With
Dim objExcel As Object
Dim FileName$
FileName = "C:\Users\user\Desktop\Книга1.xlsm"
Set objExcel = CreateObject("Excel.Application")
DoEvents
With objExcel
.DisplayAlerts = False
With .Workbooks.Open(FileName)
DoEvents
lLastRow = .sheets(1).UsedRange.Row + .sheets(1).UsedRange.Rows.Count
.sheets(1).Hyperlinks.Add Anchor:=.sheets(1).Range("A" & lLastRow), Address:=ActiveDocument.FullName, SubAddress:=bkm, TextToDisplay:=bkm
.Save
.Close
End With
.DisplayAlerts = False
End With
Set objExcel = Nothing
On Error GoTo 0
Exit Sub
err_:
MsgBox Err.Description
On Error GoTo 0
End Sub
[/vba]
В основе конечно код "гостя" На комментарии можно не обращать внимание.
Есть недостаток - по умолчанию должна быть заполнена первая или первая и последующие несколько строк.
Sub Мяуу() ' Создание закладки в Word для выделенного диапазона с последующим созданием гиперссылки в заданном документе Excel на созданную закладку
Dim bkm$ ' Задаем переменную для названия закладки
Dim lLastRow As Long ' Задаем переменную для номера последнего непустого столбца
bkm = InputBox("Введите номер задания") ' Окно с названием закладки, заодно и текст ссылки
On Error GoTo err_
With ActiveDocument.Bookmarks ' Для активного документа
.Add Range:=Selection.Range, Name:=bkm
.DefaultSorting = wdSortByName
ActiveDocument.Save
.ShowHidden = True
End With
Dim objExcel As Object
Dim FileName$
FileName = "C:\Users\user\Desktop\Книга1.xlsm"
Set objExcel = CreateObject("Excel.Application")
DoEvents
With objExcel
.DisplayAlerts = False
With .Workbooks.Open(FileName)
DoEvents
lLastRow = .sheets(1).UsedRange.Row + .sheets(1).UsedRange.Rows.Count
.sheets(1).Hyperlinks.Add Anchor:=.sheets(1).Range("A" & lLastRow), Address:=ActiveDocument.FullName, SubAddress:=bkm, TextToDisplay:=bkm
.Save
.Close
End With
.DisplayAlerts = False
End With
Set objExcel = Nothing
On Error GoTo 0
Exit Sub
err_:
MsgBox Err.Description
On Error GoTo 0
End Sub
[/vba]
В основе конечно код "гостя" На комментарии можно не обращать внимание.
Есть недостаток - по умолчанию должна быть заполнена первая или первая и последующие несколько строк. Мур
Sub Мяуу() ' Создание закладки в Word для выделенного диапазона с последующим созданием гиперссылки в заданном документе Excel на созданную закладку
Dim bkm$ ' Задаем переменную для названия закладки
Dim lLastRow As Long ' Задаем переменную для номера последнего непустого столбца
bkm = InputBox("Введите номер задания") ' Окно с названием закладки, заодно и текст ссылки
On Error GoTo err_
With ActiveDocument.Bookmarks ' Для активного документа
.Add Range:=Selection.Range, Name:=bkm
.DefaultSorting = wdSortByName
ActiveDocument.Save
.ShowHidden = True
End With
Dim objExcel As Object
Dim FileName$
FileName = "C:\Users\user\Desktop\Книга1.xlsm"
Set objExcel = CreateObject("Excel.Application")
DoEvents
With objExcel
.DisplayAlerts = False
With .Workbooks.Open(FileName)
DoEvents
lLastRow = .sheets(1).UsedRange.Row + .sheets(1).UsedRange.Rows.Count
.sheets(1).Hyperlinks.Add Anchor:=.sheets(1).Range("A" & lLastRow), Address:=ActiveDocument.FullName, SubAddress:=bkm, TextToDisplay:=bkm
.Save
.Close
End With
.DisplayAlerts = False
End With
Set objExcel = Nothing
On Error GoTo 0
Exit Sub
err_:
MsgBox Err.Description
On Error GoTo 0
End Sub
[/vba]
В основе конечно код "гостя" На комментарии можно не обращать внимание.
Есть недостаток - по умолчанию должна быть заполнена первая или первая и последующие несколько строк. Автор - Мур
Дата добавления - 08.01.2014 в 10:16
Всем привет.
Если не сложно, помогите пожалуйста решить проблему.
Появилась задача копирования текста из разных файлов Word в целевой файл Word. Есть ли возможность копирования в целевой файл текста без предварительного открытия файла "донора"?
Т.е. пример работы:
Открываем целевой файл.
Устанавливаем курсор в требуемое место.
Запускаем макрос, который:
1. По заданному пути найдет файл донора
2. Скопирует все его содержимое в буфер обмена windows
3. Вставит в целевой файл текст из буфера.
Данная потребность обусловлена тем, то целевой файл будет "собираться" из разных блоков файлов донора, поэтому держать 10 открытых вордов доноров не особо удобное решение.
Заранее спасибо.
Копирование содержимого word в word из Excel с макросом
Ребят, добрый вечер! Подскажите,. пожалуйста, мне надо по сути создать копию документа WORD из.
Замена текста в Word макросом из Excel
Есть файл Экселя с данными, есть текстовый шаблон Ворда с метками для этих данных Сделал макрос.
Как макросом в word-e выделить два несмежных фрагмента текста?
Мне кажется, что должна существовать функция позволяющая добавлять новое выделение к уже.
Выборка из текста (файл ms word) предложений и копирование в новый файл (ms word) с определенным форматом
Добрый день. Очень нужна помощь в создании макроса. Есть файлы в которых содержатся вопросы и.
Решение
Копирование текста в Word
Всем привет, имеется некоторый текст в Word(первый текст). Мне нужно провести над ним некоторые.
Копирование текста в Word из Excel
Необходимо чтобы при нажатии на кнопку инициализировалось следующее действие. Макром пробегает по.
Копирование текста между документами Word
' "Пусть надо скопировать текст из текущего файла в новый документ, ' с начала первой страницы, до.
Копирование текста Word
Здравствуйте, нужна помощь в решении следующей задачи: Нужно скопировать достаточно большой.
Копирование текста с паскаля на word
Подскажите пожалуйста, можно ли текст набранный с паскаля переместить в word и обратно
Сведем рутину к минимуму, или Семь задач для MS Word с оркестром
Конечно, речь пойдет о макросах. Именно с их помощью так удобно и легко разнообразить меню редактора Word. Когда много работаешь с текстами, то среди нескольких сотен его инструментов все равно не оказывается именно того, который нужен. Приходится изготавливать его самостоятельно.
Созданные макросы мы будем выводить на панель инструментов, так что сначала научимся делать кнопки.
1. Выберите команду "Вид" > "Панели инструментов" > "Настройка".
2. На вкладке "Команды" в списке "Категории" выберите пункт "Макросы".
3. Найдите имя созданного макроса и перетащите его на одну из панелей инструментов.
4. Выберите из контекстного меню новой кнопки команду "Основной стиль".
Дальше могут быть варианты - выбрать для новой кнопки готовый значок из списка (42 варианта, обычно подходящего не находится), создать новый значок с нуля или добиться приемлемого компромисса, переделывая один из готовых значков.
5. Выберите готовый значок из набора или скопируйте подходящий значок одной из стандартных кнопок Word (контекстное меню кнопки, команда "Копировать значок на кнопке").
6. Если вы копировали значок со стандартной кнопки, выберите из контекстного меню вашей кнопки команду "Вставить значок для кнопки", а затем - команду "Изменить значок на кнопке". Если выбирали из набора - сразу последнюю.
7. В открывшемся окне "Редактор кнопок" измените значок так, как хочется, а затем закройте оба окна диалога.
Начнем с чего-нибудь попроще - автоматизируем такой инструмент редактора, как деление текста на предложения. Для этого создадим два макроса: один будет объединять два предложения в одно, а другой, наоборот, делить одно предложение на два. Алгоритм первого прост: ищем ближайшую после курсора точку, превращаем ее в запятую, а следующее слово пишем с маленькой буквы.
Sub CombineSentences()
' Объединение двух предложений в одно
With Selection
With.Find
.ClearFormatting
.Text = "."
.Forward = True
.Wrap = wdFindStop
.Execute
End With
.TypeText (",")
.MoveRight Unit:=wdWord
.Range.Case = wdLowerCase
End With
End Sub
Второй макрос производит противоположные действия - находит ближайшую запятую, ставит вместо нее точку, и пишет следующее слово с большой буквы.
Sub SplitSentence()
' Деление одного предложения на два
With Selection
With.Find
.ClearFormatting
.Text = ","
.Forward = True
.Wrap = wdFindStop
.Execute
End With
.TypeText (".")
.MoveRight Unit:=wdWord
.Range.Case = wdUpperCase
End With
End Sub
Во время работы с этим макросом нужно видеть символы абзацев - выделяя несколько абзацев, следите, чтобы символ конца последнего абзаца тоже был выделен.
Бывает нужно изменить форматирование целого абзаца - чтобы он стал весь полужирный или, скажем, курсивный (например, вы так подзаголовки выделяете, или же текст, с которым вы работаете, - интервью). Для этого можно использовать следующий макрос (курсор может стоять в любом месте абзаца).
Sub ParagraphBold()
' Выделение абзаца полужирным
With Selection
.MoveRight
.MoveUp Unit:=wdParagraph
.MoveDown Unit:=wdParagraph, Extend:=wdExtend
.Font.Bold = True
End With
End Sub
Если в этом макросе заменить в третьей с конца строке Bold на Italic - получите макрос выделения абзаца курсивом, Underline - подчеркиванием, StrikeThrough - перечеркиванием, AllCaps - все буквы станут большими.
Также с помощью макросов можно создавать списки, не применяя специфического форматирования абзацев, а ограничиваясь тире в качестве элемента оформления и точкой с запятой в качестве разделителя (курсор стоит в любом месте первого абзаца).
Sub Listing()
' Создание списка из нескольких абзацев
With Selection
Do
.HomeKey Unit:=wdLine
.MoveRight Extend:=wdExtend
.Range.Case = wdLowerCase
.HomeKey Unit:=wdLine
.TypeText ("- ")
.MoveDown Unit:=wdParagraph
.MoveLeft
.TypeText (";")
.MoveDown Unit:=wdParagraph
If MsgBox("Еще?", vbYesNo + vbQuestion, "") = vbNo Then Exit Do
Loop
.MoveLeft Count:=2
.Delete
.TypeText (".")
End With
End Sub
Часто при работе с документом возникает проблема выбора языка, на котором набран текст. В Word 2000 существует режим автоматического выбора языков, но он не дает гарантии, а в Word 97 и этого не было. Поэтому перед проверкой целесообразно запустить макрос, приведенный ниже. Он устанавливает для всего документа параметр языка "русский", а для слов, начинающихся с латинской буквы - "английский" (где находится курсор в момент запуска этого макроса, не имеет значения).
Sub SetLanguage()
' Выбор языка для проверки правописания
With Selection
.WholeStory
.LanguageID = wdRussian
.NoProofing = False
.HomeKey Unit:=wdStory
n1 = 0
w1 = "a"
se1 =.End
se2 = -1
Do While se1 <> se2
w1 = Left(Trim(.Words(1)), 1)
If w1 <> "" Then
n1 = Asc(w1)
If (n1 >= 65 And n1 = 97 And n1 = 2 Then
If Windows(1).Active = True Then
n = 1
m = 2
End If
If Windows(2).Active = True Then
n = 2
m = 1
End If
If n = 1 Or n = 2 Then
With Selection
.Copy
Windows(m).Activate
.Paste
.TypeParagraph
End With
Windows(n).Activate
Else
MsgBox "Выберите документ, идущий в меню 'Окно' под номером 1 или 2.", vbExclamation, ""
End If
Else
MsgBox "Надо открыть два документа", vbExclamation, ""
End If
End Sub
Для того чтобы этот макрос мог работать, необходимо открыть два документа. Они должны идти под номерами 1 и 2 в меню "Окно". С документами под номерами 3, 4, 5 и так далее макрос работать не будет. Проще всего, конечно, когда открыты только два файла. В том документе (неважно, первый он или второй), куда вы хотите копировать текст, установите курсор на пустой абзац. Перейдите в окно документа, из которого будете копировать текст, выделите фрагмент и запустите макрос. Потом выделите другой фрагмент, снова щелкните кнопку макроса и так далее.
Если фрагменты нужно перемещать, а не копировать, то в тексте макроса слово Copy необходимо заменить словом Cut.
Еще одна задача. Случается так, что у пользователя оказываются два варианта одного и того же текста, и требуется найти, чем они отличаются. Открывать два окна и сравнивать текст "на глаз" - задача не из приятных, особенно если документ большой. В редакторе есть команда "Сравнить версии", но ее использование не всегда удобно. Во-первых, результат сравнения записывается в документе в виде исправлений.
Если в нем уже существуют отмеченные исправления, разобраться потом, что есть что, очень сложно. Во-вторых, эта команда обрабатывает весь документ и не может работать с его частью. В общем, нужен другой инструмент. Приведенный ниже макрос сравнивает текст по словам, с того места, которое укажет пользователь. Как только будет найдено первое слово, на котором тексты различаются, программа останавливается и отображает результат поиска.
Курсоры в обоих документах перемещаютс к найденным словам.
Sub CompareTexts()
' Сравнение текстов в двух документах по словам
If Windows.Count >= 2 Then
se1 = Windows(1).Selection.End
se2 = -1
se3 = Windows(2).Selection.End
se4 = -1
w1 = "a"
w2 = "a"
Do While se1 <> se2 And se3 <> se4 And w1 = w2
Windows(1).Selection.MoveRight Unit:=wdWord, Count:=1
Windows(2).Selection.MoveRight Unit:=wdWord, Count:=1
w1 = Trim(Windows(1).Selection.Words(1))
w2 = Trim(Windows(2).Selection.Words(1))
se2 = se1
se1 = Windows(1).Selection.End
se4 = se3
se3 = Windows(2).Selection.End
If w1 <> w2 Then
MsgBox "Документ 1: " & w1 & " Документ 2: " & w2, vbInformation, ""
End If
Loop
If se1 = se2 Then MsgBox "Конец документа 1", vbInformation, ""
If se3 = se4 Then MsgBox "Конец документа 2", vbInformation, ""
Else
MsgBox "Надо открыть два документа", vbExclamation, ""
End If
End Sub
Так же как и предыдущий, этот макрос работает с двумя документами, которые занимают первое и второе место в списке меню "Окно". Поскольку в этом списке документы сортируются по алфавиту, лучше открыть только два документа. Полезно также использовать команду "Окно" > "Упорядочить все". Курсоры в обоих документах необходимо установить перед соответствующими (одинаковыми) словами в том месте, с которого требуется начать проверку.
Храните шаблоны
Макросы эти работают в Word 97 и в Word 2000. Если вы используете эти или любые другие макросы, то обязательно храните отдельно резервную копию файла Normal.dot - при переустановке MS Office этот файл автоматически заменяется новым, и, если вы не сохраните старый, все нестандартные инструменты придется изготавливать заново.
В противном случае это было бы легко сделать с помощью методов Selection.Copy и Selection.Paste.
это нормально, но давайте проясним: это не "официально осуждают", что он полностью не поддерживается и рано или поздно приведет к отказу вашего компонента . возможно, когда вы этого не хотите.
согласен :) и да, это доставляет нам много проблем. но вы знаете, как это - мы придерживались этого много лет назад - и все еще должны поддерживать его сейчас - конечно, мы не будем практиковать тот же подход в будущем
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно.
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей.
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то.
Ответы 5
Используйте свойство Text объекта Selection, чтобы поместить данные в строковую переменную, а не в буфер обмена:
Dim strTemp as String
Затем вы можете вставить текст, хранящийся в переменной, в другом месте по мере необходимости.
Хм? как насчет других вещей, таких как старые изображения, коды полей и т. д.? в противном случае нормально, если все, что вам нужно, это текст
В конце концов я решил копировать слово в слово. FormattedText, казалось, работал довольно хорошо, до последнего слова (некоторых специальных (очевидно) символов), когда внезапно ячейка, которую я только что заполнил скопированным содержимым, становилась пустой. Когда я увеличивал количество ячеек, появлялись другие ошибки времени выполнения, например, ваша таблица была повреждена, и другие неоднозначные. Почему-то исходная ячейка, из которой я копировал, всегда, казалось, имела эти специфические символы в конце с кодами ASCII 13 и 7. Я знаю, что означает 13, но 7? В любом случае, я решил скопировать все, кроме этого последнего символа, с кодом 7. Кажется, все работает нормально. Копируются и форматирование, и поля. В любом случае, вся эта история еще раз доказала мне, что программирование на VBA - это в основном занятие методом проб и ошибок. Вы никогда не знаете, когда что-то может сломаться . если только я не пропущу обновленную информацию по некоторым важным концепциям .
Вот фрагменты кода, который я использовал. Идея состоит в том, что сначала у нас есть документ с одной таблицей ячеек 1x1 с некоторым форматированным текстовым содержимым. В первом фрагменте кода (внутри макроса) я умножаю ячейки:
Во второй части макроса я заполняю каждую пустую ячейку содержимым первой ячейки:
Вот изображения рассматриваемого документа Word. Первое изображение находится перед запуском макроса, второе - между первым и последним фрагментом кода, а третье изображение - это итоговый документ.
1. Проблема с ячейками таблицы известна. Если вы посмотрите на таблицу Word с активированным отображением непечатаемых символов, вы увидите маленькое «солнце» в конце каждой ячейки. Это объединяет ANSI 13 (= новый абзац в Word) плюс ANSI 7 (символ конца ячейки). ANSI 7 несет всю информацию о структуре / форматировании ячеек, поэтому, если вы "скопируете" ее, логически получится ячейка таблицы. Это известный прием, когда последний символ должен быть удален из диапазона перед "копированием".
2. Обычно это делается путем присвоения Range объекту и последующего перемещения конца диапазона назад на один символ: Dim rng as Word.Range = Table.Cells (1) .Range: rng.MoveEnd (wdCharacter, -1 )
в противном случае, это будет легко сделать выбор.Копирование и выделение.Методы вставки.
Я, наконец, решил скопировать слово в слово. FormattedText, казалось, работал довольно хорошо, до последнего слова (некоторые специальные (очевидно) символы), где внезапно ячейка, которую я только что заполнил скопированным контентом, станет пустой. Когда я увеличивал количество ячеек, появлялись другие ошибки во время выполнения, например, ваша таблица была повреждена, и другие неоднозначные. Так или иначе, исходная ячейка, из которой я копировал, всегда, казалось, имела эти своеобразные символы в конце с кодами ASCII 13 и 7. Я знаю что значит 13, но 7? В любом случае, я решил скопировать все, кроме этого последнего символа с кодом 7. Кажется, это работает нормально. Форматирование и поля копируются. В любом случае, вся эта история еще раз доказала мне, что программирование в VBA-это в основном занятие методом проб и ошибок. Никогда не знаешь, когда что-то может сломаться.. если только я не пропустил обновление некоторых важных концепций..
вот фрагменты кода, который я использовал. Идея в том, что сначала у нас есть документ с одна таблица ячеек 1x1 с некоторым содержимым rich text. В первом фрагменте кода (внутри макроса) я умножаю ячейки:
во второй части макроса я заполняю каждую пустую ячейку содержимым первой ячейки:
вот изображения документа Word, о котором идет речь. Первое изображение перед запуском макроса, второе-между первым куском кода и последним, в то время как третье изображение является результатом документ.
это не всегда работает, с текстовые поля, диаграммы, например, или, если вам нужно скопировать его в другой документ, но это хорошо для копирования простого форматированного текста внутри одного документа.
скопировать весь документ в новый документ следующим образом:
я столкнулся с аналогичной проблемой. Я хотел скопировать таблицу из одного документа word в другой с помощью Powershell без использования буфера обмена. Поскольку пользователь, использующий компьютер во время выполнения сценария, может сломать сценарий с помощью буфера обмена. Решение я придумал:
- откройте исходный документ и поместите закладку, охватывающую диапазон того, что я хотел (в моем случае одну таблицу).
- сохраните исходный документ с закладкой в другом месте (чтобы избежать изменение исходного документа).
- открыл целевой документ и создал объект диапазона для того, где я хотел разместить таблицу.
- используется range.InsertFile с первым параметром исходного файла с моей закладкой и вторым параметром моего имени закладки. Эта единственная операция вытянула всю таблицу плюс исходное форматирование непосредственно в целевой документ.
затем я добавил код, основанный на том, где была сделана вставка и сколько дольше история должна была выбрать вставленную таблицу, чтобы разрешить дальнейшие операции над ней.
Я пробовал много других методов для перемещения таблицы, и это было намного лучше. Извините, я не могу предоставить код VBA для этого решения.
в Office 2007+ VSTO вы можете экспортировать блок с помощью
используйте свойство Text объекта Selection, чтобы поместить данные в строковую переменную, а не в буфер обмена:
Dim strTemp как строка
затем вы можете вставить текст, хранящийся в переменной в другом месте по мере необходимости.
Читайте также: