Таблицы Word

Таблицы Word

VBA-addict, активный участник нашего форума, предложил свое решение по таблицам. Публикую это решение также и здесь. Вопросы можете задавать автору заметки как в комментариях, так и на форуме.

 

При попытке добавления в таблицу со слитыми ячейками колонок слева и справа часто возникают проблемы связанные с тем, что ячейкам колонки присваивается ширина соседних ячеек. Соответственно, если ширина у них разная - таблица разлетается в столбчатую диаграмму.

 

Не найдя полностью готового решения в сети скомпилировал свое. Работает на текущей таблице под курсором.

 

Для добавления слева и справа код несколько отличается, т.к. при добавлении слева всегда ссылка идет на первую ячейку строки, которая есть всегда, а справа - на последнюю, номер которой может отличаться из-за слитых ячеек.

Sub AddCol2LeftMergedCTable()
    If Selection.Range.Information(wdWithInTable) = False Then Exit Sub
    With Selection.Tables(1)
        TblRowsNumber = .Rows.Count        
        NewColumnWidth = InputBox$("Enter the width in millimeters for the Column to add", _
                                   "Add column to the LEFT for a table with merged cells", _
                                   NewColumnWidth)
        If Val(NewColumnWidth) = 0 Then Exit Sub
        For i = 1 To TblRowsNumber
            .Range.Cells.Add BeforeCell:=.Cell(i, 1)
            .Cell(i, 1).Width = MillimetersToPoints(NewColumnWidth)
        Next
    End With
    Selection.MoveDown
End Sub
Sub AddCol2RightMergedCTable()
    If Selection.Range.Information(wdWithInTable) = False Then Exit Sub
    With Selection.Tables(1)
        TblRowsNumber = .Rows.Count
        NewColumnWidth = InputBox$("Enter the Width in millimeters" & vbCrLf & "for the Column to add", _
                                   "Add column to the RIGHT for a table with merged cells", _
                                   NewColumnWidth)
        If Val(NewColumnWidth) = 0 Then Exit Sub        
        For i = 1 To TblRowsNumber
            LastColNum = .Rows(i).Cells.Count
            .Rows(i).Cells(LastColNum).Select
            Selection.MoveRight
            Selection.InsertCells ShiftCells:=wdInsertCellsShiftRight 'добавляем ячейку'
            Selection.Cells.Width = NewColumnWidth
        Next
    End With
    Selection.MoveDown
End Sub

Игорь спрашивает:

Есть ряд слов:

собака кошка мышка кенгуру

цыпленок хомяк мишка птичка.

Как мне их добавить в таблицу, состоящую из 4 столбцов и 2 строк, чтобы каждое слово находилось в отдельной ячейке, не применяя к каждому слову операцию вырезать-вставить. Эти слова у меня так и находятся в столбик по 4 слова в строчку в вордовском документе (так же, как я и написал в примере), а чуть ниже есть таблица пустая, вот туда мне и надо их вставить.

Игорь, попробуйте вот такой макрос (ниже). Выделите ваши слова и запустите макрос:

Подробнее

Юрий интересуется:

Как во всем документе удалить лишние концевые знаки абзацев в конце ячеек таблиц? Это именно знаки абзацев (^13) перед маркером конца ячейки. Вариант искать "(*^13)@", заменить на "\1" не работает в ячейках...

Для этих целей следует использовать следующий макрос. Работает для всех таблиц в документе и удаляет знаки абзацев только в конце текста в ячейке:

Подробнее

Максим спрашивает:

Преобразовать одну таблицу в текст — дело нехитрое. Но у меня очень часто возникает задача преобразовать ВСЕ таблицы документа в текст. А их может быть десятки и сотни (это типичная ситуация, когда открываешь веб-страницу.) Есть ли какое-нибудь решение?

Следующий макрос может решить эту проблему.

Подробнее

Александр спрашивает:

У меня Word 2003. Таблица, загруженная с Интернета, разорвана командой "Разбить таблицу". Вопрос: Как её соединить обратно?

Похожий вопрос был задан недавно на форуме ru-board.com. Пользователь спрашивал, как ему объединить несколько одинаковых по структуре таблиц в одну.

 

Я предлагаю воспользоваться следующим макросом (автор Helmut Weber). Однако, будьте аккуратны и осторожны, так как если между вашими таблицами есть какой-то текст, то он будет удален.

Подробнее

Руслан спрашивает:

В документе несколько таблиц. Как узнать номер таблицы, в которой находится курсор ввода?

Если вам нужно узнать номер конкретной таблицы (в той, где находится курсор ввода), то надо воспользоваться следующим кодом:

Sub numCurTable()
'номер текущей таблицы
MsgBox ActiveDocument.Range(0, Selection.Tables(1).Range.End).Tables.Count
End Sub

^ Наверх