Макросы

Макросы

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

Дмитрий спрашивает:

Использую макрос, удаляющий ненужный междустрочный интервал. Но применяется он ко всему тексту в документе, а как сделать так, чтобы изменения вносились только в выделенном фрагменте, а без выделения — во всем документе?

В этом случае вы можете воспользоваться следующим макросом:

Подробнее

Марк Розенберг, один из авторов рекомендуемой мною книги Microsoft Word. Комфортная работа с помощью макросов, написал очень познавательную статью под названием "Обработка графики в Microsoft Word средствами VBA". Вот ссылка на статью: http://markros.ru/graphics/.

 

В своей статье Марк приводит исчерпывающие сведения о графических объектах Shape и InlineShape. Кроме того, к статье прилагаются образцы учебных макросов и шаблон EachShape, который позволяет выделить все графические объекты в активном документе и вывести информацию о каждом из них.

 

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

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

Предположим, что часить слова написана полужирым шрифтом, а часть - обычным. Выделив слово и нажав кнопку И (или клавиши «Ctrl+B») мы приведём всё слово к полужирному начертанию. Нажав ещё раз - к обычному и т.д.

Существует ли способ переключить начертание, чтобы те буквы (не слова), что были жирными, стали обычными, а обычные - жирными?

Юрий, вот примеры макросов для ваших целей, подсказанные Александром Витером .

Подробнее

Максим задал вопрос:

При наборе текста я работаю с выключенной автопроверкой орфографии, чтобы подчеркивание эстетику письма не нарушало и с мыслей не сбивало. Проверяю орфографию после завершения редактирования. Но иногда я забываю это сделать.

Можно ли сделать так, чтобы word 2007 перед тем, как я собрался сохранить или выйти из документа, автоматически меня спрашивал - проверить ли орфографию и чтобы после проверки орфографии еще спрашивал - сохранять документ или нет?

Вот пример мини-программы (состоит из трех отдельных макросов). Подключите их к шаблону Normal.dotx и при сохранении, или при закрытии документа будет выводиться запрос.

Подробнее

Сергей интересуется:

Имеется 2 документа word 2007. В первом документе имеется только один лист с текстом. Формат этого листа - книжный. Этот лист является 1-м листом 2го докумнета.

Второй документ - основной. В нем имеется несколько страниц с разлиным форматированием листа, т. е. есть листы книжной раскладки, есть листы альбомной раскладки. И начинается 2-ой документ как раз с альбомного листа.

Вопрос: Как мне вставить лист из 1го документа во второй, таким образом чтобы при вставке этот лист не изменял автоматически свою ориентацию на альбомную?

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

Вам нужно открыть ваш основной документ (2-й документ), запустить макрос, выбрать нужный файл и он будет вставлен в качестве 1-й страницы книжного формата вашего основного документа.

Вот код макроса:

Подробнее

^ Наверх