Выделить столбец word vba
Объекты, задающие программный проект, являются общими для всех документов Office 2000, в том числе и документа Word. Этой важной теме - программной работе с такими объектами посвящена лекция 4
Текст и объекты Range и Selection
Основной частью документа Word является, конечно, текст этого документа. Уже было сказано, как структурирован текст документа, рассмотрены коллекции - Characters , Words , Sentences , Paragraphs , которые позволяют работать с символами, словами, предложениями и абзацами текста. Говорил я также и о том, что только этими коллекциями не обойтись, и необходим общий класс объектов, позволяющий задать произвольную область текста. Таковыми являются два важных класса Range и Selection . Объекты этих классов широко используются при работе с текстом. Документы, поддокументы, разделы, все вышеупомянутые коллекции от Characters до Words имеют метод или свойство Range , возвращающие в качестве результат объект Range . Каждый объект Range задает область определения некоторого объекта, включая текст и все объекты, связанные с этим текстом - комментарии, ссылки и прочее. Так, если некоторый объект вызвал метод Range , то возвращаемый объект Range будет содержать область определения объекта, вызвавшего метод.
Объект Selection представляет выделенную область. Поскольку в каждом окне может быть только одна выделенная область, то одновременно может существовать лишь несколько объектов Selection по одному на каждое существующее окно или подокно. Заметим также, что, объект Selection всегда существует в окне, даже если и не сделано явного выделения некоторой области, в последнем случае объект Selection задает точку вставки, определенную позицией курсора.
Объект Document имеет метод Range , возвращающий объект Range , и метод Select , создающий объект Selection . Метод Range - это функция, возвращающая в качестве результата объект Range ; метод Select - это процедура без параметров, которая создает объект Selection в качестве побочного эффекта. Заметьте существенную разницу между методами Range и Selection . В первом случае возвращается сам объект и поэтому можно запомнить возвращаемый объект и в программе одновременно работать с несколькими такими объектами. В случае вызова метода Selection объект не возвращается, следовательно, запомнить его нельзя, что и гарантирует уникальность объекта Selection .
Объект Range имеет метод Select , выделяющий область объекта Range , и определяющий, тем самым, новый объект Selection . Симметрично, объект Selection имеет свойство Range , возвращающее объект Range , соответствующий выделенной области.
Объекты Range и Selection столь же многообразны по своей структуре, как и объект Document . И даже большинство свойств у этих трех объектов одни и те же. Эти три объекта являются схожими. Это понятно, так как большинство частей документа: предложения, абзацы, разделы, таблицы, рисунки, комментарии, ссылки и многое другое - может составлять любую подобласть документа, в том числе и выделенную подобласть. Значит, большинство ранее описанных частей документа являются и частями (свойствами) объектов Range и Selection . Это приятно - ведь с большинством свойств этих объектов мы уже знакомы!
Объект Range напоминает матрешку: в каждую область вложена область поменьше. Вот пример корректного (хоть и не самого эффективного) задания объекта Range :
Сколько объектов Range упоминается в этом предложении? Правильный ответ: 6, но не 3. Напомним: на нижнем уровне отсутствуют классы, определяющие символ, слово или предложение - все эти объекты принадлежат классу Range .
Для объекта Selection нельзя построить такую хитрую цепочку вложений - ведь метод Select не возвращает объект Selection . Но можно построить такую же "хитрую" последовательность операторов, которая задает сужающуюся область выделения:
Работа с текстом
Объекты Range и Selection позволяют выполнять основные операции над текстом (и не только над текстом): "выделить", "добавить", "заменить", "удалить". У наших объектов большой набор методов, позволяющих реализовать эти операции. Все рассматриваемые здесь методы принадлежат обоим объектам, если не сделана специальная оговорка.
Говоря в этом параграфе о выделении, я имею в виду не применение метода Select , а выделение в более широком смысле, умение задать некоторую подобласть данной области. Выделить некоторую часть текста означает, по существу, определение объекта Range или Selection . Оба объекта задают непрерывную область, а их свойства Start и End позволяют задать начало и конец области. Меняя эти свойства, можно задать нужную область выделения. Этот основной способ выделения мы не раз демонстрировали в наших примерах:
В первом случае при задании области используются параметры Start и End , во втором - задается вся область данного объекта. Область может изменяться автоматически при добавлении или удалении из нее части текста. Изменить область можно и путем ее перемещения. Этим занимается специальная группа методов перемещения Move. Прежде чем говорить о перемещении, рассмотрим сжатие области. Нередко нужна пустая область - точка вставки, параметры Start и End которой совпадают. Поэтому простейший способ сжатия - задать совпадающие значения этих параметров:
Для сжатия области можно применять специальный метод сжатия - Collapse(Direction). Область стягивается в начальную или конечную позицию. Направление сжатия задает параметр Direction, принимающий значения wdCollapseStart или wdCollapseEnd . По умолчанию область стягивается в начальную точку (значение параметра: wdCollapseStart ). Если сжимается абзац, и он стягивается в конечную точку, точка вставки переносится за метку конца абзаца и устанавливается в начало следующего абзаца. Если такой эффект нежелателен, после сжатия применяется метод перемещения MoveEnd , передвигающий точку вставки назад на один символ:
Если есть методы сжатия области, то должны быть и методы расширения области. Основным из них является метод Expand (Unit). В зависимости от значения параметра Unit область можно расширить на слово, предложение, абзац, раздел, на строку или столбец таблицы, или на всю таблицу. Для объекта Selection область можно расширить на всю строку. Для расширения области на весь фрагмент можно использовать метод WholeStory , что впрочем эквивалентно вызову метода Expand (Unit := wdStory)
Метод Move является основным методом перемещения. Остальные методы - в той или иной степени его модификации. Метод Move ( Unit , Count ) сжимает область в точку, стягивая ее в начало или конец, и затем перемещает точку вставки. Параметр Unit определяет единицы перемещения, а Count - количество этих единиц и направление стягивания и перемещения (по умолчанию 1). Положительные значения этого параметра задают стягивание к концу и перемещение вперед, отрицательные - стягивание в начало и перемещение назад. Само стягивание означает перемещение на одну единицу. Метод возвращает количество единиц, на которое фактически произошло перемещение, или 0, если оно не осуществлено. Параметр Unit принимает значения wdCharacter (по умолчанию), wdWord, wdSentence, wdParagraph, wdSection, wdStory, wdCell, wdColumn, wdRow и wdTable.
Методы перемещения на сам текст не влияют - лишь изменяют область, заданную объектами Range и Selection . Поэтому эти методы применимы только к переменным типа Range , но не к фиксированным областям. Например, запись:
не имеет эффекта, поскольку область первого абзаца - вещь неизменяемая.
Метод Move стягивает область в точку, которая и перемещается, поэтому после его выполнения область исчезает, и остается только точка вставки. Методы MoveStart и MoveEnd перемещают начальную или конечную точку области, обычно расширяя тем самым область.
Конечно, для перемещения по тексту документу есть много различных возможностей, кроме группы методов Move . Стоит упомянуть группу методов Next, основным из которых является метод Next(Unit,Count). Основное отличие от метода Move с теми же параметрами состоит в том, что метод Next возвращает сам объект Range , в отличие от метода Move , возвращающего число символов, на которое произошло перемещение. Напомним также о тех возможностях перемещения, которыми обладают объекты Browser и Hyperlink , напомним о закладках, специально предназначенных для перехода к ним.
Удаление текста
Метод Delete позволяет удалить текст. Вызванный без параметров, он удаляет вызывающий его объект Range или Selection . Если он применен в форме Delete(Unit,Count), удаляется часть текста в указанной области. Параметр Unit задает единицы, но при удалении возможны только два значения: wdWord и wdCharacter. Параметр Count задает количество удаляемых единиц. Если область стянута в точку, удаляются символы перед точкой вставки или после нее в зависимости от знака параметра Count . Вот несколько примеров:
Вставка текста
Группа методов Insert объектов Range и Selection позволяет осуществлять вставки в документ. Для вставки текста используются методы InsertBefore(Text) и InsertAfter(Text). Параметр Text типа String задает текст, вставляемый до или после области, заданной объектами Range или Selection . После вставки текста область автоматически расширяется, включая в себя добавляемый текст. Вот пример вставки нового абзаца в начало документа:
Свойство Text позволяет заменять текст в выделенной области, поэтому нет нужды вызывать метод Insert(Text), - лучше использовать свойство. Методы InsertBefore и InsertAfter безопасны, так как текст добавляется, не изменяя содержимого области. При вставке внутрь области, например, при использовании метода InsertSymbol или InsertParagraph, заменяется содержимое области. Эта вроде бы безобидная программка сотрет все содержимое документа, заменив его пустым абзацем:
Говоря о методах вставки текста, нельзя не упомянуть о таком мощном методе, как InsertFile - он позволяет вставлять не только текст или таблицу Excel, но и целый документ, хранящийся в файле. Вот простой пример вызова метода, при котором в начало активного документа вставляется существующий документ:
Работа с буфером
Известно, как полезен буфер при работе с одним и, особенно, с несколькими документами. Объекты Range и Selection в полной мере позволяют задействовать все возможности буфера. Метод Copy, не имеющий параметров, копирует объект (содержимое области) в буфер. Метод Cut, действуя аналогично, копирует объект в буфер, заодно удаляя его. Заметьте, что в отличие от предыдущей версии, теперь метод Cut работает, как ему положено, не только копируя объект, но и удаляя его, ранее удаления не происходило, вместо этого объект, вызывавший метод стягивался в точку. Метод Paste позволяет приклеить объект, помещенный в буфер. Рассмотрим пример:
Метод Paste позволяет "вклеить" содержимое буфера в область, заданную объектами Range и Selection . Эта операция опасна, так как происходит замена, а не добавление текста. Поэтому обычно метод Paste применяется к объектам Range и Selection , стянутым в точку вставки. В выполнении этого метода есть нюансы. У объекта Range содержимое буфера включается в его область, Объект Selection остается точкой вставки, расположенной после текста, добавленного из буфера.
Заметьте, в буфер можно копировать не только текст. В нашем следующем примере в буфер копируется рисунок, являющийся элементом коллекции TableOfFiguress . Напомню, что элементы этой коллекции вставляются аналогично символам текста и являются частью абзаца. В тестовом документе DocOne, с которым я работаю, в начало текста вставлен рисунок мышки. Я буду работать с первым абзацем этого текста, содержащим этот рисунок, как с обычным текстом, выделю рисунок, помещу его в буфер, а затем приклею в другом месте текста. Вот код соответствующей процедуры:
Иногда в буфер копируют формат текста. Этим занимается метод CopyFormat , копирующий формат по первому символу объекта Selection . Если этот символ - метка абзаца, копируется формат абзаца. Методом CopyFormat обладает только объект Selection .
Метод PasteFormat применяет форматирование, хранящееся в буфере к объекту Selection .
Метод PasteSpecial позволяет явно управлять форматированием в момент вставки объекта из буфера.
Здравствуйте!
Столкнулся с проблемой - не знаю как выделить макросом несколько строк в таблице WORD сразу.
Как выделить одну знаю: Это работает
Selection.Tables(1).Rows(1).Select
Пробовал макрос записать Выделил строки в ручную и скопировал их буфер. Получил это:
Sub Макрос2()
'
' Макрос2 Макрос
Selection.Copy
End Sub
Может подскажите другое решение?
Суть Есть большой файл Word 462 страницы там несколько таблиц 3 или 4. Мне надо эту таблицу скопировать в excel. Полностью скопировать в буфер удается, но вставить в excel оттуда нет - пишет что невозможно вставить. По столбцам копировать тоже не дает- пишет разной длины.
Единственный способ копировать по строчно или несколько строк в буфер и вставлять в excel
Как это сделать макросом?
для этого надо сначала увидеть пример таблицы
может достаточно будет сохранить вордовский файл в НТМ-формате
и уже его открыть екселем(без копирования. )
для этого надо сначала увидеть пример таблицы
может достаточно будет сохранить вордовский файл в НТМ-формате
и уже его открыть екселем(без копирования. )
Спасибо попробую!
А в 3-ей стоке кода
End:=. Range.Start тоже start. не End
попробую оба варианта. Методом проб и ошибок
Цель выделения чтобы скопировать в буфер, а оттуда в Excel
Если выделить несколько цикл перебора будет короче по времени
Пока лучшее что придумал сам это написать 2 макроса 1 в Word
Цикл перебора строк (по одной)
копирование в буфер
запуск макроса excel после копирования
2 Макрос excel
Определение занятых строк
активация первой пустой
вставка из буфера
Думаю должно сработать
Не знаю что такое VBE в Word?
Я думал это VB Excel, но Word ругается пишет нет доверия
А было бы здорово
With Application.VBE и далее макрос Excel.
Как выделить в таблице несколько строк не знаю, но решение своего вопроса нашел:
работает медленно, но работает
office 2016
Важно- перед запуском макроса таблицу надо выбрать - навести курсор и кликнуть мышкой
Sub for_i()
Dim objXls As Object
Set objXls = CreateObject("Excel.Application")
objXls.Workbooks.Open "D:\Macros2017\MWE.xlsm" ' Открытие файла Excel с нужным макросом -открывать 1 раз
a = Selection.Tables(1).Rows.Count
'а=35292 строк в таблице
For i = 1 To a
Selection.Tables(1).Rows(i).Select
Selection.Copy
objXls.Application.Visible = True
objXls.Run ("WDEX") ' WDEX название макроса excel
Next i
End Sub
Sub WDEX()
irow = Cells(Rows.Count, 1).End(xlUp).Row
Cells(irow + 1, 1).Select
With Selection
ActiveSheet.Paste
End With
Exit Sub 'Обязательно иначе застревает на end sub и требует нажатия f5
End Sub
Целиком таблицу еще не перекинул (может еще что всплывет), но 5 строк подряд скопировал
Если выделить несколько строк и скопировать дело будет двигаться быстрее
'выделить в документе промежуток .
ActiveDocument.Range( _
Start:=ActiveDocument.Lists(1).Rang e.Start, _
End:=ActiveDocument.Lists(1).Range. Start).Select
У меня не работает.
Кстати по поводу VBE -EXCEL - безопасность - есть пункт доверять VBA
1.Коллекция Tables .
Таблица представляет собой упорядоченную структуру, предназначенную для хранения организованных в виде строк и столбцов наборов данных. Элемент таблицы, находящийся на пересечении строки и столбца, называется ячейкой.
Таблица Word имеет такую же структуру, как и электронная таблица Excel – элемент таблицы, находящийся на пересечении строки и столбца, называется ячейкой и идентифицируется по имени столбца и номеру строки.
В VBA для доступа к таблицам используется объект Tables , являющийся семейством объектов Table , каждый из которых связан с конкретной таблицей. Для получения ссылки на семейство Tables можно использовать свойство Tables объекта Document .
Общее число таблиц, имеющихся в документе, содержится в свойстве Count . Для получения доступа к конкретной таблице можно использовать метод Item , который является методом по умолчанию.
Set oblTable = objDocument.Tables.Item ( Key)
Параметр Key , является уникальным идентификатором каждой таблицы, хранящейся в объекте Tables .
Для создания новой таблицы используется метод Add объекта Tables . Этот метод возвращает ссылку на созданную таблицу( Table ).
objTables.Add (Range, NumRows , NumColums )
Параметр Range позволяет указать область документа, куда будет вставлена таблица. Если параметр не пустой, т.е. имеется выделенная область, то она будет заменена вставляемой таблицей.
Параметры NumRows , NumColums позволяют указать на число строк и столбцов таблицы.
Пример: создадим таблицу в выделенном месте или там где стоит курсор.
2.Форматирование таблицы.
После создания таблицы ее можно отформатировать нужным образом: добавить заливку, изменить формат границ, изменить стиль и т.д.
В приложении Word входит ряд готовых профессиональных шаблонов для форматирования таблиц, которые позволяют значительно сэкономить время оформления таблицы.
Для их применения используется метод AutoFormat .
objTable.AutoFormat ( Format, [ ApplyBorders , ApplyShading , ApplyFont , ApplyColor , ApplyHeadingRows , ApplyLastRow , ApplyFirstColumn , ApplyLastColumn , AutoFit])
Параметр Format содержит один из допустимых форматов. Список всех имеющихся форматов и результат их применения можно увидеть в списке Стили таблицы окна диалога Автоформат таблицы (таблица ® автоформат ).
Параметр ApplyBorders указывает, должны ли использоваться границы, установленные по умолчанию для данного формата. Если True (значение по умолчанию), то текущие границы будут заменены границами, предусмотренными в применяемом автоформате .
Параметр ApplyShading указывает, должна ли использоваться заливка. Если True (значение по умолчанию), то для таблицы будет установлена заливка в соответствии со значением, предусмотренном в применяемом автоформате .
Параметр ApplyFont указывает, должен ли изменятся шрифт таблицы. Если True , то для текста в таблице будет применен шрифт, предусмотренный в применяемом автоформате .
Параметр ApplyColor указывает на необходимость использования цветового оформления цветового оформления таблицы. По умолчанию имеет значение True .
Параметр ApplyHeadingRows указывает на необходимость изменения формата заголовков столбцов (первой строки таблицы). По умолчанию имеет значение True.
Параметр ApplyLastRow указывает на необходимость изменения формата последней строки таблицы. По умолчанию имеет значение False , означающее, что особый формат к последней строке не применяется.
Параметр ApplyFirstColumn указывает на необходимость изменение формата первого столбца таблицы. По умолчанию имеет значение True .
Параметр ApplyLastColumn указывает на необходимость изменение формата последнего столбца таблицы. По умолчанию имеет значение False , означающее, что особый формат к последнему столбцу не применяется.
Параметр AutoFit указывает на автоматический подбор ширины столбцов в зависимости от размещаемых в них данных. По умолчанию имеет значение True .
Пример: применяем автоформат Классический 2 к таблице, расположенной первой от начала активного документа.
ActiveDocument.Tables ( 1).AutoFormat Format:=WdTableFormat.wdTableFormatClassic2
Тип используемого пользовательского форматирования содержится в свойстве AutoFormatType . Свойство возвращает одно из значений типа wdTableFormat .
Для форматирования границ таблицы используется свойство Borders , которое возвращает ссылку на объект типа В orders , связанный с границами данной таблицы.
Пример: назначение первой таблице в документе оформление границ.
With ActiveDocument.Tables ( 1).Borders
. OutsideLineStyle = wdLineStyleSingle внешние границы
. InsideLineStyle = wdLineStyleSingle внутренние границы
End With
3.Строки и столбцы.
Таблица состоит из набора строк и столбцов. Строки содержатся в семействе Rows , возвращаемое свойством Rows , а столбцы – в семействе Columns , возврщаемое свойством Columns .
Определенная строка или столбец связаны с объектами типа Row или Column . Доступ к конкретной строке или столбцу осуществляется с помощью метода Item , являющегося для объектов Rows и Columns методом по умолчанию.
Индексация столбцов и строк начинается с единицы. Индекс «единица» получает первая сверху строка и крайний левый столбец. Индекс последней строки и столбца можно получить с помощью свойства Count , которое возвращает количество членов в коллекции.
MsgBox ActiveDocument.Tables ( 1). Columns.Count
Для получения ссылок на первую или последнюю строку (столбец) можно использовать свойства First и Last .
Для добавления в таблицу новых строк (столбцов) используется метод Add .
Параметр Before – указывает, перед какой строкой будет вставлена строка. Если параметр опущен, то строка добавляется в конец таблицы.
Set tabv = ActiveDocument.Tables( 1).Rows.Add(beforerow:=ActiveDocument.Tables(1).Rows(1))
Чтобы установить высоту строки, используется метод SetHeight .
objRow.SetHeight ( RowHeight , HeightRule )
параметр RowHeight указывает на новую высоту строки в пунктах.
Параметр HeightRule – указывает на способ изменения высоты:
WdRowHeightAtLeast – размер, указанный в параметре RowHeigh , является минимальным.
WdRowHeightAuto - размер, указанный в параметре RowHeigh ,является точным.
WdRowHeightExactly – автоматический подбор высоты строк (параметр RowHeigh игнорируется).
Получить информацию о текущей ширине строки и правиле ее изменения можно с помощью свойств Height и HeightRule .
objRow . Height [ =Height ]
Параметр Height (тип Single ) позволяет задать необходимую высоту строки в пунктах.
objRow . HeightRule [ =Rule ]
Параметр Rule указывает на правило изменения ширины ячейки:
• wdRowHeightAtLeast — минимальная ширина, которая может быть назначена строке, указывается в свойстве Height ;
• wdRowHeightExactly — ширина строки должна быть точно равна значению, указанному в свойстве Height ;
• wdRowHeightAuto — ширина строки подбирается автоматически в зависимости от размера используемого шрифта или размера вставок.
Чтобы установить одинаковую высоту всех строк, необходимо использовать метод DistributeHeight объекта Rows .
objRows . DistributeHeight
Для украшения текста документа часто используются прием создания отступа между левой границы ячейки и текстом. Этот прием часто применяют при создании таблиц на web-страницах. Для создания отступа в ячейках таблицы можно использовать свойство SpaceBetweenColumns . При использовании этого свойства в объекте Rows выполняется добавление отступа во все ячейки таблицы, а при использовании в Row — только для ячеек данной строки.
objRows.SpaceBetweenColumns [ = Space ]
Параметр Space (тип Single ) позволяет указать на ширину отступа в пунктах. Значение, передаваемое параметром Space , не может быть меньше 0 и больше ширины ячейки.
В приведенном ниже примере показан код, позволяющий создать в первой строке первой таблицы активного документа отступ, равный 36 пунктам.
With ActiveDocument.Tables ( l)
. Rows( l). SpaceBetweenColumns = InchesToPoints (0.5)
Чтобы установить ширину столбца и правило ее изменения применяется метод SetWidth . Этот метод используется как в объекте типа Columns , так и объекте типа Column . Если используется метод объекта Columns , то изменения ширины касаются всех столбцов, а если метод объекта Column — то только данного столбца.
о bjColumns.SetWidth ( ColumnWidth , RulerStyle )
Параметр ColumnWidth (тип Single ) указывает на новую ширину столбца в точках, а параметр RulerStyle (тип WdRulerStyle ) — на способ изменения ширины. Параметр RulerStyle может принимать следующие значения:
• wdAdjustNone (значение по умолчанию) — ширина столбца соответствует указанному значению. Изменение ширины столбца выполняется за счет смещения левой или правой границы таблицы (столбца).
• wdAdjustSameWidth — ширина столбца соответствует указанному значению. Изменение ширины выполняется за счет смещения внутренних границ таблицы. Правая граница сохраняет свое положение.
• wdAdjustFlrstColumn — ширина первого столбца соответствует указанному значению. Изменение ширины выполняется за счет смещения правой границы столбца. Размер остальных столбцов сохраняется. Если ширина превышает суммарную ширину первой и второй ячеек, то происходит сдвиг правой границы таблицы.
• wdAdjustProportional — ширина первого столбца соответствует указанному значению. Размер остальных столбцов подбирается автоматически, так чтобы общая ширина таблицы сохранилась.
• Для получения информации о текущей ширине столбца можно использовать свойство Width .
• О bjColumns.Width [ =Width ]
• Параметр Width (типа Single ) позволяет указать нужную ширину столбца.
• Чтобы установить одинаковую ширину всех столбцов, необходимо использовать метод DistributeWidth объекта Columns .
• Для автоматического подбора ширины столбцов используется метод AutoFit .
• Для удаления строк (столбцов) используется метод Delete .
• Доступ к ячейкам данной строки или столбца осуществляется с помощью объекта Cells , который является семейством объектов Cell , связанных с конкретными ячейками.
• Set objCells = objTables.Rows (key).Cells
• Set objCells = objTables.Columns (key).Cells
• Здесь objTables указывает на таблицу, с ячейками которой будет выполняться работа, а key – строка или столбец в таблице, ячейки которой входят в семейство Cells .
• Ссылку на определенную ячейку можно получить с помощью метода Cell объекта Table .
Set instable = ActiveDocument.Tables.Add ( Selection.Range , 4, 10)
Для добавления новой ячейки используется метод Add .
Параметр BeforeCell указывает на ячейку, перед которой должна быть вставлена новая ячейка. Если параметр опущен, то ячейка вставляется в конец столбца (строки). Метод возвращает ссылку на созданную ячейку.
Все ячейки таблицы имеют свой уникальный индекс. Для получения ссылки на ячейку из определенного семейства используется ее порядковый номер: крайняя правая (или верхняя) ячейка имеет номер один, а последняя (нижняя) – значение, определяемое свойством Count для данного объекта Cells .
Чтобы узнать положение текущей ячейки в строке или столбце, можно использовать свойство RowIndex или ColumnIndex . Оба свойства возвращают ссылку на объект типа Cell и предназначены только для чтения.
Для выделения (активизации) текущей ячейки используется метод Select .
Для объединения нескольких ячеек в одну (инструмент слияния) используется метод Merge .
Параметр MergeTo (типа Cell ) содержит объект типа Cell (ячейка), с которым выполняется слияние. Если указана ячейка, не имеющая общей границы с текущей, то выполняется слияние всех ячеек, находящихся в прямоугольнике, у которого данная ячейка и ячейка, указанная в параметре MergeTo , являются угловыми.
Для разбиения объединенных ячеек или одной ячейки на несколько используется метод Split .
ObjCell . Split [ ( NumRows , NumColumns )]
Параметр NumRows (типа long ) содержит значение, указывающее на число строк, на которые должна быть разбита данная ячейка. Параметр NumColumns (типа long ) содержит значение, указывающее на число столбцов, на которые должна быть разбита данная ячейка.
ActiveDocument.Tables ( 1).Cell(1, 1).Split 2, 3
5.Вычисления.
Вычисления в таблицах Word выполняются так же, как и в любых других электронных таблицах. Разница заключается только в возможностях использования функций. По умолчанию в Word определенно не очень много функций, однако, используя возможности VBA по подключению дополнительных библиотек, например библиотеки функций Excel , их число можно значительно увеличить.
Для указания ячейке, что в ней будет выполнятся вычисление, используется метод Formula объекта Cell .
ObjCell.Formula (Formula, NumFormat )
Параметр Formula содержит строковое выражение, описывающее используемое выражение. Параметр NumFormat определяет числовой формат данных, которые будут отображены в данной ячейке.
При использовании стандартных инструментов вставки формул эти выражения содержатся в соответствующих полях. Например, выражение “= SUM ( A 4: C 4)” позволяет отобразить значение, получаемое в результате выполнения суммирования значений трех ячеек: А4, В4, С4. Кроме непосредственной ссылки на конкретные ячейки можно использовать общие ссылки, например на все ячейки, расположенные выше( Above ) или левее ( Left ).
По умолчанию в таблицах Word можно использовать следующие функции:
• Abs ( X ) — возвращает абсолютное значение числа или формулы (без знака);
• And ( X ; Y ) - возвращает значение 1, если оба логических выражения, X и У, истинны, или 0 (ноль), если хотя бы одно из них ложно;
• Average ( List ) — возвращает среднее значение из списка значений List ,
• Count ( List ) — возвращает количество элементов в списке List ;
• Defined ( X ) - возвращает значение 1, если выражение X допустимо, или 0 (ноль), если выражение не может быть вычислено;
• Fal se — возвращает значение 0 (ноль);
• Int ( X ) — возвращает целую часть числа или значения формулы X ;
• Min ( List ) — возвращает наименьшее значение в списке List ;
• Max ( List ) — возвращает наибольшее значение в списке List ;
• Mod ( X ; Y ) — возвращает остаток от деления X на Y ;
• Not ( X ) — возвращает значение 0 (ложь), если логическое выражение X истинно, или 1 (истина), если оно ложно;
• Or ( X ; Y ) — возвращает значение 1 (истина), если хотя бы одно из двух логических выражений X и Y истинно, или 0 (ложь), если оба ложны;
• Product ( List ) — возвращает произведение значений, включенных в список List . Например функция «= Product (1,3,7,9)» возвращает значение 189;
• Round ( X ; У) — возвращает значение X , округленное до указанного десятичного разряда Y ;
• Sign ( X ) - указывает знак числа: возвращает значение 1, если X > О, или -1 в противном случае;
• Sum ( List ) — возвращает сумму значений или формул, включенных в список. List;
• True — возвращает значение 1.
• Параметр NumFormat , является маской, которая определяет формат числовых значений. Эта маска может содержать ряд специальных символов, которые приведены ниже.
• 0 (нуль) — возвращает цифру. Если полученное значение не содержит цифру в этой позиции, то возвращается 0 (нуль). Например, если имеется выражение типа Formula :="= 4 + 5", NumFormat := "00,00", то возвращаемое значение будет следующим: «09,00».
• х — если « х » находится слева от десятичного разделителя, цифры расположенные слева от него, отбрасываются, а если справа — то значение округляется до указанного знака. Например, Formula :="= 111053 + 111439", NumFormat := " x $$$" возвращает значение «492», а Formula :="= 1/8", NumFormat := "0,00 x " возвращает значение «0,125».
• минус) — добавляет минус к отрицательным или пробел — ко всем остальным значениям.
• + (плюс) — добавляет плюс к положительным, минус к отрицательным или пробел — к нулевым значениям.
• Для автоматического вычисления суммы значений можно использовать метод AutoSum .
• После применения этого метода к данной ячейке в ней отображается значение, равное сумме значений всех ячеек, расположенных выше или левее данной.
1.Объекты Range и Selection .Работа с текстом.
Работа с текстом осуществляется с помощью ряда объектов. Весь текст документа можно представить в виде пирамиды, основой которой являются символы, а вершиной – собственно документ. В иерархическом порядке объектов VBA документ Word можно представить как:
Символы ( Characters ) ® Слова ( Words ) ® Предложения ( Sentences ) ® ® Абзацы ( Paragraphs ) ® Разделы ( Sections ) ® Документ ( Document )
Кроме этих объектов, явно указывающих на тот или иной элемент документа, в VBA имеется два объекта, которые позволяют работать с текстом как с целым, без явного структурного разделения: объект Rahge ассоциируется с любым фрагментом документа, а объект Selection – с любым выделенным фрагментом текста. Оба эти объекта похожи по своему действию, однако они различаются по своим функциональным возможностям.
2.Выделенный текст.
Объект Selection является одним из базовых объектов. Это глобальный объект и предварительного объявления для него не требуется . в целом этот объект любое выделение в документе, а в случае если выделение вырождено, т.е. ничего не выделено, то объект описывает текущее положение указателя.
Эта особенность часто используется для получения ссылки на объект, описывающий текущий элемент документа.
Пример: получить ссылку на объект типа Paragraphs , являющегося семейством всех выделенных или затронутых выделением абзацев.
Dim e As Paragraphs
Set e = Selection.Paragraphs
Свойством по умолчанию для объекта типа Selection является свойство Text , возвращающее выделенный текст.
Selection .[. Text ][ =Text ]
Для замены текущего выделенного текста используется метод TypeText .
Пример: вставляем в документ текст «ХХХ» и начинаем новый абзац.
. TypeText Text := "XXX"
End With
Для управления параметрами вставки текста можно использовать свойство ReplaceSelection .
Если true – текущее выделение замещается, если False – то вставлять перед выделением.
3.Текстовый диапазон. Объект Range предназначен для выделения и обработки фрагментов текста. Этот объект является семейством многих объектов.
Например для выделения абзаца, в котором сейчас находится указатель достаточно использовать код
Selection.Paragraphs (1). Range.Select
Область текста, связанная с объектом типа Range , характеризуется начальными и конечными символами. Для получения информации о них нужно использовать свойства Start и End .
objrange.Start [=Position]
objrange.End [=Position]
параметр Position (типа Long ) позволяет задать индекс символа, с которого должен начаться или которым должен закончится фрагмент текста, связанного с данным объектом objRange .
Для получения ссылки на текстовый диапазон можно использовать метод Range .
ObjDocumet.Range ( Start , End )
Параметр Start указывает на индекс символа, с которого должен начаться диапазон, а параметр End – на индекс последнего символа. Индексы символов соответствуют их порядковым номерам в семействе Words , ссылку на которое возвращает свойство Words объекта Document .
4. Выделение текста.
Формально объект Range связан только с диапазоном текста. Этот диапазон может быть никак не связан с текущим положением курсора или выделением. Однако диапазон, связанный с объектом Range , можно выделить в любой момент времени с помощью метода Select .
Пример: выделить второй абзац текущего документа.
ThisDocument.Paragraphs (2). Range.Select
5.Вырождение диапазона.
Для создания вырожденного диапазона можно использовать метод Collapse .
Параметр Direction позволяет задать направление, в котором будет выполнено вырождение. Если параметр имеет значение wdCollapseStart , то вырождение выполняется в направлении начала диапазона, т.е. End:=Start . Если параметр имеет значение wdCollapseEnd , то Start:=End
Пример: снятия выделения в документе, курсор помещен в конец выделеного диапазона.
6.Форматирование текста.
Объект Range чаще используется как инструмент для форматирования выделенного текстового диапазона. Для этого, кроме свойства объекта Font объект Range имеет целый ряд свойств, позволяющих настроить параметры шрифта данного диапазона.
Свойство Bold – позволяет установить параметры жирного начертания символов.
Если свойство имеет значение True , то начертание жирное , если False – нежирное. Свойство также может возвращать значение wdUnderfined , указывающее на смешанное начертание. Для установления стиля начертания можно использовать следующие значения True , False или wdToggle , позволяющие переключить текущее написание шрифта.
objRange . Bold [= Boolean ]
Свойство CombineCharacters
Свойство позволяет сжать все символы выделенного диапазона. Если свойство имеет значение true , то выполняется сжатие.
Свойство FilTextWidth
Свойство позволяет указать ширин у( в текущих единицах измерения, в которых должен быть размещен данный диапазон). Размер шрифта и ширину межсимвольного пространства Word подбирает автоматически
В приведенном ниже примере показан код, позволяющий уместить текущее выделение на отрезке документа , ширина которого эквивалентна пяти сантиметрам.
Selection.Range.FilTextWidth = CentimetersToPoints ( 5)
Свойство objRange.FormattedText
Свойство возвращает ссылку на объект типа Range , который ассоциируется с текстом в пределах данного диапазона objRange , имеющего специфическое форматирование.
C войство Italic – позволяет установить параметры курсивного начертания символов.
Свойство ListFormat – возвращает ссылку на объект типа Listformat , содержащего нумерованные или маркированные списки, используемые в данном диапазоне.
Свойство ListParagraph
Свойство возвращает ссылку на объект типа ListParagraph , содержащего нумерованные абзацы, имеющиеся в данном диапазоне.
Свойство Shading – возвращает ссылку на объект типа Shading , позволяющего указать цвет и формат заливки для данного диапазона.
Свойство Revisions
Свойство возвращает ссылку на объект типа Revisions , который связан с исправлениями , находящимися в данном диапазоне.
Свойство Showall [= Boolean ]
Свойство позволяет указать на отображение непечатаемых символов: табуляций, пробелов, символов абзаца, скрытого текста. True -символы отображаются.
Свойство Style [= Style ]
Свойство позволяет задать стиль для данного абзаца. Параметр Stile (тип Stile ) позволяет указать один из существующих типов.
Свойство Underline [= Underline ]
Свойство позволяет указать , как должен быть подчеркнут текст в данном диапазоне. Параметр Underline ( тип Underline ) позволяет указать тип линии подчеркивания
Метод InsertAfter вставляет заданный текст в конце диапазона или выделения.
ActiveDocument.Range.InsertAfter "пример"
Метод InsertParagraph позволяет заменить заданный диапазон символов или выделения на новый абзац. После его использования объект Range отождествляется с новым абзацем.
Метод InsertSymbol предназначен для вставки символа в заданное место диапазона или выделения. При использовании данного метода содержимое диапазона или выделения удаляется. Если этого не требуется, то перед вызовом этого метода следует использовать метод Collapse .
ObjRange.InsertSimbol ( CharacterNumber , Font, Unicode)
Параметр CharacterNumber определяет код символа. Параметр Font определяет имя шрифта, используемого в качестве источника символов. Параметр Unicode если значение True , то вставляется юникодовый символ, заданный аргументом CharacterNumbe . В противном случае (по умолчанию False ) будет вставлен символ ANSI, заданный аргументом CharacterNumbe .
Selection.Collapse direction := wdCollapseStart
Selection.InsertSymbol characterNumber := 171, Font:="Symbol", unicode :=False «
Метод Paste позволяет вставить содержимое буфера обмена в заданный диапазон или выделение. При его использовании содержимое диапазона или выделения заменяется содержимым буфера обмена. В случае если требуется вставить абзац из буфера обмена без замены текущего абзаца, перед вызовом этого метода следует использовать метод Collapse .
7.Поиск и замена
Поиск и замена- это стандартные инструменты любого приложения Microsoft Office .Как правило, команды вызова соответствующих диалоговых окон располагаются в меню Правка( Edit ). Инструменты поиска и замены в VBA реализуются с помощью объектов Find и Replacement .
Задачи по поиску и замене требуют своей реализации в VBA в редких случаях, например при частом поиске и замене одного и того же сочетания , вложенном поиске или при контекстном поиске.
Стандартный инструмент поиска и замены работает следующим образом : вы открываете окно диалога Поиск и замена( Find and Replace ) , вводите в соответствующие поля необходимые значения , определяете дополнительные параметры поиска и нажимаете кнопку Поиск( Find ) или Заменить( Replece Однако при частом поиске или замене одних и тех же значений для этой операции удобно назначить кнопку на панели инструментов , комбинацию клавиш или разместить ее в контекстном меню. Для реализации этой задачи нужно сначала создать соответствующий макрос.
Для упрощения (ускорения) создания соответствующего программного кода можно автоматизировать процесс написания макроса.
Укажите необходимые параметры поиска и нажмите кнопку Н айти
На панели инструментов О становить запись нажмите кнопку Остановить запись
Откройте окно редактирования Visual Basic for Application и перейдите к записанному макросу.
Выполните ручное редактирование макроса
В приведенном ниже примере показан код, позволяющий заменить четыре идущих подряд символов пробела одним символом табуляции
Selection.Find.Execute Replace := wdReplaceall
В ситуации , когда нужно найти фрагмент документа , а в нем еще один фрагмент – задача становится неоднозначной. В этом случае можно создать два макроса , один из которых будет вызываться и другого.
В приведенном ниже примере реализован одкратно вложенный поиск и замена , однако число вложений может быть и больше.
Переменная strText (тип string ) содержит текст, вкотром осуществляется поиск . Если заданный текст будет найден (метод Execute возвращает True ), то осуществляется вызов процедуры ReplaceSpace 4, показанной в предыдущем примере .
If .Execute Then ReplaceSpace4
8.Коллекция Tables .
Таблица представляет собой упорядоченную структуру, предназначенную для хранения организованных в виде строк и столбцов наборов данных. Элемент таблицы, находящийся на пересечении строки и столбца, называется ячейкой.
Таблица Word имеет такую же структуру, как и электронная таблица Excel – элемент таблицы, находящийся на пересечении строки и столбца, называется ячейкой и идентифицируется по имени столбца и номеру строки.
В VBA для доступа к таблицам используется объект Tables , являющийся семейством объектов Table , каждый из которых связан с конкретной таблицей. Для получения ссылки на семейство Tables можно использовать свойство Tables объекта Document .
Общее число таблиц, имеющихся в документе, содержится в свойстве Count . Для получения доступа к конкретной таблице можно использовать метод Item , который является методом по умолчанию.
Set oblTable = objDocument.Tables.Item ( Key)
Параметр Key , является уникальным идентификатором каждой таблицы, хранящейся в объекте Tables .
Для создания новой таблицы используется метод Add объекта Tables . Этот метод возвращает ссылку на созданную таблицу( Table ).
objTables.Add ( Range , NumRows , NumColums )
Параметр Range позволяет указать область документа, куда будет вставлена таблица. Если параметр не пустой, т.е. имеется выделенная область, то она будет заменена вставляемой таблицей.
Параметры NumRows , NumColums позволяют указать на число строк и столбцов таблицы.
Необходимо выделить несколько ячеек указывая столбцы числом, а не буквой, т.е.
ActiveCell.Offset(3, 1).Range("A1:C4").Select
не прокатит.
Cells тоже нельзя использовать. т.е.
ActiveCell.Offset(3, 1).Range(Cells(1,1), Cells(4,4)).Select
тоже нельзя использовать.
Если кто-нибудь знает иной способ - подскажите.
Originally posted by Oracloid
Необходимо выделить несколько ячеек указывая столбцы числом, а не буквой, т.е.
ActiveCell.Offset(3, 1).Range("A1:C4").Select
не прокатит.
Cells тоже нельзя использовать. т.е.
ActiveCell.Offset(3, 1).Range(Cells(1,1), Cells(4,4)).Select
тоже нельзя использовать.
Если кто-нибудь знает иной способ - подскажите.
Что-то ты замудрил.
ActiveSheet.Range(Cells(1, 2), Cells(3, 7)).Select
Или пиши подробнее, что тебе можно, что нельзя и почему нельзя. :)
Дело вот какое:
Обращатся к ячейкам через букву сложнее, чем просто указывать номер столбца и номер ячейки. Например нужно написать чтобы по циклу все пробежать и ты не ломаешь голову.
Использую Forms (Oracle-овый продукт) и OLE для того чтобы управлять Екселом.
Исходный текст выглядит так:
ArgList:=OLE2.CREATE_ARGLIST; --передаваемый аргумент
OLE2.ADD_ARG(ArgList, 'A1');
OLE2.ADD_ARG(ArgList, 'B5');
cell:=OLE2.get_OBJ_property(worksheet, 'range', ArgList);
OLE2.DESTROY_ARGLIST(ArgList);
OLE2.Invoke(cell,'select');
Это работает.
Но хотелось бы передавать координаты ячеек указывая столбец цифрой, а не буквой.
Например:
OLE2.ADD_ARG(ArgList, '1:1');--верхняя левая
OLE2.ADD_ARG(ArgList, '2:5');--нижнаяя правая
Я не могу передать в качестве аргумента 'Cell(1,1)' - нужны конкретные значения
Originally posted by Oracloid
Дело вот какое:
Обращатся к ячейкам через букву сложнее, чем просто указывать номер столбца и номер ячейки. Например нужно написать чтобы по циклу все пробежать и ты не ломаешь голову.
Использую Forms (Oracle-овый продукт) и OLE для того чтобы управлять Екселом.
Исходный текст выглядит так:
ArgList:=OLE2.CREATE_ARGLIST; --передаваемый аргумент
OLE2.ADD_ARG(ArgList, 'A1');
OLE2.ADD_ARG(ArgList, 'B5');
cell:=OLE2.get_OBJ_property(worksheet, 'range', ArgList);
OLE2.DESTROY_ARGLIST(ArgList);
OLE2.Invoke(cell,'select');
Это работает.
Но хотелось бы передавать координаты ячеек указывая столбец цифрой, а не буквой.
Например:
OLE2.ADD_ARG(ArgList, '1:1');--верхняя левая
OLE2.ADD_ARG(ArgList, '2:5');--нижнаяя правая
Я не могу передать в качестве аргумента 'Cell(1,1)' - нужны конкретные значения
Читайте также: