The following line of code will insert text into a bookmark range in a word document.
objDoc.Bookmarks("DonorAddress").Range.Text = "6200 Main St."
How do I remove the entire line containing the address bookmark if I don’t have any address data?
asked Jun 9, 2014 at 0:58
If ‘deleting the line’ means deleting just one line of a paragraph, the following is the way:
objDoc.Bookmarks("DonorAddress").Range.Paragraphs(1).Range.Select
Selection.HomeKey wdLine
Selection.EndKey wdLine, wdExtend
Selection.Delete
answered Jun 9, 2014 at 20:16
dcromleydcromley
1,3381 gold badge8 silver badges23 bronze badges
By ‘deleting the line’ I believe you mean to ‘delete paragraph’. If so you could do it in this way:
'2 steps to delete- rather not recommended
objDoc.Bookmarks("DonorAddress").Range.Paragraphs(1).Range.Select
Selection.Delete
or in one step:
objDoc.Bookmarks("DonorAddress").Range.Paragraphs(1).Range.Delete
answered Jun 9, 2014 at 15:58
Kazimierz JaworKazimierz Jawor
18.8k7 gold badges35 silver badges55 bronze badges
0 / 0 / 0 Регистрация: 27.01.2012 Сообщений: 11 |
|
1 |
|
26.08.2009, 19:51. Показов 14659. Ответов 7
а как решить вот такую задачу: -имеем документы WORD, в которых есть пустые строки, количество их разное от 1 до 10-20 подряд надо чтобы все пустые строки (подряд более одной) удалялись макросом ну чтобы к примеру из пяти пустых строк подряд осталась одна, из двух тоже одна и тд.
0 |
0 / 0 / 0 Регистрация: 05.07.2011 Сообщений: 112 |
|
29.01.2012, 22:23 |
2 |
Здравствуйте
0 |
Silver |
||||
30.01.2012, 11:04 |
3 |
|||
Данный пример перебирает предложения в тексте. Думаю, что тебе нужны все-же предложения, а не строки. |
0 / 0 / 0 Регистрация: 05.07.2011 Сообщений: 112 |
|
30.01.2012, 18:05 |
4 |
Спасибо за ответ.
0 |
flower2005 0 / 0 / 0 Регистрация: 31.03.2011 Сообщений: 76 |
||||
01.02.2012, 13:39 |
5 |
|||
Может быть, такой вариант подойдет?
Если пустых абзацев несколько, надо немного доработать.
0 |
0 / 0 / 0 Регистрация: 05.07.2011 Сообщений: 112 |
|
01.02.2012, 15:51 |
6 |
to: flower2005
0 |
flower2005 0 / 0 / 0 Регистрация: 31.03.2011 Сообщений: 76 |
||||
08.02.2012, 11:14 |
7 |
|||
Пример текста содержит примечания от нескольких рецензентов
0 |
0 / 0 / 0 Регистрация: 05.07.2011 Сообщений: 112 |
|
09.02.2012, 19:56 |
8 |
Спасибо. Сработало!
0 |
Сегодня появилась интересная задача:
В 200 страничном документе Word найти определенное слово и удалить не только его, а всю строку, в которой это слово стоит.
Очень помог гугл и сайт cyberforum.ru.
Итоговый скрипт:
‘ Скрипт ищет строки с определенным словом и удаляет ее.
Sub DeleteLine()
Dim DeleteLine As String
DeleteLine = InputBox(«Введите слово для удаления строки», «Удаляем строки»)
If DeleteLine = Empty Then Exit Sub
Application.ScreenUpdating = False
With ActiveDocument.Range.Find
.ClearFormatting
.Text = DeleteLine
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
While .Execute
.Parent.Select
Selection.HomeKey Unit:=wdLine
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.Delete
Wend
End With
Application.ScreenUpdating = True
End Sub
vadi61 Пользователь Сообщений: 236 |
#1 27.12.2015 17:39:43 Добрый день,
а как это перенести в Excel — не знаю. Один к одному не получается
стерло все содержимое… |
||||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#2 27.12.2015 17:45:51
Как из Excel обратиться к другому приложению Особое внимание уделить разъяснению различий между ранним и поздним связыванием и применением именованных констант(в Вашем случае это wdCharacter и wdStory). Плюс обратите внимание на ГЛАВНУЮ ОШИБКУ НОВИЧКА — Ваш случай. Selection есть в Excel и в Word и без явного указания родителя будет относится к приложению, в котором записано. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
SuperCat Пользователь Сообщений: 2737 |
#3 27.12.2015 18:28:09 Просто надо использовать переменную приложения Word:
В данном случае wdStory распознается, так как я использую раннее связывание (Early Binding). Изменено: SuperCat — 27.12.2015 18:29:31 There is no knowledge that is not power |
||
vadi61 Пользователь Сообщений: 236 |
#4 27.12.2015 19:16:04 The_Prist,
и здесь перед закрытием wd1 из него надо удалить две последние строки. SuperCat, Т.е. ошибка, видимо, потому, что значения констант wdStory и wdCharacter Еxcel’ю при позднем связывании неизвестны. А как их узнать, что бы задать цифрой? Нет ошибка не в этом. Нашел значение константы wdStory здесь но все равно ошибка. Изменено: vadi61 — 27.12.2015 19:29:37 |
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#5 27.12.2015 19:28:21
как же Вы читали?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||||
vadi61 Пользователь Сообщений: 236 |
#6 27.12.2015 19:36:27 The_Prist, сделал как Вы сказали. Получил значения констант wdStory = 6, wdCharacter = 1
Ошибка: Объект не поддерживает свойство или метод |
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#7 27.12.2015 19:43:54 Я бы вообще отказался от Selection ибо вредно это. Вполне можно вместо него использовать Range:
ну а вообще без полного кода трудно гадать. Да и примеры не помешали бы… Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
vadi61 Пользователь Сообщений: 236 |
The_Prist, та же ошибка на строке wd1.Range.EndKey 6 «Объект не поддерживает свойство или метод» |
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#9 27.12.2015 19:48:48
Хочется увидеть, что именно Вы таким образом хотите удалить. Может есть другие методы — надежнее. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#10 27.12.2015 19:55:18 Например, можно два раза эту строку выполнить:
или один раз такую:
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||
vadi61 Пользователь Сообщений: 236 |
The_Prist, изумительно. Большое спасибо. Попробовал второй вариант с одной строкой — получилось. |
vadi61 Пользователь Сообщений: 236 |
The_Prist, обнаружил ошибку. Удаляются символы не последние, а сдвинутые на количество картинок в файле. А вот дальше так: Может быть знаете как ее обойти? Изменено: vadi61 — 10.01.2016 03:49:41 |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#13 10.01.2016 06:07:42
А не мудрите ли вы? Если под пустыми строками подразумевается параграфы (всё что получается при нажатии кнопки Enter), то проще так. В примере в документе Word. Удаляет пустые параграфы (в том числе состоящие из одних пробелов). Успехов. Прикрепленные файлы
|
||
vadi61 Пользователь Сообщений: 236 |
Андрей VG,спасибо за ответ. Но это же Word! А мне нужно из Excel в вордовском файле строки удалять… У меня нет доступа к получившемуся Word-файлу. |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#15 10.01.2016 11:58:47
Это вы серьёзно — или шутка? Тогда это что?
Разве не доступ к документу Word? Чтобы использовать в моём коде этот документ достаточно заменить ThisDocument на wd1. Естественно, перенеся код в процедуре, в код книги. Успехов. |
||||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
А я вообще не понял про картинки и символы. Может настало время реально примера с данными, а не на словах описывать проблемы? Скорее соглашусь с Андреем — здесь явно нужен иной подход. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
vadi61 Пользователь Сообщений: 236 |
The_Prist, согласен. Как только доберусь до компьютера — подготовлю пример. Пока только два слова о самОй подготовке Word-файла. Сотрудник открывает Excel-файл, выбирает нужные значения из комбобоксов, устанавливает нужные переключатели, вводит какие-то значения. На основании этих данных Excel готовит данные для вставки в отчет. Потом при нажатии кнопки СОЗДАТЬ вызывается макрос, который выбирает нужные (из заранее подготовленных) шаблонов, вставляет в них данные, а затем соединяет несколько файлов-шаблонов в один готовый отчет. К этому отчету я доступа не имею, то есть все я должен сделать в Excel-макросе. Изменено: vadi61 — 10.01.2016 14:05:41 |
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
Так может имеет смысл сначала проверять наличие картинок и их кол-во? Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
vadi61 Пользователь Сообщений: 236 |
The_Prist, да, все решилось такой строкой PS. Готовить файлы примеров уже нет необходимости. Изменено: vadi61 — 10.01.2016 15:06:09 |
vadi61 Пользователь Сообщений: 236 |
#20 10.01.2016 15:23:02 The_Prist, я на параллельном форуме нашел Ваш совет от октября 2014 года, где Вы используете выражение Range.End Вставил в свой код
и сработало вне зависимости от количества картинок. |
||
Sub макрос()
Dim spl, instr_ As Long, i As Long
‘1. Отключение монитора (может это ускорит макрос и чтобы не мерцало).
Application.ScreenUpdating = False
‘2. Оставление после точки трёх цифр.
With ActiveDocument.Range.Find
.Text = «(.[0-9]{3})([0-9]{1;})»
.Replacement.Text = «1»
.MatchWildcards = True
.Execute Replace:=wdReplaceAll
End With
‘3. Удаление абзацев, в которых только номер.
‘ Запись текста из документа в переменную-массив «spl».
‘ С массивом быстрее работать, чем с ворд-объектами.
spl = Split(ActiveDocument.Range.Text, Chr(13))
‘ Цикл по массиву снизу вверх.
For i = UBound(spl) To 0 Step -1
‘ Если элемент массива не пустой.
If spl(i) <> «» Then
‘ Поиск первой правой скобки (вдруг их может быть несколько).
instr_ = InStr(spl(i), «)»)
‘ Смотрим, есть ли справа от правой скобки что-нибудь.
‘ Если правая скобка находится в конце элемента массива.
If instr_ = Len(spl(i)) Then
‘ Удаление абзаца.
ActiveDocument.Paragraphs(i + 1).Range.Delete
End If
End If
Next i
‘4. Вкл. монитора.
Application.ScreenUpdating = True
‘5. Сообщение, чтобы юзер понял, что макрос завершил работу.
MsgBox «Готово.», vbInformation
End Sub
[свернуть]