Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Word VBA

Автор: baston
Дата сообщения: 15.12.2009 15:57
pribush
Попробуйте такой макрос:

Код: Sub selectWords()
'*********************
'Выделяем в текущем параграфе:
' слова, содержащие нечетное количество букв, красным цветом
' слова, содержащие четное количество букв, синим цветом
'@wordexpert.ru, 2009
'*********************
Dim oWrd As Range
Dim parazit As String
Dim i As Long
parazit = ",.;:!?""'|/*+-=()[]{}_`~%^@" 'символы-паразиты
For Each oWrd In ActiveDocument.Paragraphs(1).Range.Words
If (InStr(parazit, oWrd.Characters(1)) = 0) And (oWrd <> Chr(13)) Then
oWrd.Select
'удаляем пробелы справа от диапазона, если они есть
With Selection
If Right(.Range, 1) = Chr(32) Then
.MoveLeft unit:=wdCharacter, Count:=1, Extend:=wdExtend
Set oWrd = .Range
End If
End With
'определяем количество символов в словах и их четность или нечетность
If Len(RTrim(oWrd)) Mod 2 = 0 Then
oWrd.HighlightColorIndex = wdBlue
Else
oWrd.HighlightColorIndex = wdRed
End If
End If
Next oWrd
End Sub
Автор: pribush
Дата сообщения: 15.12.2009 16:45
Baston спасибо огромное очень меня выручил спасибо=)
Автор: suomifinland
Дата сообщения: 15.12.2009 17:38
Ребята, а можно ли сделать следующие при открытии документа Word *..doc и последующим его выделеним, автоматом бы изменялся шрифт на Times New Roman, и его размер становился 16...., а цвет шрифта становился black..?
Автор: baston
Дата сообщения: 16.12.2009 10:09
pribush
Я поправил макрос, ибо он форматировал не текущий абзац, а первый, и во-вторых, он искал только первый символ из слов-паразитов. Вот код:

Код: Sub selectWords()
'*********************
'Выделяем в текущем параграфе:
' слова, содержащие нечетное количество букв, красным цветом
' слова, содержащие четное количество букв, синим цветом
'@wordexpert.ru, 2009
'*********************
Dim oWrd As Range
Dim parazit As String
Dim i As Long
parazit = ",.;:!?""'|/*+-=()[]{}_`~%^@" 'символы-паразиты
For Each oWrd In Selection.Paragraphs(1).Range.Words
If (InStr(parazit, RTrim(oWrd)) = 0) And (oWrd <> Chr(13)) Then
oWrd.Select
'удаляем пробелы справа от диапазона, если они есть
With Selection
If Right(.Range, 1) = Chr(32) Then
.MoveLeft unit:=wdCharacter, Count:=1, Extend:=wdExtend
Set oWrd = .Range
End If
End With
'определяем количество символов в словах и их четность или нечетность
If Len(RTrim(oWrd)) Mod 2 = 0 Then
oWrd.HighlightColorIndex = wdBlue
Else
oWrd.HighlightColorIndex = wdRed
End If
End If
Next oWrd
End Sub
Автор: suomifinland
Дата сообщения: 16.12.2009 17:23
Спасибо Вам уважаемый Гуру baston
, вот только куда и как это макрос скопировать, или положить... ? А можно у Вас попросить добавить к нему, команду удаления гиперссылок в документе, вообще, было бы здорово!!! Еще раз Огромное Благодарю за помощь.
Автор: SIgor33
Дата сообщения: 17.12.2009 08:34
Есть таблица в документе.
Нужно обединить N ячеек в M столбце.
Как это сделать из VBA?
Автор: SERGE_BLIZNUK
Дата сообщения: 17.12.2009 09:07
SIgor33 - сорри... я влез с ответом, не обратив внимание, что речь идёт о WORD..

к сожалению, плохо знаю объектную модель Word'а :(
само объединение делается так же, как и в Excel: ....Cells.Merge
но команде объединения требуется указать нужные ячейки...
Автор: baston
Дата сообщения: 17.12.2009 10:02
suomifinland
Откройте шаблон Normal.dot в режиме редактирования. Перейдите в редактор кода VBA (Alt+F11) и вставьте в модуль этого шаблона код макроса. Сохраните, выйдите и теперь при открытии ВСЕХ(!) документов у вас будут они форматироваться по вашим данным в макросе.
Либо рекомендую изменить имя макроса и вынести кнопку макроса на панель инструментов, чтобы запускать этот макрос только тогда, когда вам нужно.
Вот новая версия макроса с удалением гиперссылок:

Код: Sub AutoOpen()
Dim hl As Hyperlink
With ActiveDocument
.Range.Font.Name = "Times New Roman"
.Range.Font.Size = 16
.Range.Font.ColorIndex = wdBlack
While .Hyperlinks.Count > 0
.Hyperlinks(1).Delete
Wend
End With
End Sub
Автор: suomifinland
Дата сообщения: 17.12.2009 11:51
Вроде всё поняла, спасибо Вам за Ваш труд.., ВСЕ РАБОТАЕТ..., и последняя к Вам просьба, Уважаемый ГУРУ baston, а можно в Ваш макрос добавить пакетную обработку файлов, обрабатывать не по одному файлу, а, к примеру открываю папку Uroki, в ней 100 файлов, и макрос спустя некоторое время выдает обработанную, по заданному, алгоритму информацию... Если поможете то незнаю даже, как отблагодарить ВАС..!!!
Автор: baston
Дата сообщения: 17.12.2009 12:04
suomifinland
Во-первых, я не гуру (скромно).
Во-вторых, можете попробовать следующий макрос для ваших целей:
http://wordexpert.ru/2009/08/28/massovoe-formatirovanie-dokumentov/
Автор: suomifinland
Дата сообщения: 17.12.2009 12:09
Я знаю о нем, но как туда вставить "уборку ссылок"..., спасибо за столь быстрый ответ, да и по сравнению с Вашим кодом макроса, тот более объемный... Как же туда "всунуть" Ваш макрос..?
Автор: baston
Дата сообщения: 17.12.2009 12:47
suomifinland
Вот обновленная версия шаблона:
Шаблон массового форматирования документа
Добавил поля для удаления гиперссылок. Протестируйте.
Автор: Inexhody
Дата сообщения: 03.01.2010 20:16
У меня такой вопрос. Есть куча документов. Во всех нужно проделать ряд одинаковых операций. Записываю макрос. Открываю другой документ. запускаю, все работает. Вопрос:можно ли запустить макрос сразу ко всем оставшимся документам, а не каждый документ открывать и запускать макрос
Автор: baston
Дата сообщения: 05.01.2010 10:08
Можно, если воспользоваться шаблоном: Макрос пакетной замены от Александра Витера
Автор: shengjeng
Дата сообщения: 15.01.2010 22:29
2 All

Гиперссылки в выделенном тексте можно удалять с помощью комбинации Ctrl+6
Автор: Zhenek_Salnikov
Дата сообщения: 20.01.2010 18:40
Кто знает как сделать в ворде VBA так чтобы таблица заполнялась по порядку, а то у меня она заполняется токо первая строчка?
Автор: Andrew20051
Дата сообщения: 26.01.2010 14:48
Пишу макрос, объединяющий ячейки столбца таблицы с одинаковым значением.
Пока остановился на поиске индексов начала-конца группы таких ячеек.

Код: ' индексы начала-конца группы одинаковых ячеек
Dim iStart As Integer
iStart = 0
Dim iFinish As Integer
iFinish = 0
' флаг объединения ячеек
Dim bMerge As Boolean
bMerge = False

Dim aCell As Word.Cell
Dim cCells As Cells
' извлекаем все ячейки столбца
Set cCells = ActiveDocument.Tables.Item(1).Columns.Item(1).Cells

For Each aCell In cCells
On Error Resume Next
' пропускам первую ячейку (начинаем работать со второй)
If aCell.RowIndex > 1 Then
' сравниваем значение с предыдущей
If aCell.Range.Text = cCells.Item(aCell.RowIndex - 1).Range.Text Then
' при равенстве значений и если нет начала группы iStart = 0, то
' начинаем ее
If iStart = 0 Then
iStart = aCell.RowIndex - 1
End If
Else
' если значения не равны, то проверяем нужно ли закончить группу
If iStart <> 0 Then
iFinish = aCell.RowIndex - 1
bMerge = True
End If
End If
End If

' если достигли конца, завершаем группу
If iStart <> 0 And aCell.RowIndex = cCells.Count Then
iFinish = aCell.RowIndex
bMerge = True
End If

If bMerge Then
' объединяем (нужен код)
bMerge = False
MsgBox iStart & " - " & iFinish
iStart = 0
End If
Next aCell
Автор: GenyaMS
Дата сообщения: 31.01.2010 10:12
Доброго времени суток! Гуру и другие такой ВОПРОС!
Задача - получить ЗНАЧЕНИЕ точного количества символов, которое поместится в ОДНУ строку на листе с текстом. На листе заданы все параметры:шрифт, его высота, размеры Полей, тип шрифта....

Мне код не обязателен, подскажите какая функция может это сделать или хотябы ход решения.

PS:Это необходимо для следующего после копирования текста из док-та с колонками или другого форматирования, количество символов в строке часто не оптимально(значительно меньше) чем возможно. Вот и надо сделать так что бы после выполнения макросы - количество символов в строке стало оптимальным.
Автор: Panzer82
Дата сообщения: 08.02.2010 12:00
Подскажите, пожалуйста почему


Код:
Set oWord = CreateObject("Word.Application")
Set oDoc = oWord.Documents.Open(Filename:=sNameTargetFile + ".txt", Format:=wdOpenFormatAuto, Encoding:=866)
With oWord.Selection
.Find.Text = " текст1 "
.Find.Execute
Автор: psxi
Дата сообщения: 24.02.2010 14:36
Ребята нужна помошь.
Есть документ с гиперссылками в большом количестве. Нужно что б они ссылались на WAV файлы. WAV в одтельных папках типа папка "глава один" - в ней 200 файлов WAV называются они так 001001 , 001002, 001286...114001...114005(первые три цифры номер главы и папки следующие три номер ссылки) , соответсвенно в документе глава один и 200 ссылок. Таких глав порядка 114. гиперссылок около 6000!
Есть ли более простой способ редактировать гиперссылки разом или хотя бы упростить? А то придётся несколько месяцев возиться по одной.
Автор: dneprcomp
Дата сообщения: 25.02.2010 03:56
Panzer82
http://msgroups.net/microsoft.public.word.vba.general/reading-text-out-of-word-docs
Автор: onehomes
Дата сообщения: 19.03.2010 14:00
Товарищи!
word 2003 - 2010 подскажите код макроса, чтобы сменить порядок страниц с 1,2,3... на любую другую по моему требованию
Автор: polk90
Дата сообщения: 21.03.2010 01:57
onehomes
это решается стандартными средствами ворда. В 2003 не помню где находится но точно есть. В 2007 "Вставка->Номер страницы->Формат номеров->Начать с".
Автор: tdp
Дата сообщения: 27.03.2010 18:35
Здравствуйте.
А не подскажите, как можно вставить картинку в определенное место?
Ситуация - ячейка таблицы, в ней текст. После текста нужно вставить картинку.
Подсознательно понимаю, что нужно передать правильный Range в AddPicture. Но где взять этот правильный Range?
Все мои попытки вставляют картинку ДО текста...

Заранее спасибо.
Автор: prestigo
Дата сообщения: 05.04.2010 16:48
вставляю текст из википедии
(да, написанный руками википедиков)

получаю

Татья&#769;на Льво&#769;вна Ще&#769;пкина-Купе&#769;рник

вот эти вот ударения мне совершенно не нужны, но как их удалить из текста - не имею представления, ибо допустим chr("н") дает ровно то же самое, что и chr("&#769;н") - 237.

кто что скажит?
Автор: SERGE_BLIZNUK
Дата сообщения: 05.04.2010 18:16
prestigo
или я чего-то не понимаю, или одно из двух!
Дык "Заменить"
что: &#769;
на что _(оставляем пустым)
нажимаем "заменить всё"
все ударения из текста удалены...
Автор: Wh1tebear_khv
Дата сообщения: 08.04.2010 07:52
Всем доброго!

Прошу помощи..
сделал документ с макросом print107, запускай файл через бантик:

Код: "c:\Program Files\Microsoft Office\Office10\WINWORD.EXE" /mPrint107 "d:\Work\Temp\print107.doc"
Автор: Wh1tebear_khv
Дата сообщения: 10.04.2010 17:52
так, по первому вопросу решил, воткнув 2х секундную паузу после команды на печать

Код: Dim PauseTime As Single
Dim Start As Single
Dim Finish As Single
Dim TotalTime As Single
PauseTime = 2
Start = Timer
Do While Timer < Start + PauseTime
DoEvents
Loop
Finish = Timer
TotalTime = Finish - Start
Автор: Seryoga204
Дата сообщения: 21.04.2010 23:58
Ув.форумчане подскажите пожалуйста как реализовать? Есть таблица (4 колонки), надо выделить все строки в первой колонке которых есть слово "всего". Заранее спасибо.
Автор: Crazyblind
Дата сообщения: 26.04.2010 20:52
Необходимо брать данные из таблицы одного файла(есть возможность необязательно из таблицы, а создать объекты текстбокс) и заносить в определенное место другого файла, интересует:
1) можно ли это как-то сделать без объектов типа текстбокс(т.е. ловить определенную позицию не по объекту во 2-ом файле)
2)сделать все это НЕ на кнопку
3)и вопрос: сначала надо открыть второй файл for Input(для чтения), потом другой(третий возможно создать) for Output(для записи) и заносить все в третий файл из второго + изменения?(не могу вспомнить )

наглядный пример:
заполняю в первом файле название организации и надо, чтобы во втором файле в тексте, в НУЖНОМ мне месте(я знаю где оно визуально, но не знаю как поймать программно) вписывалось название организации из первого файла.

Заранее огромное спасибо!

Страницы: 1234567891011121314151617181920212223242526

Предыдущая тема: Кластеризация изображений


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.