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

» Word VBA

Автор: msmih
Дата сообщения: 30.01.2014 03:58
Alex_Piggy

Цитата:
Код:

If .Execute Then
Set Selection = ActiveDocument.Range(r.Start + 1, r.End - 1).Select
Selection.Font.Italic = True
Selection.Font.Color = wdColorRed
End If



На этом этапе и возникает загвоздка. обрабатывает только первое найденное совпадение. Дальше не ищет.
Автор: panda3
Дата сообщения: 30.01.2014 08:15
msmih
Ваще непонятен смысл этих телодвижений для простой операции поиска/замены.


Код: With ActiveDocument.Range.Find
.ClearFormatting
.Text = "- * -"
.Forward = True
.Wrap = wdFindContinue
.format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
With .Replacement
.ClearFormatting
.Text = ""
.Font.Italic = True
.Font.Color = wdColorRed
End With
.Execute Replace:=wdReplaceAll
End With
Автор: msmih
Дата сообщения: 30.01.2014 18:37
panda3
низкий поклон! все отлично сработало.

to all
задам еще один вопрос. из разряда vbs\vba.
Пытаюсь с помощью xmlhttp.responsetext получить текст с сайта.
Но получаю только часть текста стабильно 3800 символов).
ставил условия xmlhttp.ReadyState = 4, if xmlhttp.status = 200 условия выполняются, но все равно приходит только часть текста.
В мануилах прочитал, что xmlhttp.responsetext по объему не лимитируется.
где может быть проблема?
Автор: Alex_Piggy
Дата сообщения: 30.01.2014 19:25
msmih
Не знаю. Пример, пожалуйста. Может что в обработке?
То, что ниже сохраняет файл размером около 600 кб.

Код:
Set XMLHTTP = CreateObject ("Msxml2.ServerXMLHTTP.6.0")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set objTextStream=FSO.OpenTextFile("output.txt",2,1)
XMLHTTP.Open "GET", "http://forum.ru-board.com/misc.cgi?action=printtopic&forum=33&topic=5312", false
XMLHTTP.Send
If ((XMLHTTP.readyState = 4) AND (XMLHTTP.status=200)) Then objTextStream.Write XMLHTTP.responseText
Автор: msmih
Дата сообщения: 01.02.2014 16:07
Буду признателен еще за вот какую подсказку. Как подсчитать с помощью VBA число символов в параграфе (word)? и при превышении (ну скажем 1000 символов) - удалить параграф?
Автор: Alex_Piggy
Дата сообщения: 01.02.2014 16:44
Доброе время, msmih

Код:
For Each Paragraph In ActiveDocument.Paragraphs
If (Paragraph.Range.Characters.Count > 1000) Then Paragraph.Range.Delete
Next
Автор: msmih
Дата сообщения: 01.02.2014 17:13
Alex_Piggy

Цитата:
Я слишком мало пользуюсь Word VBA

эту функцию прописал в vbs. пока работает.
Вам огромное спасибо за подсказки!
Автор: msmih
Дата сообщения: 02.02.2014 10:34
Еще раз Need Help. Буду признателен за следующую подсказку на VBA.
Есть текст формата

Код:
Какой-то текст - Еще раз какой-то текст. Третий текст - продолжение.
Автор: Alex_Piggy
Дата сообщения: 02.02.2014 11:47
Доброе время, msmih
Попробуйте искать выражение
" - ([A-ZА-Я])"
И заменять на
" . \1"
Автор: msmih
Дата сообщения: 02.02.2014 12:00
Доброго времени суток, Alex_Piggy
не совсем помогает. ". \1" Ставит: точку пробел Заглавная буква пробел оставшееся слово.
То есть отделяет первую букву.
Пока в мыслях загвоздка
Автор: Alex_Piggy
Дата сообщения: 02.02.2014 12:15
msmih

Цитата:
не совсем помогает. ". \1" Ставит: точку пробел Заглавная буква пробел оставшееся слово. То есть отделяет первую букву. Пока в мыслях загвоздка

Не понял...

Код:
Dim r
Set r = ActiveDocument.Range
With r.Find
.Text = " - ([A-ZА-Я])"
.Forward = True: .Wrap = wdFindContinue: .format = False : .MatchCase = False: .MatchWholeWord = False: .MatchAllWordForms = False : .MatchSoundsLike = False: .MatchWildcards = True
.Replacement.Text = " . \1"
.Execute Replace:=wdReplaceAll
End With
Автор: msmih
Дата сообщения: 02.02.2014 12:39
Alex_Piggy

Цитата:
Не понял...

теперь я не понял))) вроде все тоже самое было, но первую букву в моем варианте отделял.
Ваш вариант идеально работает. Большое спасибо!
Автор: msmih
Дата сообщения: 02.02.2014 14:39
еще с одной заморочкой зашел. Задача: удалить параграф содержащий определенный текст. Пока додумался до такого кода

Код:
For Each Paragraph In ActiveDocument.Paragraphs
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "то что я ищу"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute

If Selection.Find.Found = True Then Paragraph.Range.Delete
Next
Автор: Alex_Piggy
Дата сообщения: 02.02.2014 15:21
msmih
А что если зайти с другой стороны?

Код:
With ActiveDocument.Range.Find
.ClearFormatting
.Text = "test"
.Forward = True
.Wrap = wdFindContinue
.format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
Do While .Execute
With .Parent
.Expand Unit:=wdParagraph
.Delete
End With
Loop
End With
Автор: msmih
Дата сообщения: 02.02.2014 16:17
Alex_Piggy


Цитата:
А что если зайти с другой стороны?

Отработало все отлично! Еще раз благодарю! и преклоняю голову за ваш труд!
Автор: agevelenko
Дата сообщения: 12.03.2014 13:21
Помогите, пожалуйста, с задачей.

В результате расчета создается каждый раз НОВЫЙ файл .doc с таблицами результатов. Есть намерение связать полученные таблицы с постоянно существующим файлом. Но поскольку файл новый, постоянно рабочие ссылки создать не получается. Пробовал пересохранять новый файл в каком-то постоянном с тем же именем, с замещением, но ссылки на таблицы в этом случае теряются. То есть в документе, источнике связанных таблиц, эти таблицы даже временно не должны удаляться или замещаться новыми.

В Worde есть возможность сохранить файл поверх существующего с ВНЕСЕНИЕМ В НЕГО ИЗМЕНЕНИЙ. Эта возможность решает проблему, но в коде ВБА такой опции я не нашел. activedocument.saveas и activedocument.saveas2 сохраняют файл с замещением без запроса. Как можно решить задачу?
Автор: agevelenko
Дата сообщения: 19.03.2014 17:21
Помогите, пожалуйста, с другой проблемой .

Есть необходимость получить в Ворде адрес последней строки таблицы, существующей в Экселе. Почему не работает следующий способ: (?)

Dim Ex as Object

Set Ex = GetObject(путь на файл Эксель)
Addr$=Ex.Application.Range("VAR1").End(xlDown).Address( , , xlR1C1)

В этом коде, расположенном на листе Ворда, ВБА не распознает метод .End(xlDown). Пишет ошибку 1004. Ячейка Range("VAR1") располагается не на первом листе, если вдруг это важно.
Автор: msmih
Дата сообщения: 19.03.2014 20:48
Доброго времени суток. Буду признателен за подсказку.
С помощью VBA меняю один знак на кавычки. условно замена "-" на chr(34). Но результат всегда непредсказуем: могут появиться парные кавычки " или << и >>. Совсем худо когда идет сочетание "текс>>. Как жестко зафиксировать результат? чтобы была однозначная замена.
Автор: Alex_Piggy
Дата сообщения: 19.03.2014 23:09
Доброе время
agevelenko
Странный адрес "VAR1". Это что?
В экселе эта же конструкция работает? (MsgBox Application.Range("VAR1").End(xlDown).Address( , , xlR1C1))
Выбор листа MYNAME - Ex.Application.WorkSheets("MYNAME").Range....

msmih
У Вас включена автозамена кавычек? Если ее отключать на время работы скрипта?

Код:
Application.Options.AutoFormatReplaceQuotes = False
Application.Options.AutoFormatAsYouTypeReplaceQuotes = False
Автор: AndVGri
Дата сообщения: 20.03.2014 02:53
Доброе время суток
Alex_Piggy

Цитата:
Странный адрес "VAR1". Это что?

В формате файла для Excel 2007 последний столбец XFD, так что адрес ячейки VAR1 вполне допустим. Ошибкой может быть:
1. Скорее всего, так как судя по коду осуществляется позднее связывание, то ссылка на библиотеку Excel не установлена (Tools/References). Тогда нужно заменить xlDown на -4121, а xlR1C1 на -4150. Иначе откуда VBA возьмёт, что стоит за именами перечислений?
2. Текущий лист не рабочий лист (может быть, например, диаграмма).
Автор: agevelenko
Дата сообщения: 20.03.2014 09:58
AndVGri
Большое спасибо за подсказку 1), действительно помогло.
Автор: mrdime
Дата сообщения: 10.04.2014 12:30
Господа,
Чтобы любой открываемый мною в Ворде документ открывался в удобном для меня виде (по ширине страницы) "воткнул" вот такой код в модули шаблона Normal.dotm

Цитата:
Public Sub AutoOpen()
ThisDocument.Application.ActiveWindow.View.Zoom.PageFit = wdPageFitBestFit
End Sub

и все вроде бы хорошо, но есть одно НО.
Если открываю документ, скачанный из Интернета, в нем по-умолчанию отключаются все макросы (и вверху появляется: Protected view. Файл скачан из Интернета и может быть небезопасен.) Соотвественно в такой ситуации из-за наявности вышеприведенного кода Ворд выдает мне ошибку (Run-time error '4248'. This command is not available because the document is open.).
Вопрос: как избежать появления этой ошибки?
Т.е. как проверять, что если документ открывается в режиме Protected view, то не выполнять данный макрос?
Добавлено
Разобрался сам. Добавил условие и все заработало:

Цитата:
If ThisDocument.Application.ActiveProtectedViewWindow Is Nothing Then
ThisDocument.Application.ActiveWindow.View.Zoom.PageFit = wdPageFitBestFit
End If

но документ на всю ширину страницы почему-то не разворачивается (несмотря на команду : ThisDocument.Application.ActiveWindow.View.Zoom.PageFit = wdPageFitBestFit
Так что вопрос: как из vba рзвернуть окно документа на всю ширину страницы?

Автор: YuriyRR
Дата сообщения: 10.04.2014 23:32
mrdime
Запиши макрос и посмотри команды - самый простой метод изучения.
Автор: mrdime
Дата сообщения: 12.04.2014 00:35
YuriyRR

Цитата:
Запиши макрос и посмотри команды - самый простой метод изучения.

Так и сделал. Только по непонятным мне причинам он НЕ РАБОТАЕТ.
При разворачивании открытого документа на всю ширину окна, запись макроса мне выдала вот такую строчку:
ActiveWindow.ActivePane.View.Zoom.PageFit = wdPageFitBestFit
Что эта команда, что та, что я использовал раньше:
ThisDocument.Application.ActiveWindow.View.Zoom.PageFit = wdPageFitBestFit
Не дают желаемого результата.
Если я "руками" меняю масштаб отображения документа допустим до 50%.
То после закрытия Ворда, и запуске вновь, новый документ открывается почему-то не по всей ширине экрана, а в последнем масштабе, в данном случае - 50% например.
Мне пока неясно почему так происходит.
Автор: agevelenko
Дата сообщения: 14.04.2014 12:08
Не может ли кто-нибудь прояснить несколько вопросов о свойстве StatusBar? в справке VBA Word написано, что это свойство более не поддерживается, но нет информации, появилось ли что-нибудь на замену.
И второй вопрос. Можно ли как-то остановить автоматическое обновление строки состояния Вордом (чтобы то, что я вписал в нее, не исчезало через секунду?).
Автор: Leviathann
Дата сообщения: 15.04.2014 11:29
Уважаемые знатоки!

Подскажите, пожалуйста, простую вещь - каким скриптом можно выделить или удалить все объекты WordArt в Word 2010 ?
Автор: agevelenko
Дата сообщения: 15.04.2014 13:18
Leviathann

Попробуй так.

Dim MySh As Shape

For Each MySh In ActiveDocument.Shapes
If MySh.Type = msoTextEffect Then
MySh.Delete
End If
Next MySh

Свойство msoTextEffect должно указывать на объект WordArt, но в Word 2010 этого не происходит. Попробуй др. значения (см. MsoShapeType Enumeration в справке). У меня объект WordArt распознается как надпись (msoTextBox).
Автор: Leviathann
Дата сообщения: 15.04.2014 13:51
За несколько проходов всё вычистил, отлично! Вторая половина мусора оказалась как раз msoTextBox.
Благодарю!
Автор: cccs54
Дата сообщения: 01.05.2014 21:16
Помогите, пожалуйста!
Я сделал форму.
На ней поле TextBox1 и кнопка CommandButton1, так же есть генератор чисел от 1 до 1000. Отдельно лежит фаил с текстом sobit.txt.
Как объединить генератор с текстовым фаилом, чтоб случайным образом из него печаталось слово в поле TextBox1 при нажатии на кнопку CommandButton1?
Автор: msmih
Дата сообщения: 29.07.2014 18:03
del. вопрос снят

Страницы: 1234567891011121314151617181920212223242526

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


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