Word vba выделить строку таблицы

! Знаю ячейку, а как выделить всю строку?

GAL
Обычный пользователь
Обычный пользователь
Аватара пользователя

 
Сообщения: 69
Зарегистрирован: 05.11.2004 (Пт) 15:57

! Знаю ячейку, а как выделить всю строку?

Привет!

Люди, подскажите, пожалуйста.. :wink:

Как выделить строку если я знаю ячейку в этой строке?

Заранее большое спасибо.


uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя

 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 06.04.2005 (Ср) 10:38

Rows(номер_строки).Select

Если в строке есть ячейки, объединенные с другими строками, выделится несколько строк.


GAL
Обычный пользователь
Обычный пользователь
Аватара пользователя

 
Сообщения: 69
Зарегистрирован: 05.11.2004 (Пт) 15:57

Сообщение GAL » 06.04.2005 (Ср) 10:49

Я не знаю номер строки.

Я немогу явно указать номер этой строки.

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

Есть такая возможность? :?:


GAL
Обычный пользователь
Обычный пользователь
Аватара пользователя

 
Сообщения: 69
Зарегистрирован: 05.11.2004 (Пт) 15:57

Сообщение GAL » 06.04.2005 (Ср) 10:52

Я незнаю номер строки.

Я немогу указать его явно.

У меня макрос ищет ячейку с таким-то содержимым и когда найдет мне нужно выделить строку содержащую эту ячейку.

Есть такая возможность? :?:


uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя

 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 06.04.2005 (Ср) 10:53

Да, если x — это твоя найденная ячейка, то она содержится в столбце x.Column и в строке x.Row. Соответственно, можешь выделить строку так:

Rows(x.Row).Select


GAL
Обычный пользователь
Обычный пользователь
Аватара пользователя

 
Сообщения: 69
Зарегистрирован: 05.11.2004 (Пт) 15:57

Сообщение GAL » 06.04.2005 (Ср) 11:03

Да, так получилось.:)

Спасибо uhm!


GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.04.2005 (Ср) 12:51

x.entirerow.select

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас



Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 1

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
    Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

    Обратите внимание:
    1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
    2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
    3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
    4. Используйте теги [ code=vba ] …текст программы… [ /code ] для выделения текста программы подсветкой.
    5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
    6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

    Полезные ссылки:
    user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google


    Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.

    >
    Выделение одновременно 2-х ячеек в макросе Word

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    27.09.03, 09:50

      Народ, помогите, пожалуйста, программисту на С++.
      Задача такая. Когда записывается макрос в Word, мышью я не могу выделить несколько ячеек таблицы. С помощью верхнего меню Таблица->Выделить и т.д. могу выделить только одну ячейку. А нужно более одной для дальнейшего объединения. В макросе я пишу конкретно:

      Sub Макрос2()

      ActiveDocument.Tables(1).Cell(1, 2).Select
      ActiveDocument.Tables(1).Cell(1, 3).Select

      End Sub

      Выделяется ячейка 3-тья по последней строки, а со второй выделение слетает. По поводу Or или And  в справке VBA ничего найти не могу. Как все-таки выделить? Помогите дилетанту  VBA. ???


      Lamerroot



      Сообщ.
      #2

      ,
      27.09.03, 15:49

        Попробуй так, врядли заработает, неуверен я. В любом случае надо ипользовать класс Range:
        ActiveDocument.Tables(1).Range.SetRange 1, 5
        ActiveDocument.Tables(1).Range.Select


        brovey



        Сообщ.
        #3

        ,
        28.09.03, 06:38

          rs = ActiveDocument.Tables(1).Cell(1, 2).Range.Start
          re = ActiveDocument.Tables(1).Cell(1, 3).Range.End
          ActiveDocument.Range(rs, re).Select


          Lamerroot



          Сообщ.
          #4

          ,
          28.09.03, 17:59

            Ну или так!


            laifik



            Сообщ.
            #5

            ,
            29.09.03, 07:12

              Спасибо огромное! Все получилось. :D


              Lamerroot



              Сообщ.
              #6

              ,
              29.09.03, 18:43

                ;D

                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                0 пользователей:

                • Предыдущая тема
                • Visual Basic: Общие вопросы
                • Следующая тема

                Рейтинг@Mail.ru

                [ Script execution time: 0,0785 ]   [ 16 queries used ]   [ Generated: 15.04.23, 00:24 GMT ]  

                I want to change the font of all even rows in a large table in Microsoft Word (most versions, I use 2014) to red

                I tried a simple loop :

                For ii=2 to ActiveDocument.Tables(1).Rows.Count step 2
                  ActiveDocument.Tables(1).Rows(ii).Select
                  Selection.Font.ColorIndex = wdRed
                Next
                

                This sometimes hangs, sometimes it works, but takes hours (my table has 14000 rows…)

                Then I had the idea : Manually, I can select a row by left-clicking on its left, then add additional rows to the selection by Ctrl-left-click on their left.
                And I can then modify the font of all rows selected at once.

                So let’s see if doing the same programmatically is faster ! I tried something like

                 ActiveDocument.Tables(1).Rows(2).Select
                 For ii=4 to ActiveDocument.Tables(1).Rows.Count step 2
                   Selection.Add (ActiveDocument.Tables(1).Rows(ii))
                 Next
                 Selection.Font.ColorIndex = wdRed
                

                but Add is not accepted as a valid Selection object member

                Can someone help there ?

                Я хочу изменить шрифт всех четных строк в большой таблице в Microsoft Word (большинство версий, я использую 2014) на красный

                Я попробовал простой цикл:

                For ii=2 to ActiveDocument.Tables(1).Rows.Count step 2
                  ActiveDocument.Tables(1).Rows(ii).Select
                  Selection.Font.ColorIndex = wdRed
                Next
                

                Иногда это зависает, иногда это работает, но занимает часы (моя таблица имеет 14000 строк…)

                Тогда у меня возникла идея: вручную я могу выбрать строку, щелкнув левой кнопкой мыши слева от нее, а затем добавить дополнительные строки в выделение, нажав Ctrl-щелчок левой кнопкой мыши слева от них. И тогда я могу изменить шрифт всех строк, выбранных одновременно.

                Итак, давайте посмотрим, если делать то же самое программно быстрее! Я пробовал что-то вроде

                 ActiveDocument.Tables(1).Rows(2).Select
                 For ii=4 to ActiveDocument.Tables(1).Rows.Count step 2
                   Selection.Add (ActiveDocument.Tables(1).Rows(ii))
                 Next
                 Selection.Font.ColorIndex = wdRed
                

                но Добавить не принимается как действительный элемент объекта выбора

                Может ли кто-нибудь помочь там?

                2017-07-20 17:37

                1

                ответ

                Определить новый стиль и применить его к таблице… VBA не требуется

                это запись макроса примера изменения стиля… если вы хотите использовать vba

                Selection.Tables(1).Style = "Grid Table 5 Dark - Accent 2"
                

                Кроме того, запишите макрос создания нового определения стиля…. много хорошего

                2017-07-20 18:10

                Доброго времени суток всем подписчикам и читателям блога scriptcoding.ru. В этой статье мы продолжим изучать класс Selection, который показывает, как выделить фрагмент текста в документе Word.

                Для начала давайте вспомним, что выделение фрагмента текста осуществляется следующим образом: в большинстве случаев нужно выбрать несколько фрагментов, для этого сначала выбираем один нужный фрагмент, далее удерживаем клавишу «Ctrl« и выбираем остальные фрагменты. Теперь перейдем к теме публикации…

                Объект Word Selection содержит довольно много методов, большая часть из которых практически не используется, да и превращать блог в энциклопедию просто нет смысла. Поэтому, я решил разбить описание методов на две статьи, выбрав только те, которые чаще всего используются. В этой первой части я рассмотрю примеры работы с двумя категориями – методы с префиксомInsert и Move. Со второй частью можете ознакомиться в статье «Объект Word Selection — выделение текста, методы #2«.

                Содержание

                1. Методы Insert… – выделение фрагментов текста в Word
                2. Методы Insert… – выделение фрагментов текста в Word
                3. Методы Insert… – выделение фрагментов текста в Word
                4. Методы Insert… – выделение фрагментов текста в Word

                Методы Insert… – выделение фрагментов текста в Word

                как выделить фрагмент в тексте

                Примеры будут как для редактора VBA, так и для сценариев Windows Script Host, и так, начнем…

                Методы с префиксом Insert… позволяют вставить текст в документ:

                InsertAfter(text) и InsertBefore(text) – Вставка текста (text) в конец или в начало выделения. При отсутствии выделения вставка производится там, где находится курсор. Сам материал остается выделенным.

                InsertBreak(type) — Вставляет страницу, колонку или секцию. Параметр type содержит значение константы WdBreakType:

                • wdTextWrappingBreak — 11 — Конец текущей строки и продолжение вставки ниже изображения, таблицы или другого объекта. Материал продолжается на следующей пустой строке, которая не содержит таблицу, совмещенную с левой или правой границей.
                • wdLineBreakClearRight — 10 — Перевод на новую строку.
                • wdLineBreakClearLeft — 9 — Перевод на новую строку.
                • wdColumnBreak — 8 — Разрыв колонки.
                • wdPageBreak — 7 — Вставка новой страницы.
                • wdLineBreak — 6 — Перевод на новую строку.
                • wdSectionBreakOddPage — 5 — Начало нового раздела со следующей нечетной страницы.
                • wdSectionBreakEvenPage — 4 — Начало нового раздела со следующей четной страницы.
                • wdSectionBreakContinuous — 3 — Новый раздел без разрыва страницы.
                • wdSectionBreakNextPage — 2 — Начало нового раздела со следующей страницы.

                Прежде чем приступать к программированию, стоит сделать некоторое пояснение. По сути, ряд действий будут всегда одинаковыми – создание нового документа (за это будет отвечать функция или процедура Create_Doc). Изменяться будут только вызываемые методы.

                Программный код на VBScript:

                ' ----------------------------------------------------------------------------
                ' Объект Word Selection - методы
                ' Пример на языке VBScript - выделение фрагментов Word текста
                ' Selection-1.vbs
                ' ----------------------------------------------------------------------------
                Option Explicit
                ' Глобальные переменные
                dim oWord, oDoc, oSel, i
                 
                ' Процедура создания нового документа
                Sub Create_Doc()
                Set oWord = CreateObject("Word.Application")
                Set oDoc = oWord.Documents
                oDoc.Add()
                Set oSel = oWord.Selection
                oWord.Visible = True
                End Sub
                 
                Sub Insert_After_Before()
                     With oSel
                     .Text = "как выделить фрагмент текста "
                     .InsertAfter "          ............Конец"
                     .InsertBefore "Начало......    "
                     .EndOf
                     .InsertBreak 6
                     End With
                End Sub
                 
                call Create_Doc
                call Insert_After_Before

                Давайте посмотрим, что данный пример делает. При вызове процедуры Insert_After_Before происходит добавление в документ текстовой строки, далее в конец добавляется фраза » …………Конец», а в начало — «Начало…… «. Потом происходит перевод курсора в конец и добавление перевода строки.

                Пример на JScript:

                // ----------------------------------------------------------------------------
                // Объект Word Selection - методы
                // Пример на языке JScript - выделение фрагмента в тексте
                // Selection-1.js
                // ----------------------------------------------------------------------------
                 
                // глобальные переменные
                var oWord, oDoc, oSel, i
                 
                function Create_Doc(){
                oWord = WScript.CreateObject("Word.Application");
                oDoc = oWord.Documents;
                oDoc.Add();
                oSel = oWord.Selection;
                oWord.Visible = true;
                }
                 
                function Insert_After_Before(){
                     with(oSel){
                                 Text = "как выделить в документе фрагмент текста ";
                                 InsertAfter("          ............Конец");
                                 InsertBefore("Начало......    ");
                                 EndOf();
                                 InsertBreak(6);
                     }
                }
                 
                Create_Doc();
                Insert_After_Before();

                Для VBA мы просто запускаем редактор кода, добавляем новый модуль и прописываем код, в моем случае имя модуля — Module1:

                Sub Module1()
                ' ----------------------------------------------------------------------------
                ' выделение в Word фрагментов текста
                ' ----------------------------------------------------------------------------
                 
                Dim oWord1 As Object, oDoc1 As Object, oSel1 As Object, i
                 
                Set oWord1 = CreateObject("Word.Application")
                Set oDoc1 = oWord1.Documents
                oDoc1.Add
                Set oSel1 = oWord1.Selection
                oWord1.Visible = True
                 
                '***************************************
                With oSel1
                     .Text = "как выделить фрагмент текста "
                     .InsertAfter "          ............Конец"
                     .InsertBefore "Начало......    "
                     .EndOf
                     .InsertBreak wdLineBreak
                End With
                '***************************************
                 
                End Sub

                И так, с одной теоретической частью мы закончили и написали программный код, теперь можно приступить к следующей части.

                Методы Insert… – выделение фрагментов текста в Word

                InsertCaption(Label, Title, TitleAutoText, Position, ExcludeLabel) — Вставляет заголовок сразу после или перед указанным выбором. Обязательным является только параметр Label.

                Label – Нумерационный заголовок. Параметр может быть строкой или значением константы WdCaptionLabelID:

                • wdCaptionEquation — Уравнение
                • wdCaptionFigure — Рисунок
                • wdCaptionTable – Таблица

                Если метка (Label) не определена, то возникнет ошибка. Для определения метки надо использовать метод Add коллекции CaptionLabels, например:

                Applicationd.CaptionLabels.Add Name:="Рисунок"

                Title– Заголовок, который будет отображаться справа от метки.

                TitleAutoText– Авто-заголовок, перекрывает параметр Title.

                Position— Указывает, будет ли вставлен заголовок выше или ниже. Может быть одной из констант WdCaptionPosition:

                • wdCaptionPositionAbove — 0 — Метка название добавляется выше.
                • wdCaptionPositionBelow — 1 — Метка название добавляется ниже.

                ExcludeLabel— TRUE — отключить метку, заданную в параметре Label. FALSE — включить метку. Дополнительно.

                Ниже я приведу примеры, что бы не дублировать программный код, я привел только содержимое процедуры Sub Insert_Caption.

                ' VBScript
                Sub Insert_Caption()
                     oWord3.CaptionLabels.Add "Номер"
                     For i = 0 To 10
                                 oSel3.InsertCaption "Номер", "    как выделять фрагменты текста " & i
                                 oSel3.InsertBreak 6
                     Next
                End Sub

                Тут используется цикл for для вставки нескольких фрагментов — «Урок 6 по VBScript: Циклы for…next и for each…next«.

                //JScript
                function Insert_Caption(){
                oWord4.CaptionLabels.Add("Номер");
                     for (i = 0; i<=10; i++){
                                 oSel4.InsertCaption("Номер", "    выделение фрагмента текста " + i);
                                 oSel4.InsertBreak(6);
                     }
                }

                Тут тоже используется цикл for, но уже для JS кода — «Урок 9 по JScript — оператор цикла for«.

                ' VBA
                oWord5.CaptionLabels.Add "Номер"
                For i = 0 To 10
                     oSel5.InsertCaption Label:="Номер", Title:="    Фраза VBA Selection " & i
                     oSel5.InsertBreak wdLineBreak
                Next

                Обратите внимание, чтоимена переменных в примерах отличаются, это пришлось сделать с технических причин – в глазах поисковых систем статья становится заспамленой. Хорошо, давайте двигаться дальше.

                Методы Insert… – выделение фрагментов текста в Word

                как можно выделить фрагмент текста

                InsertDateTime(DateTimeFormat) – Метод позволяет вставить дату или время в документ, или одновременно оба значения. Помимо параметра DateTimeFormat есть еще четыре, но они практически не используются.

                DateTimeFormat – Необязательный параметр, позволяет указать формат даты и времени.

                ' VBScript
                Sub Insert_Date
                    With oSel4
                        .Text = "как выделить фрагмент текста "
                        .EndOf
                        .InsertBreak 6
                        .InsertDateTime
                        .InsertBreak 6
                        .InsertDateTime "MMMM dd, yyyy"
                        .InsertBreak 6
                        .InsertDateTime "MMMM dd, yyyy - H:M:S"
                    End With
                End Sub

                Обратите внимание на оператор with, он позволяет не писать каждый раз имя класса.

                //JScript
                function Insert_Date(){
                    with(oSel4){
                        Text = " выделение фрагментов Word текста ";
                        EndOf();
                        InsertBreak(6);
                        InsertDateTime();
                        InsertBreak(6);
                        InsertDateTime("MMMM dd, yyyy");
                        InsertBreak(6);
                        InsertDateTime("MMMM dd, yyyy - H:M:S");
                    }
                }

                Тут логика работы аналогична.

                ' VBA
                With oSel5
                     .Text = " как выделить в Word фрагмент текста "
                     .EndOf
                     .InsertBreak wdLineBreak
                     .InsertDateTime
                     .InsertBreak wdLineBreak
                     .InsertDateTime "MMMM dd, yyyy"
                     .InsertBreak wdLineBreak
                     .InsertDateTime "MMMM dd, yyyy - H:M:S"
                End With

                Хорошо, осталось рассмотреть последнюю третью часть статьи.

                Методы Insert… – выделение фрагментов текста в Word

                InsertFile(FileName) – Позволяет вставить содержимое указанного файла в документ, параметр FileName хранит имя или путь к файлу, если путь отсутствует, то будет подразумеваться текущий каталог.

                InsertNewPage — Вставляет новую страницу в место, где находится указатель.

                InsertParagraph— Заменяет выделение знаком абзаца.

                InsertParagraphAfter— Вставляет знак абзаца после выделения .

                InsertParagraphBefore— Вставляет новый абзац перед выделением.

                Методы с префиксом Move… также встречаются едва ли не в любой программе, связанной с вводом текста в Word. Самые важные и удобные из этих методов:

                MoveLeft(), MoveRight(), MoveUp(), MoveDown() – Методы дают возможность переместить курсор влево, вправо, вверх и вниз. Все четыре метода принимают следующие параметры (Unit, Count, Extend), являющиеся необязательными:

                Unit — Блок, по которым выбор должен быть перемещен. Параметр Unit содержит значения константы wdUnits.

                Count – Единица перемещения. Значение по умолчанию 1.

                Extend — Может быть либо wdMove (по умолчанию) или wdExtend.

                MoveEnd(), MoveStart() – Перемещение курсора в конец или начало выделения, параметры — Unit, Count.

                MoveStartUntil(), MoveStartWhile(), MoveEndUntil(), MoveEndWhile() – Позволяют переместить курсор к заданному символу или последовательности символов. Параметры Cset (обязательный) и Count (дополнительный):

                Cset — Один или несколько символов. Аргумент является чувствительным к регистру.

                Count – Задает целое или отрицательное значение, на которое происходит перемещение курсора.

                Move(Unit, Count) – Фактически, тут мы может указать направление (Count) и текстовую единицу (Unit).

                Логика работы для следующих примеров остается та же – меняется только код вызываемой процедуры. Фактически, код для языка VBScript и VBA является идентичным.

                ' VBScript
                Sub Get_Move()
                With oSel6
                     ' вставляем в документ фразу сто раз
                     For i = 0 To 10
                                 .Text = "как выделить фрагменты нужного текста "
                                 ' Перемещаем курсор в конец
                                 .EndOf
                     Next
                 
                     For i = 0 To 300
                                 .MoveLeft
                     Next
                 
                     For i = 0 To 100
                                 .MoveRight
                     Next
                 
                     For i = 0 To 4
                                 .MoveUp
                     Next
                 
                     .MoveStartUntil "Word"
                 
                     For i = 0 To 15
                                 .Move 2, 5
                     Next
                End With
                End Sub

                Видим, что в данном коде мы использовали несколько операторов for.

                //JScript
                function Get_Move(){
                with(oSel6){
                     for (i=0; i<=10; i++){
                                 .Text = "Текстовая строка: выделение фрагментов текста  ";
                                 .EndOf();
                     }
                 
                     for (i=0; i<= 300; i++){ .MoveLeft(); }
                     for (i=0; i<= 100; i++){ .MoveRight(); }
                     for (i=0; i<= 4; i++){ .MoveUp(); }
                     .MoveStartUntil("Word");
                     for (i=0; i<= 15; i++){ .Move(2, 5); }
                }
                }

                Обратите внимание на приведенные в самом начале статьи примеры кода для языков VBA и VBScript, в макросе мы можем использовать именованные константы объекта Word, но в теле Windows Script Host сценария нет, так как там они не доступны. Описание свойств класса Selection я рассмотрел в этой статье.

                Понравилась статья? Поделить с друзьями:
              • Word vba выделить найденный текст
              • Word vba вставить текст в документ
              • Word vba word wrap
              • Word vba tables range
              • Word vba string find