Как выделить ячейки в таблице word vba

    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,0204 ]   [ 16 queries used ]   [ Generated: 15.04.23, 15:42 GMT ]  

                peaceowner

                1

                16.12.2010, 19:34. Показов 24975. Ответов 9


                Студворк — интернет-сервис помощи студентам

                Ребята хелп ми, уже из сил выбился. Как выделить отдельную строку в ячейке таблицы Word? Ставлю курсор в начало строки и пробую различные методы типа MoveEnd(), EndOf(), MoveEndUntil() и другие. Все эти методы выделяют ВСЕ строки ячейки. Я даже в ворде проверил, поставил курсор на начало 2ой(из 4ех) строки ячейки и нажал клавишу End с зажатым Шифтом. В итоге выделились ВСЕ строки ячейки включая первую. Опытным путем установил, что двигаться нужно посимвольно, тогда строка выделяется как надо. Вопрос, как мне переместить выделение до последнего символа последней строки ячейки? Вообще пишу на Делфи, но все методы из ВБА. Помогите плиз.

                З.Ы. Забыл сказать, что строки ничем не разделены. Знаков переноса каретки нет, т.е. клавиша «интер» не нажималась, а просто сплошняком заполнялся текст в ячейку.

                1508 / 478 / 56

                Регистрация: 10.04.2009

                Сообщений: 8,008

                16.12.2010, 20:29

                2

                АктивеДокумент.Таблес(1).Ровс(1).Селект
                ОК???



                1



                306 / 187 / 26

                Регистрация: 14.02.2010

                Сообщений: 540

                16.12.2010, 20:30

                3

                Selection.EndKey Unit:=wdLine, Extend:=wdExtend
                Клавиатурой это Shift+End, почему у Вас это не работает, непонятно. По крайней мере в моем любимом 97 все нормально.



                1



                peaceowner

                16.12.2010, 20:48

                4

                Всем спасибо, разобрался наконец) Узнал позиции первого и последнего символов желаемого выделения. А дальше при помощи SetRange установил нужное мне выделение.

                kukuruku310
                Не выделяется с помощью Енд именно в таблице. Видимо это так и нужно. Если текст набран вне таблицы, то помещая курсор в середину строки, при нажатии Шифт+Енд выделение происходит с середины до конца, как и должно быть. В ячейке кроме как посимвольно похоже не выделишь.

                Ципихович Эндрю

                1508 / 478 / 56

                Регистрация: 10.04.2009

                Сообщений: 8,008

                17.12.2010, 03:30

                5

                Что Вам здесь

                Visual Basic
                1
                
                ActiveDocument.Tables(1).Rows(1).Cells(2).Select

                и здесь

                Visual Basic
                1
                
                Номер_текущей_таблицы_где_находится_курсор = ActiveDocument.Range(0, Selection.Tables(1).Range.End).Tables.Count

                не понравилось



                0



                306 / 187 / 26

                Регистрация: 14.02.2010

                Сообщений: 540

                17.12.2010, 12:32

                6

                да хоть в таблице, хоть в тексте, Shift+End работает одинаково, проверьте настройки Word. Я сам не пользуюсь ничем, кроме 97, поэтому конкретнее сказать не могу.

                Миниатюры

                Выделение отдельной строки в ячейке таблицы Word
                 



                0



                306 / 187 / 26

                Регистрация: 14.02.2010

                Сообщений: 540

                17.12.2010, 14:46

                7

                Щательнее подумавши еще добавлю: в последней строке ячейки действительно будет выделять весь текст целиком. Во избежание, наиболее просто, моно сделать финт ушами: запомнить текущую позицию Range — это будет начало диапазона, а для определения его конца перейти в конец строки без выделения. Как второй вариант, использовать переход в начало (Shift+Home), который, в отличие от Shift+End, всегда срабатывает одинаково, но это более заморочно, если выделять не от начала строки.



                0



                Ksenya100

                72 / 64 / 3

                Регистрация: 13.05.2010

                Сообщений: 349

                27.02.2012, 18:11

                8

                в эту же тему
                подскажите как выделить несколько символов в одной ячейке (в Word)
                что-то типа

                Visual Basic
                1
                
                set myrange=ActiveDocument.Tables(1).Cell(Row:=i,Column:=2).Range(start:=kk, end:=kkk)

                но так, естественно не работает.

                я так поняла peaceowner, разобрался…?



                0



                Ципихович Эндрю

                1508 / 478 / 56

                Регистрация: 10.04.2009

                Сообщений: 8,008

                27.02.2012, 18:30

                9

                Visual Basic
                1
                2
                3
                4
                
                Последних_знака = 3
                '... последних знака в 2 таблице, 3 строке, 4 ячейке выделить цветом ...
                '1 в строке кода это последний знак в таблице - концевая сноска
                ActiveDocument.Range(ActiveDocument.Tables(2).Rows(3).Cells(4).Range.End - 1 - Последних_знака, ActiveDocument.Tables(2).Rows(3).Cells(4).Range.End - 1).HighlightColorIndex = wdYellow



                2



                72 / 64 / 3

                Регистрация: 13.05.2010

                Сообщений: 349

                27.02.2012, 18:50

                10

                Ципихович Эндрю, Спасибо!!
                все работат.



                0



                0) don’t use rows, use absolute cell ranges

                1) if you have 3 sections, you should select them and then recolor them separately

                2) the following is a snippet from one of my macros which I use to select only cells 11-17 of all rows past 3 in the 1st table in the document

                    ActiveDocument.Range(Start:=ActiveDocument.Tables(1) _
                    .Cell(3, 11).Range.Start, End:=ActiveDocument.Tables(1) _  
                    .Cell(ActiveDocument.Tables(1).Rows.Count, 17).Range.End).Select
                

                3)the following would set the color to a solid light blue
                4)I also recommend wdColorAutomatic to make sure text will be visible on a new background

                    Selection.Shading.Texture = wdTextureNone
                    Selection.Shading.ForegroundPatternColor = wdColorAutomatic
                    Selection.Shading.BackgroundPatternColor = wdColorLightTurquoise
                

                5) remember to select your table properly, if you select the table first you can use

                    set aTable as selection.tables(1)
                

                6) to make sure you are in the right table

                Автор blacktesta, 04 ноября 2019, 20:19

                С помощью мыши можно выделить ячейку, а можно выделить текст в ячейке полностью. Это будут два разных выделения.

                Саму ячейку можно выделить таким кодом (выделяется первая ячейка в первой таблице):
                ActiveDocument.Tables(1).Cell(1, 1).Select

                А как выделить весь текст в ячейке при помощи VBA?



                Администратор

                • Administrator
                • Сообщения: 2,254
                • Записан

                Выделение текста ячейки:

                Макрос

                Sub Макрос1()

                        Dim tbl As Table

                            ‘ Присваиваем первой таблице имя «tbl», чтобы было удобно читать и писать код.
                    Set tbl = ActiveDocument.Tables(1)
                    ‘ Выделение первой ячейки в таблице.
                    tbl.Cell(1, 1).Select
                    ‘ Убираем с конца символ-кружок.
                    Selection.MoveEnd Unit:=wdCharacter, Count:=-1

                        ‘ Здесь у нас выделен весь текст ячейки.
                        ‘ Например, можно посмотреть текст ячейки.
                        ‘ Если ячейка пустая, то вернётся символ-кружок, а не пустая строка.
                        ‘ Вывод текста в View — Immediate Window.
                    Debug.Print Selection.Text

                    End Sub

                [свернуть]

                Не всегда есть необходимость выделять (использование Selection), а достаточно использовать Range:

                Макрос

                Sub Макрос2()

                       Dim tbl As Table, rng As Range

                          ‘ Присваиваем первой таблице имя «tbl», чтобы было удобно читать и писать код.
                    Set tbl = ActiveDocument.Tables(1)
                    ‘ Присваиваем имя «rng» содержимому ячейки.
                    Set rng = tbl.Cell(1, 1).Range.Duplicate
                    ‘ Убираем с конца символ-кружок.
                    rng.MoveEnd Unit:=wdCharacter, Count:=-1

                        ‘ Здесь «rng» — это весь текст ячейки.
                        ‘ Например, можно посмотреть текст ячейки.
                        ‘ Если ячейка пустая, то вернётся пустая строка.
                        ‘ Вывод текста в View — Immediate Window.
                    Debug.Print rng.Text

                    End Sub

                [свернуть]


                Огромное спасибо!!! Все работает. По видимому загвоздка была в этом символе-кружке.


                • Форум по VBA, Excel и Word

                • Word

                • Макросы в Word

                • Word VBA Макросы: Как обратиться/выделить текст в ячейке в таблице в ворде?

                Создание таблиц в документе Word из кода VBA Excel. Метод Tables.Add, его синтаксис и параметры. Объекты Table, Column, Row, Cell. Границы таблиц и стили.

                Работа с Word из кода VBA Excel
                Часть 4. Создание таблиц в документе Word
                [Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]

                Таблицы в VBA Word принадлежат коллекции Tables, которая предусмотрена для объектов Document, Selection и Range. Новая таблица создается с помощью метода Tables.Add.

                Синтаксис метода Tables.Add

                Expression.Add (Range, Rows, Columns, DefaultTableBehavior, AutoFitBehavior)

                Expression – выражение, возвращающее коллекцию Tables.

                Параметры метода Tables.Add

                • Range – диапазон, в котором будет создана таблица (обязательный параметр).
                • Rows – количество строк в создаваемой таблице (обязательный параметр).
                • Columns – количество столбцов в создаваемой таблице (обязательный параметр).
                • DefaultTableBehavior – включает и отключает автоподбор ширины ячеек в соответствии с их содержимым (необязательный параметр).
                • AutoFitBehavior – определяет правила автоподбора размера таблицы в документе Word (необязательный параметр).

                Создание таблицы в документе

                Создание таблицы из 3 строк и 4 столбцов в документе myDocument без содержимого и присвоение ссылки на нее переменной myTable:

                With myDocument

                Set myTable = .Tables.Add(.Range(Start:=0, End:=0), 3, 4)

                End With

                Создание таблицы из 5 строк и 4 столбцов в документе Word с содержимым:

                With myDocument

                myInt = .Range.Characters.Count 1

                Set myTable = .Tables.Add(.Range(Start:=myInt, End:=myInt), 5, 4)

                End With

                Для указания точки вставки таблицы присваиваем числовой переменной количество символов в документе минус один. Вычитаем единицу, чтобы исключить из подсчета последний знак завершения абзаца (¶), так как точка вставки не может располагаться за ним.

                Последний знак завершения абзаца всегда присутствует в документе Word, в том числе и в новом без содержимого, поэтому такой код подойдет и для пустого документа.

                При создании, каждой новой таблице в документе присваивается индекс, по которому к ней можно обращаться:

                myDocument.Tables(индекс)

                Нумерация индексов начинается с единицы.

                Отображение границ таблицы

                Новая таблица в документе Word из кода VBA Excel создается без границ. Отобразить их можно несколькими способами:

                Вариант 1
                Присвоение таблице стиля, отображающего все границы:

                myTable.Style = «Сетка таблицы»

                Вариант 2
                Отображение внешних и внутренних границ в таблице:

                With myTable

                .Borders.OutsideLineStyle = wdLineStyleSingle

                .Borders.InsideLineStyle = wdLineStyleSingle

                End With

                Вариант 3
                Отображение всех границ в таблице по отдельности:

                With myTable

                .Borders(wdBorderHorizontal) = True

                .Borders(wdBorderVertical) = True

                .Borders(wdBorderTop) = True

                .Borders(wdBorderLeft) = True

                .Borders(wdBorderRight) = True

                .Borders(wdBorderBottom) = True

                End With

                Присвоение таблицам стилей

                Вариант 1

                myTable.Style = «Таблица простая 5»

                Чтобы узнать название нужного стиля, в списке стилей конструктора таблиц наведите на него указатель мыши. Название отобразится в подсказке. Кроме того, можно записать макрос с присвоением таблице стиля и взять название из него.

                Вариант 2

                myTable.AutoFormat wdTableFormatClassic1

                Выбирайте нужную константу с помощью листа подсказок свойств и методов – Auto List Members.

                Обращение к ячейкам таблицы

                Обращение к ячейкам второй таблицы myTable2 в документе myDocument по индексам строк и столбцов:

                myTable2.Cell(nRow, nColumn)

                myDocument.Tables(2).Cell(nRow, nColumn)

                • nRow – номер строки;
                • nColumn – номер столбца.

                Обращение к ячейкам таблицы myTable в документе Word с помощью свойства Cell объектов Row и Column и запись в них текста:

                myTable.Rows(2).Cells(2).Range = _

                «Содержимое ячейки во 2 строке 2 столбца»

                myTable.Columns(3).Cells(1).Range = _

                «Содержимое ячейки в 1 строке 3 столбца»

                В таблице myTable должно быть как минимум 2 строки и 3 столбца.

                Примеры создания таблиц Word

                Пример 1
                Создание таблицы в новом документе Word со сплошными наружными границами и пунктирными внутри:

                Sub Primer1()

                Dim myWord As New Word.Application, _

                myDocument As Word.Document, myTable As Word.Table

                  Set myDocument = myWord.Documents.Add

                  myWord.Visible = True

                With myDocument

                  Set myTable = .Tables.Add(.Range(0, 0), 5, 4)

                End With

                With myTable

                  .Borders.OutsideLineStyle = wdLineStyleSingle

                  .Borders.InsideLineStyle = wdLineStyleDot

                End With

                End Sub

                В выражении myDocument.Range(Start:=0, End:=0) ключевые слова Start и End можно не указывать – myDocument.Range(0, 0).

                Пример 2
                Создание таблицы под ранее вставленным заголовком, заполнение ячеек таблицы и применение автосуммы:

                1

                2

                3

                4

                5

                6

                7

                8

                9

                10

                11

                12

                13

                14

                15

                16

                17

                18

                19

                20

                21

                22

                23

                24

                25

                26

                27

                28

                29

                30

                31

                32

                33

                34

                35

                36

                37

                38

                39

                40

                41

                42

                43

                44

                45

                46

                47

                48

                49

                50

                51

                52

                53

                54

                55

                56

                57

                58

                59

                60

                Sub Primer2()

                On Error GoTo Instr

                Dim myWord As New Word.Application, _

                myDocument As Word.Document, _

                myTable As Word.Table, myInt As Integer

                  Set myDocument = myWord.Documents.Add

                  myWord.Visible = True

                With myDocument

                ‘Вставляем заголовок таблицы

                  .Range.InsertAfter «Продажи фруктов в 2019 году» & vbCr

                  myInt = .Range.Characters.Count 1

                ‘Присваиваем заголовку стиль

                  .Range(0, myInt).Style = «Заголовок 1»

                ‘Создаем таблицу

                  Set myTable = .Tables.Add(.Range(myInt, myInt), 4, 4)

                End With

                With myTable

                ‘Отображаем сетку таблицы

                  .Borders.OutsideLineStyle = wdLineStyleSingle

                  .Borders.InsideLineStyle = wdLineStyleSingle

                ‘Форматируем первую и четвертую строки

                  .Rows(1).Range.Bold = True

                  .Rows(4).Range.Bold = True

                ‘Заполняем первый столбец

                  .Columns(1).Cells(1).Range = «Наименование»

                  .Columns(1).Cells(2).Range = «1 квартал»

                  .Columns(1).Cells(3).Range = «2 квартал»

                  .Columns(1).Cells(4).Range = «Итого»

                ‘Заполняем второй столбец

                  .Columns(2).Cells(1).Range = «Бананы»

                  .Columns(2).Cells(2).Range = «550»

                  .Columns(2).Cells(3).Range = «490»

                  .Columns(2).Cells(4).AutoSum

                ‘Заполняем третий столбец

                  .Columns(3).Cells(1).Range = «Лимоны»

                  .Columns(3).Cells(2).Range = «280»

                  .Columns(3).Cells(3).Range = «310»

                  .Columns(3).Cells(4).AutoSum

                ‘Заполняем четвертый столбец

                  .Columns(4).Cells(1).Range = «Яблоки»

                  .Columns(4).Cells(2).Range = «630»

                  .Columns(4).Cells(3).Range = «620»

                  .Columns(4).Cells(4).AutoSum

                End With

                ‘Освобождаем переменные

                Set myDocument = Nothing

                Set myWord = Nothing

                ‘Завершаем процедуру

                Exit Sub

                ‘Обработка ошибок

                Instr:

                If Err.Description <> «» Then

                  MsgBox «Произошла ошибка: « & Err.Description

                End If

                If Not myWord Is Nothing Then

                  myWord.Quit

                  Set myDocument = Nothing

                  Set myWord = Nothing

                End If

                End Sub

                Метод AutoSum суммирует значения в ячейках одного столбца над ячейкой с суммой. При использовании его для сложения значений ячеек в одной строке, результат может быть непредсказуемым.

                Чтобы просуммировать значения в строке слева от ячейки с суммой, используйте метод Formula объекта Cell:

                myTable.Cell(2, 4).Formula («=SUM(LEFT)»)

                Другие значения метода Formula, применяемые для суммирования значений ячеек:

                • «=SUM(ABOVE)» – сумма значений над ячейкой (аналог метода AutoSum);
                • «=SUM(BELOW)» – сумма значений под ячейкой;
                • «=SUM(RIGHT)» – сумма значений справа от ячейки.


                Like this post? Please share to your friends:
              • Как выделить ячейки в разных местах excel
              • Как выделить ячейки в excel чтобы посчитать сумму
              • Как выделить ячейки в excel чтобы был знаком
              • Как выделить ячейки в excel через одну ячейку
              • Как выделить ячейки в excel цветом по формуле