Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2010, 10:22   #1
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию Удаление строк в таблице

Здравствуйте!
Есть у меня таблица: 30 строк х 25 столбцов. как мне макросом удалить строки с 12 по 19 при условии что в этой строке в столбце номер 3 пусто. таблиц в документе одна. нашел примерный код (http://www.programmersforum.ru/showthread.php?t=68309):

Код:
    For i = 19 To 12 Step -1
        If Len(ActiveDocument.Tables(1).Cell(i, 3).Range.Text) = 2 Then
            а что написать чтоб удалялась строка номер i
        End If
    Next i
подскажите синтаксис удаления строки. Смотрел справку и так записывал макрос, но так ничего и неполучилось...
maksim_serg вне форума Ответить с цитированием
Старый 30.04.2010, 11:19   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Наверное так, если в таблице нет ячеек, объединённых по строкам
Код:
ActiveDocument.Tables(1).Rows(i).Delete
Если такие ячейки есть, то нужно проверять все ячейки третьего столбца по свойству RowIndex, начиная с конца. И те, у которых этот индекс от 19 до 12, удалять.
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 30.04.2010 в 11:22.
viter.alex вне форума Ответить с цитированием
Старый 30.04.2010, 12:17   #3
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

Ошибка: присутсвуют ячейки объедененные по вертикали, хотя в диапазоне 12:19 таких нет.
Код:
set adt = ActiveDocument.Tables(1)
ActiveDocument.Range(adt.Cell(i, 1).Range.Start, adt.Cell(i, 25).Range.End).Cells.Delete
слижком сложно и наверное много лишнего но работает
maksim_serg вне форума Ответить с цитированием
Старый 30.04.2010, 12:26   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Нет, ничего лишнего я не вижу. Правильный подход. Просто отлично!
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 30.04.2010, 12:37   #5
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

а как все тоже самое сделать, но макросом excel'я?
Код:
With CreateObject("word.application")
.documents.Open (ThisWorkbook.Path & "\мой файл.doc")
Set adt = .ActiveDocument.Tables(1)

    For i = 19 To 12 Step -1
        If Len(adt.Cell(i, 3).Range.Text) = 2 Then
            .ActiveDocument.Range(adt.Cell(i, 1).Range.Start, adt.Cell(i, 25).Range.End).Cells.Delete
            .ActiveDocument.Range(adt.Cell(i - 1, 2).Range.Start, adt.Cell(i - 1, 24).Range.End).Cells.Borders(wdBorderBottom).LineStyle = Options.DefaultBorderLineStyle
        End If
    Next i

End white
То ошибка здесь: If Len(adt.Cell(i, 3).Range.Text) = 2 Then
То здесь: .ActiveDocument.Range(adt.Cell(i - 1, 2).Range.Start, adt.Cell(i - 1, 24).Range.End).Cells.Borders(wdBord erBottom).LineStyle = Options.DefaultBorderLineStyle
То вообще работаетбез ошибки, но и ничего не делает
maksim_serg вне форума Ответить с цитированием
Старый 30.04.2010, 13:18   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Код:
'Не ленитесь объявлять переменные
Dim wdApp As Object
Dim wdDoc As Object
Dim adt As Object

Set wdApp = CreateObject("Word.Application")
Set wdDoc = wdApp.Documents.Open (ThisWorkbook.Path & "\мой файл.doc")
Set adt = wdDoc.Tables(1)

    For i = 19 To 12 Step -1
        If Len(adt.Cell(i, 3).Range.Text) = 2 Then
            wdDoc.Range(adt.Cell(i, 1).Range.Start, adt.Cell(i, 25).Range.End).Cells.Delete
            wdDoc.Range(adt.Cell(i - 1, 2).Range.Start, adt.Cell(i - 1, 24).Range.End).Cells.Borders(wdApp.WdBorderType.wdBorderBottom).LineStyle = wdApp.Options.DefaultBorderLineStyle
        End If
    Next i
'И уничтожать после использования
Set wdDoc = Nothing
Set wdApp = Nothing
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление пустых строк в таблице Semen90 Microsoft Office Word 24 14.07.2022 12:28
Добавление (удаление) строк в таблице inside9 Microsoft Office Excel 29 01.01.2012 22:31
От группировки строк с итогами к реляционной таблице forumdin Microsoft Office Excel 17 14.03.2010 18:39
дублирование строк в таблице windrun БД в Delphi 0 27.02.2010 22:53