118 / 0 / 0 Регистрация: 08.02.2013 Сообщений: 26 |
|
1 |
|
27.02.2013, 08:22. Показов 7360. Ответов 15
Извините что обращаюсь с таким ламерским вопросом — никак не удается мне разобраться с объектами Range. Может, на этом, конкретном, примере удастся разобраться.
0 |
ViterAlex 8927 / 4839 / 1885 Регистрация: 11.02.2013 Сообщений: 10,246 |
||||||||
27.02.2013, 09:33 |
2 |
|||||||
Можно и без Range:
Но остаётся хвост в виде одного абзаца. С Range оно будет надёжнее:
1 |
Скрипт 5468 / 1148 / 50 Регистрация: 15.09.2012 Сообщений: 3,514 |
||||
27.02.2013, 10:14 |
3 |
|||
Вот такой вариант:
Примечание Разницы между циклами «While … Wend» и «Do … Loop» нет, но в VBA-справочниках не упоминается цикл «While … Wend». Я так понимаю, что цикл «While … Wend» используют программисты, которые давно занимаются программированием, а цикл «Do … Loop» появился недавно и предназначен для использования вместо цикла «While … Wend».
2 |
ViterAlex |
27.02.2013, 10:27
|
Не по теме:
VBA-справочниках не упоминается цикл «While … Wend» Как хорошо, что ни одного справочника по VBA я не читал и не знал, что такой цикл там не упоминается. На самом деле это просто более короткая запись цикла Do…Loop с предусловием. Цикл с послеусловием короче записать не получится. Наткнулся на этот цикл уже не помню где и понравилась его лаконичность.
1 |
Alex Ingor 118 / 0 / 0 Регистрация: 08.02.2013 Сообщений: 26 |
||||
27.02.2013, 19:24 [ТС] |
5 |
|||
2 ViterAlex, Скрипт: Спасибо, ребята, за помощь. Все три макроса работают, я воспользовался вариантом 2 (WithRange). Очень понравилось такое использование next и previous в нем.
0 |
5561 / 1367 / 150 Регистрация: 08.02.2009 Сообщений: 4,107 Записей в блоге: 30 |
|
27.02.2013, 19:35 |
6 |
1 |
62 / 4 / 1 Регистрация: 27.04.2014 Сообщений: 100 |
|
28.04.2015, 13:12 |
7 |
Вариант Скрипта зацикливается, если таблица выше.
0 |
barinrec 62 / 4 / 1 Регистрация: 27.04.2014 Сообщений: 100 |
||||
05.05.2015, 10:24 |
8 |
|||
Бесконечный цикл, если пустой файл.
1 |
shanemac51 Модератор 11341 / 4660 / 748 Регистрация: 07.08.2010 Сообщений: 13,497 Записей в блоге: 4 |
||||
05.05.2015, 10:45 |
9 |
|||
1 |
barinrec 62 / 4 / 1 Регистрация: 27.04.2014 Сообщений: 100 |
||||
05.05.2015, 10:49 |
10 |
|||
Вот так вылазить вроде из цикла
1 |
barinrec 62 / 4 / 1 Регистрация: 27.04.2014 Сообщений: 100 |
||||
01.07.2015, 17:11 |
11 |
|||
В ворде пробовал код. Ошибка вываливается с пустом документе. Добавил еще условие выхода.
0 |
1 / 1 / 0 Регистрация: 11.03.2013 Сообщений: 56 |
|
10.01.2016, 01:53 |
12 |
А как сделать то же самое из макроса Excel? Хотел попробовать предложение ViterAlex Sub (WithRange) но не могу объявить
0 |
5561 / 1367 / 150 Регистрация: 08.02.2009 Сообщений: 4,107 Записей в блоге: 30 |
|
10.01.2016, 02:26 |
13 |
Чтобы понимал, ему в VBE надо подключить библиотеку объектов MS Word. А вообще, дорогой коллега,
Dokument из Excel-файла легче обработатать уже сам по себе, не через Excel:
https://www.cyberforum.ru/vba/thread440755.html Тогда и коды shanemac51, Скрипт, ViterAlex и даже Busine2012 перелопачивать не придётся, ведь
Все три макроса работают
0 |
1 / 1 / 0 Регистрация: 11.03.2013 Сообщений: 56 |
|
10.01.2016, 03:54 |
14 |
ув. Sasha_Smirnov, спасибо за ответ. Но, к сожалению обрабатывать Word-документ может и легче, но у меня нет такой возможности. Сотрудник (но человек далекий от VBA) выбирает в Excel’е ряд критериев (в основном выпадающие списки) и жмет кнопочку. В итоге получается Word-файл, который он распечатывает и несет на подпись. Все делается в Excel’e. Осталось только удалить эти «несчастные» 2 строки, которые вылазят на новую страницу. Я смотрел ветку по Вашей ссылке. Не получается у меня из Excel с EndKey сработаться… Добавлено через 1 час 4 минуты
0 |
5561 / 1367 / 150 Регистрация: 08.02.2009 Сообщений: 4,107 Записей в блоге: 30 |
|
10.01.2016, 04:17 |
15 |
Как из Эксселя — не знаю. Вскорости проснутся знатоки офисных задач! Не по теме:
Сотрудник что, перед распечаткой, два раза Delete нажать — считает переработкой?! (Мне всегда любопытны такие ситуации, но сор из избы, конечно, можете и не выносить полностью.) По поводу подключения библиотек сделал для ясности пару снимков: Миниатюры
0 |
vadi61 1 / 1 / 0 Регистрация: 11.03.2013 Сообщений: 56 |
||||
10.01.2016, 14:49 |
16 |
|||
ув. Sasha_Smirnov, спасибо за разъяснения по подключению библиотек, сейчас буду пробовать… Добавлено через 3 часа 5 минут
0 |
Updated: Below is a modified version of your code that will spin thru all rows of a table (in MS-Word) and delete every row that contains only a ‘$’ in column 3 and column 4 is empty.
Option Explicit
' This subroutine will spin thru all rows of data in a table in MS-Word (except the first row, which is the header).
' If column 3 contains only a '$' AND column 4 is empty, the row will be deleted.
' All rows with only the '$' in column 3 and empty cell 4 will be deleted.
Sub TEST()
Dim i As Long
'Dim char As String
With Selection.Tables(1)
For i = .Rows.Count To 1 Step -1
'char = .Cell(i, 3).Range.Text
'Debug.Print Asc(Mid(char, 1, 1)) & vbTab & Asc(Mid(char, 2, 1)) '& vbTab & Asc(Mid(char, 3, 1))
'Debug.Print ">" & .Cell(i, 2).Range.Text & "<"
If Len(.Cell(i, 4).Range.Text) = 2 And Left(.Cell(i, 3).Range.Text, 1) = "$" Then
.Rows(i).Delete
End If
Next i
End With
End Sub
В документе, загруженном из Интернета, слишком много пустых строк (перенос строк вручную). Чтобы сэкономить бумагу и место, нам нужно удалить все пустые строки. Есть ли более простой способ удалить все пустые строки вместо того, чтобы удалять каждую вручную? В этом руководстве будут перечислены три доступных метода для удаления всех пустых строк в целом или для выбора документов:
Удалите все пустые строки с помощью параметра Найти и заменить
Удалите все пустые строки с помощью VBA
Удалите все пустые строки с помощью Kutools for Word
Удалите все пустые строки с помощью параметра Найти и заменить
Наблюдения и советы этой статьи мы подготовили на основании опыта команды Найти и заменить функция в Word обычно используется для удаления всех пустых строк, но вы должны знать, что пустые строки называются Ручной перенос строки в Найдите то, что опцию.
1. Нажмите Замените на Главная таб. Смотрите скриншот:
2. Когда Найти и заменить появится диалоговое окно, нажмите Подробнее >> кнопку, чтобы отобразить дополнительные параметры. Затем поместите курсор в Найдите то, что поле и выберите Ручной разрыв строки из Особый выпадающее меню, см. снимок экрана:
3. Там будет «^l”Персонаж в Найдите то, что поле и нажмите Заменить все. Все ручные разрывы строк были удалены сразу, см. Снимок экрана:
Удалите все пустые строки с помощью VBA
В качестве альтернативы вы можете использовать макрос для удаления всех пустых строк, если вы хорошо разбираетесь в коде VBA, и вы можете следовать приведенным ниже инструкциям, например:
1, нажмите Alt + F11 для открытия Microsoft Visual Basic для приложений окно.
2. Нажмите Вставить > Модули, а затем скопируйте приведенный ниже код VBA в окно модуля.
Код VBA: удаление всех ручных разрывов строк в документе:
Sub Deleemptylines()
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^l"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
3. Затем нажмите Запустить Sub кнопку для запуска кода, все ручные разрывы строк будут удалены.
Удалите все пустые строки с помощью kutools for Word
Вышеупомянутые методы требуют нескольких шагов для удаления всех пустых строк, но с Kutools for Word, только один щелчок мыши поможет вам завершить эту операцию.
1. Пожалуйста, примените эту утилиту, нажав Кутулс > Пустые параграфы > Удалить пустые разрывы строк вручную. Смотрите скриншот:
2. Затем появится диалоговое окно с напоминанием об удалении всех пустых строк, нажмите Да кнопку, см. снимок экрана:
3. После нажатия Да, вы можете видеть, что все пустые строки удалены из документа. Смотрите скриншот:
Внимание: Если вам просто нужно удалить пустые строки в выделении, вы должны выбрать диапазон перед применением этой функции.
Нажмите, чтобы скачать Kutools for Word и бесплатная пробная версия прямо сейчас!
Демонстрация: удаление всех пустых строк в Word
Рекомендуемые инструменты для повышения производительности Word
Kutools For Word — Более 100 расширенных функций для Word, сэкономьте 50% времени
- Сложные и повторяющиеся операции можно производить разово за секунды.
- Вставляйте сразу несколько изображений из папок в документ Word.
- Объединяйте и объединяйте несколько файлов Word из папок в одну в желаемом порядке.
- Разделите текущий документ на отдельные документы в соответствии с заголовком, разрывом раздела или другими критериями.
- Преобразование файлов между Doc и Docx, Docx и PDF, набор инструментов для общих преобразований и выбора и т. Д.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
- VSL
- Начинающий
- Сообщения: 1
- Зарегистрирован: 03.08.2005 (Ср) 13:55
Удаление пустых строк из документа Word
Помогите, пожалуйста, удалить пустые строчки в Worde, так надоело их вручную удалять, а как написать макрос не хвататет времени читать.
Спасибо
- alibek
- Большой Человек
- Сообщения: 14205
- Зарегистрирован: 19.04.2002 (Пт) 11:40
- Откуда: Russia
alibek » 03.08.2005 (Ср) 15:00
- Код: Выделить всё
Do
With ThisDocument.Content.Find
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.Text = "^p^p"
If Not .Execute() Then Exit Do
If Not .Found Then Exit Do
.Replacement.Text = "^p"
.Execute Replace:=wdReplaceAll
End With
Loop
Lasciate ogni speranza, voi ch’entrate.
Вернуться в Visual Basic 1–6
Кто сейчас на конференции
Сейчас этот форум просматривают: PetalBot и гости: 5
Автоматически создаются документы в ворде на несколько сотен страниц состоящие из текста и таблиц. Вопрос как удалить пустые строки в табличной части документа.
Код:
Sub DeleteEmptyRows()
On Error Resume Next
Dim oSelRng As Range 'Область из которой обрабатывать таблицы
Dim oTbl As Table 'Текущая таблица
Dim oCell As Cell 'Ячейка в таблице
Dim oRowRng As Range 'Диапазон для строки
Dim iStart As Long 'Начало первой пустой ячейки в строке
Dim iEnd As Long 'Конец последней пустой ячейки в строке
Dim i As Long 'Счетчик строк в таблице
Dim j As Long 'Счетчик таблиц
Dim sEmptyString As String 'Служебная строка
Set oSelRng = Selection.Range 'Запоминаем диапазон выделения
'Перебираем таблицы в выделении, начиная с конца
For j = oSelRng.Tables.Count To 1 Step -1
Set oTbl = oSelRng.Tables(j) 'Запоминаем таблицу
'Перебираем ячейки в первом столбце
For i = oTbl.Rows.Count To 1 Step -1
If Len(oTbl.Cell(i, 1).Range.Text) = 2 Then 'Если ячейка пустая, т.е. содержит только конец абзаца и конец ячейки
If Err.Number <> 5941 Then 'Если такая ячейка существует
Set oCell = oTbl.Cell(i, 1) 'Запоминаем первую ячейку в строке
If Not oCell Is Nothing Then 'Если ячейка запомниалась
iStart = oCell.Range.Start 'Запоминаем ее начало
Do While Len(oCell.Next.Range.Text) = 2 'Теперь ищем последнюю пустую ячейку в этой же строке
iEnd = oCell.Next.Range.End 'Запоминаем ее конец
Set oCell = oCell.Next
Loop
Set oRowRng = oSelRange.Document.Range(iStart, iEnd) 'Запоминаем диапазон от начала первой пустой ячейки до конца последней
'Удаляем из строки знаки абзаца и конца ячейки
sEmptyString = Replace(oRowRng.Text, ChrW(13) & ChrW(7), "")
If Len(sEmptyString) = 0 Then 'Если строка пустая,
oRowRng.Cells.Delete ' то ячейки удаляем
End If
End If
Else: Err.Clear 'очищаем ошибку
End If
End If
Next i
Next j
End Sub