Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2009, 22:56   #1
Semen90
Пользователь
 
Регистрация: 29.10.2009
Сообщений: 12
По умолчанию Удаление пустых строк в таблице

Автоматически создаються документы в ворде на несколько сотен страниц состоящие из текста и таблиц. Вопрос как удалить пустые строки в табличной части документа
Semen90 вне форума Ответить с цитированием
Старый 30.10.2009, 00:08   #2
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,534
По умолчанию

Выделить их и удалить. Хотите сделать это макросом, судя по всему?

А вот когда они создаюТСЯ — ведь можно пустых строк и не создавать. Дайте пример.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 30.10.2009, 01:21   #3
Semen90
Пользователь
 
Регистрация: 29.10.2009
Сообщений: 12
По умолчанию

создаються они профессиональной программой и изменить что либо я не могу, пробовал в шаблонах и так и эдак все равно выходят пустые строки, удалять их вручную на нескольлких сотty страниц - убиться можно, да и просто пропустить. часть файла (пример) находиться по следующей ссылки http://files.mail.ru/S1N16D
Semen90 вне форума Ответить с цитированием
Старый 30.10.2009, 08:43   #4
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,534
По умолчанию Увы

Извините, но 100 Мб загружать я не буду. У меня всего свободно 240!

Попробуйте поискать более профессиональную программу.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 30.10.2009, 10:53   #5
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Sasha_Smirnov, насчет 100 Мб ты что-то напутал. Там 128,5 кб.
Кое-что получилось. Так должно быть или ещё нужно удалять ячейки с прочерками?
Хороша профессиональная программа!
Вложения
Тип файла: doc МЕЖЕВОЙ ПЛАН (без пустых строк).doc (103.5 Кб, 109 просмотров)
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 30.10.2009, 14:04   #6
Semen90
Пользователь
 
Регистрация: 29.10.2009
Сообщений: 12
По умолчанию

Да именно так , можно все конечно и в ручную, но повторяюсь, что документы создаються порой более чем на 1000 страниц. Буду рад за помощь или подсказку, VBA не мой конек - однозначно
Semen90 вне форума Ответить с цитированием
Старый 30.10.2009, 15:40   #7
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию пробуйте

Код:
Sub DeleteEmptyRows()

  On Error Resume Next
  
  Dim oDocCurr As Document 'Рабочий документ
  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 oDocCurr = ActiveDocument 'Запоминаем активный документ
  'Перебираем таблицы в документе, начиная с конца документа
  For j = oDocCurr.Tables.Count To 1 Step -1
    Set oTbl = oDocCurr.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 = oDocCurr.Range(iStart, iEnd) 'Запоминаем диапазон от начала первой пустой ячейки до конца последней
            'Удаляем из строки знаки абзаца и конца ячейки
            sEmptyString = Replace(oRowRng.Text, ChrW(13) & ChrW(7), "")
            If Len(sEmptyString) = 0 Then 'Если строка пустая,
              oRowRng.Cells.Delete ' то ячейки удаляем
              oDocCurr.Save 'документ сохраняем
            End If
          End If
        Else: Err.Clear 'очищаем ошибку
        End If
      End If
    Next i
  Next j
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 30.10.2009, 16:24   #8
Semen90
Пользователь
 
Регистрация: 29.10.2009
Сообщений: 12
По умолчанию

Огромное спасибо, макрос работает!!! Единственный вопрос чем вызванно столь частое сохранение документа, пример - 90 страниц макрос обработал за 3 минуты, а если страниц 1500 то частое сохранение намного увеличит время обработки. Поймите правильно я не привередничую, просто хочу понять , я рад и тому что Вы уже написали, это все же не руками, и уж точно не пропустишь строку
Semen90 вне форума Ответить с цитированием
Старый 30.10.2009, 16:48   #9
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Эту строку можно закомментировать. Просто когда я отлаживал макрос, то Word вылетал несколько раз, ну и чтобы не терять наработанное, я поставил сохранение
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 30.10.2009, 17:14   #10
Semen90
Пользователь
 
Регистрация: 29.10.2009
Сообщений: 12
По умолчанию

Еще раз спасибо! сечас попробую протестировать на самом большом документе, результаты сообщу
Semen90 вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление (удаление) строк в таблице inside9 Microsoft Office Excel 29 01.01.2012 22:31
Матрица: добавление пустых строк Romer9999 Паскаль, Turbo Pascal, PascalABC.NET 4 09.12.2008 12:14
Вставка пустых строк в FastReport'е Boatswain БД в Delphi 1 13.11.2008 14:41
Автоматическое изменение количества строк в таблице THE_ENGINEER Microsoft Office Excel 7 19.10.2008 21:28