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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2009, 15:34   #1
Solyarka
 
Регистрация: 14.10.2009
Сообщений: 7
По умолчанию Как определить, что есть объединенные ячейки

Форматирую таблицы документа с помощью макроса. Проблема в том, что есть таблицы, содержащие объединенные ячейки, и тогда свойство HeadingFormat (повторять как заголовок таблицы) для строки установить в True не получается: валится ошибка. Свойств, которые возвращали бы информацию о том, что таблица/строка/ячейка содержат merged cells не нашла. Может кто-нибудь решал такую задачу.

Кусочек моего кода:
With ActiveDocument.Tables(I)
.Rows(1).HeadingFormat = True
....
With

Заранее спасибо.
Solyarka вне форума Ответить с цитированием
Старый 14.10.2009, 16:36   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вообще, чтобы определить есть объединённые ячейки нужно перебрать все ячейки, которые входят в диапазон
(например для выделенного диапазона начало кода:
Код:
 Dim c As Range
 For Each c In Selection
    With c
      If .MergeCells Then
      ....
      End If
    End With
 Next
но мне кажется, что в вашем случае проше перехватить на себя обработчик ошибок. примерно так:
Код:
    On Error Resume Next
 ваш код:
  ....
  ActiveDocument.Tables(I) _
     .Rows(1).HeadingFormat = True
    
    If Err.Number <> 0 Then
       'Сигнализируем об ошибке (если надо)
       Exit Sub
    End If
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.10.2009, 16:41   #3
БуреВестник
Пользователь
 
Регистрация: 19.09.2009
Сообщений: 69
По умолчанию

Ты применяешь свой макрос ко одной таблице или ко всем таблицам в документе?
Если ко одной - то создай отдельный макрос для форматирования шапки таблицы.
Если ко многим, то другой разговор.
БуреВестник вне форума Ответить с цитированием
Старый 14.10.2009, 16:52   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Было-было. Можно было определить, что ячейки объединены то ли по строкам, то ли по столбцам. Я даже пример выкладывал.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 14.10.2009, 16:56   #5
БуреВестник
Пользователь
 
Регистрация: 19.09.2009
Сообщений: 69
По умолчанию

Может это?
http://www.programmersforum.ru/showthread.php?t=52255

Последний раз редактировалось БуреВестник; 14.10.2009 в 17:00.
БуреВестник вне форума Ответить с цитированием
Старый 14.10.2009, 17:10   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Нет-нет, это давно было. Вот это сообщение
В коде в переменную iRSpan записывается количество строк, которые объединены в данной ячейке. Со столбцами такая конструкция не проходит. Всегда возвращает 1. Это не должно так быть, но так есть.
Кстати, работать будет только для объекта Selection: это один из немногих случаев когда Selection нельзя заменить на Range. Т.е. ячейку, которую нужно проверить на объединение, нужно выбрать.
А можно вообще ловить ошибку через On Error Resume Next, как предложил Serge_Bliznykov, только не сигнализировать, а спокойно делать свое дело дальше
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 14.10.2009, 17:21   #7
БуреВестник
Пользователь
 
Регистрация: 19.09.2009
Сообщений: 69
По умолчанию

Serge_Bliznykov
здесь про Word речь.
Код:
MergeCells
к Excel относится.

Компилятор сначала прочитает
Код:
ActiveDocument.Tables(I).Rows(1).HeadingFormat = True
и сразу же выдаст ошибку, не дойдя до
Код:
If Err.Number <> 0 Then
БуреВестник вне форума Ответить с цитированием
Старый 14.10.2009, 17:28   #8
Solyarka
 
Регистрация: 14.10.2009
Сообщений: 7
По умолчанию

Макрос применяю ко всем таблицам в документе.
Примерно поняла, попробую модернизировать под свою задачу.
Мне надо выделить cтолько строк, сколько объядиняет ячейка (1,1).
Solyarka вне форума Ответить с цитированием
Старый 14.10.2009, 19:20   #9
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Несколько замечаний:
Если вы работаете со всеми таблицами в документе, то перебирайте их не счетчиком, а как элементы коллекции;
Чтобы ловить ошибку, воспользуйтесь On Error Resume Next
Код:
  On Error Resume Next
  Dim oTbl As Table
  For Each oTbl In ActiveDocument.Tables
    With oTbl
      .Rows(1).HeadingFormat = True
      'Если произошла ошибка, связанная с возможностью _
      доступа к отдельным строкам или столбцам.
      If Err.Number = 5991 Or Err.Number = 5992 Then
      'Делаем, что нужно
      '…
      'Очищаем ошибку
      Err.Clear
      End If
    End With
  Next
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 26.12.2009, 07:42   #10
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию Я написал и использую такую фуникцию:

Код:
Private Function Table_Merged(ByRef mTable As Table) As Boolean
' возвращает True, если таблица mTable имеет объединенные ячейки

    Table_Merged = False
    On Error Resume Next
    If (mTable.Columns(1) Is Nothing) Or _
       (mTable.Rows(1) Is Nothing) Then Table_Merged = True
    
End Function
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить, что в выделенной области есть глаза Бзик Помощь студентам 2 09.04.2009 21:46
как определить какие файлы есть в папке и вывести их имена в текстовый файл Tdoctor Паскаль, Turbo Pascal, PascalABC.NET 3 04.11.2008 05:18
Объединенные поля. Как разъединить? ***DSL*** Помощь студентам 0 02.06.2008 16:39
Как определить номер строки верхней левой ячейки диапазона Porog Microsoft Office Excel 8 09.05.2008 08:37
как определить координаты ячейки с найденным текстом Тимониссимо Безопасность, Шифрование 2 30.05.2007 15:23