Vba word как найти таблицу

Sub Поиск_и_вставка()

    Dim tbl As Table

            ‘1. Цикл по всем таблицам в файле в поисках нужной таблицы.
    For Each tbl In ActiveDocument.Tables
        ‘ Если начало таблицы находится на странице 3, то выход из цикла, при этом таблице,
            ‘ которая находится на странице 3, будет присвоено vba-имя «tbl».
        If ActiveDocument.Range(Start:=tbl.Range.Start, End:=tbl.Range.Start). _
                Information(wdActiveEndPageNumber) = 3 Then
            Exit For
        End If
    Next tbl

        ‘2. Проверка, была ли найдена нужная таблица.
    If tbl Is Nothing Then
        MsgBox «На странице 3 нет таблицы.», vbExclamation
        Exit Sub
    End If

        ‘3. Вставка в конец таблицы строки.
    tbl.Rows.Add

    End Sub

SkyFlyStaR

1 / 1 / 0

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

Сообщений: 69

1

18.04.2014, 15:50. Показов 5605. Ответов 2

Метки нет (Все метки)


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

Есть документ, содержащий 2 заполненные таблицы

Visual Basic
1
Set Table = ActiveDocument.Range(Start:=ActiveDocument.Range.Start, End:=ActiveDocument.Range.End).Tables(2)

Если параметр в Tables равен 1, то таблица находится и обрабатывается без проблем, иначе появляется ошибка 5941 «Запрашиваемый номер семейства не существует», не понимаю в чем проблема



0



shanemac51

Модератор

Эксперт MS Access

11341 / 4660 / 748

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

Сообщений: 13,497

Записей в блоге: 4

18.04.2014, 16:02

2

Visual Basic
1
2
3
4
5
6
DIM J1
''Проверка количества таблиц в документе
J1=ActiveDocument.Range(Start:=ActiveDocument.Range.Start, End:=ActiveDocument.Range.End).Tables
IF J1>=2 THEN
Set Table = ActiveDocument.Range(Start:=ActiveDocument.Range.Start, End:=ActiveDocument.Range.End).Tables(2)
ENDIF



1



Казанский

15136 / 6410 / 1730

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

Сообщений: 9,999

18.04.2014, 16:22

3

Лучший ответ Сообщение было отмечено SkyFlyStaR как решение

Решение

Коллеги,

Visual Basic
1
ActiveDocument.Range(Start:=ActiveDocument.Range.Start, End:=ActiveDocument.Range.End)

это то же самое, что

Visual Basic
1
ActiveDocument.Range

Добавлено через 4 минуты
… а количество таблиц в теле документа

Visual Basic
1
ActiveDocument.Tables.Count



1



I am looking for a way (or decent introduction) into how to select every table in a Microsoft Word 2013 Document and autofit the contents. Each table is independent of one another and separated by text.

I have established the following code so far:

Sub autofit()

    Selection.Tables(1).AutoFitBehavior (wdAutoFitContent)

End Sub

Which works for individual tables and every column in said table, I understand the format of the «for loop», but would like a nudge to how to transform my individual selection to the entire document.

This is my first post so apologies for any conventions I have missed.

cheezsteak's user avatar

cheezsteak

2,6924 gold badges22 silver badges38 bronze badges

asked Dec 18, 2014 at 17:18

Cellobin22's user avatar

Its pretty trivial to loop them all;

Dim t As Table
For Each t In ActiveDocument.Tables
    t.AutoFitBehavior wdAutoFitContent
Next

answered Dec 18, 2014 at 17:22

Alex K.'s user avatar

Alex K.Alex K.

170k30 gold badges263 silver badges286 bronze badges

1

  • Remove From My Forums
  • Question

  • Is there any way to «Name» a table in a Word Document, so that it can easily be referred to later, either directly or by searching?

    I see that the ID property can be set (i.e. Tables(1).ID = «Table1»), but after doing so, can the table be searched for, or do I have to iterate through each table in the document to try to find the table with ID = «Table1»?

    Is there no way to refer to a Table through a name [i.e. Tables(«Table1»)], just as one would reference a worksheet in an Excel workbook? [i.e. Sheets(«Sheet1»)] Or is there some other way to name/locate a particular table besides using «brute force»? 

    Many thanks!


    DragonForest

Answers

  • To expand on the bookmark route, and it is what I use.

    If you bookmark ANY table, you can then use it as a name.  The advantage is that you can move the table anywhere you like, change the rows…whatever, and it does not affect the ability to use a name.  Normally if you move a table (or add another
    table before it), the index number changes.  this makes using an index number veryb unreliable.

    So.  You bookmark a table with the name «ClientData».  Now you can use a Table object and set it to THAT table, no matter where it is in the document.

    Sub GetClientData()
    Dim file
    Dim path As String
    Dim oTable As Table
    Dim WriteToDoc As Document
    Dim SourceDoc As Document
    path = «X:YaddaBlah»
    Set WriteToDoc = ActiveDocument

    file = Dir(path & «*.doc»)
    Do While file <> «»
        Set SourceDoc = Documents.Open(FileName:=path & file)
        Set oTable = SourceDoc.Bookmarks(«ClientData»).Range.Tables(1)
        WriteToDoc.Range.InsertAfter oTable.Cell(3, 1).Range.Text & vbCrLf
        SourceDoc.Close
        Set oTable = Nothing
        Set SourceDoc = Nothing
        file = Dir()
    Loop
    End Sub

    This code runs through all .doc files in a folder, opening each, setting a table object for a bookmarked table named ClientData, getting the text from cell row3,column1, and putting that text into a document.

    Bookmarking tables allows use of names for that table.  It is a very powerful tool.  I name all my tables.

    • Edited by

      Sunday, April 22, 2012 1:23 AM

    • Marked as answer by
      DragonForest
      Sunday, April 22, 2012 7:55 AM

  • «Brute force» seems to be the way to go:

    Sub FindTable()
        Dim tbl As Table
        For Each tbl In ActiveDocument.Tables
            If tbl.ID = "MyID" Then
                Exit For
            End If
        Next tbl
        If Not tbl Is Nothing Then
            ' ...
        End If
    End Sub


    Regards, Hans Vogelaar

    • Marked as answer by
      DragonForest
      Friday, April 20, 2012 4:48 PM

  • The Tables(index).ID property is designed for Internet/HTML/XML purposes.

    If you want to use it in Word, you have to use something like this:

    ——

    Selection.Tables(1).ID = «My Crazy Table»

    ——

    and then:

    ——

    Dim tbl As Table

    For Each tbl In ActiveDocument.Range.Tables
        If tbl.ID = «My Crazy Table» Then
            tbl.Select
            Exit For
        End If
    Next

    ——

    Or else, use bookmarks:

    ——

    Selection.Tables(1).Range.Bookmarks.Add «Crazy_Table»
    ——

    and then:

    ——

    ActiveDocument.Bookmarks(«Crazy_Table»).Range.Select

    ——

    • Marked as answer by
      DragonForest
      Friday, April 20, 2012 4:47 PM

Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.

Как найти следующую таблицу?

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщений [ 7 ]

1 11.05.2012 08:18:56

  • Как найти следующую таблицу?
  • Alex_Gur
  • Модератор
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 28.07.2011
  • Сообщений: 2,758
  • Поблагодарили: 492

Тема: Как найти следующую таблицу?

В файле Word много таблиц. Подскажите, пожалуйста, как можно осуществить поиск следующей таблицы в файле?
Пишут, что для этого можно использовать метод StartOf().

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк — 41001162202962; на WebMoney — R581830807057.

2 Ответ от Alex_Gur 11.05.2012 10:51:33

  • Как найти следующую таблицу?
  • Alex_Gur
  • Модератор
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 28.07.2011
  • Сообщений: 2,758
  • Поблагодарили: 492

Re: Как найти следующую таблицу?

Нашел следующее приемлемое решение:

Sub GoToNextTable01()
    Set myRange = ActiveDocument.Words(1).GoToNext(What:=wdGoToPage)
    With Selection
        Set myRange = .GoToNext(What:=wdGoToTable)
        .MoveRight Unit:=wdWord, Extend:=wdExtend
    End With
End Sub

А как все же найти следующую таблицу с использованием метода StartOf()?

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк — 41001162202962; на WebMoney — R581830807057.

3 Ответ от Ципихович Эндрю 11.05.2012 17:14:04

  • Ципихович Эндрю
  • генерал-полковник
  • Неактивен
  • Зарегистрирован: 04.02.2010
  • Сообщений: 506
  • Поблагодарили: 23

Re: Как найти следующую таблицу?

типа того
а = ActiveDocument.Tables(1).Start
потом перейти к а

4 Ответ от Alex_Gur 11.05.2012 19:10:10

  • Как найти следующую таблицу?
  • Alex_Gur
  • Модератор
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 28.07.2011
  • Сообщений: 2,758
  • Поблагодарили: 492

Re: Как найти следующую таблицу?

Ципихович Эндрю пишет:

типа того
а = ActiveDocument.Tables(1).Start
потом перейти к а

Эндрю, а можно поподробней?

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк — 41001162202962; на WebMoney — R581830807057.

5 Ответ от Ципихович Эндрю 11.05.2012 19:54:49

  • Ципихович Эндрю
  • генерал-полковник
  • Неактивен
  • Зарегистрирован: 04.02.2010
  • Сообщений: 506
  • Поблагодарили: 23

Re: Как найти следующую таблицу?

А = ActiveDocument.Tables(2).Range.Start
  ‘выделить промежуток … Start … End …
    ActiveDocument.Range(Start:=А, End:=А).Select

6 Ответ от Alex_Gur 11.05.2012 20:08:23

  • Как найти следующую таблицу?
  • Alex_Gur
  • Модератор
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 28.07.2011
  • Сообщений: 2,758
  • Поблагодарили: 492

Re: Как найти следующую таблицу?

Ципихович Эндрю пишет:

А = ActiveDocument.Tables(2).Range.Start
  ‘выделить промежуток … Start … End …
    ActiveDocument.Range(Start:=А, End:=А).Select

Стоит задача не выделить таблицу, а перейти к началу таблицы.
И еще — вы имеете в виду StartOf()? Нужно ли что-то записывать в скобках?
Еще один вопрос мне непонятен: почему в последнем посте вы написали Tables(2), а перед этим — Tables(1)?
Нужно перейти сначала к таблице 1, затем к таблице 2, 3 и т.д.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк — 41001162202962; на WebMoney — R581830807057.

7 Ответ от Ципихович Эндрю 11.05.2012 20:13:13

  • Ципихович Эндрю
  • генерал-полковник
  • Неактивен
  • Зарегистрирован: 04.02.2010
  • Сообщений: 506
  • Поблагодарили: 23

Re: Как найти следующую таблицу?

Стоит задача не выделить таблицу, а перейти к началу таблицы.
если выделить — ActiveDocument.Tables(2).Range.Select — пишу по памяти
а так так я написал нужное Вам
И еще — вы имеете в виду StartOf()? Нужно ли что-то записывать в скобках? — с этим не работал
Еще один вопрос мне непонятен: почему в последнем посте вы написали Tables(2), а перед этим — Tables(1) — а что Вы не спрашиваете первый раз я писал .Start а второй .Range.Start — это более точно, первый раз писал по памяти:)
по поводу 1 или 2 — пишите ту которая нужна

Сообщений [ 7 ]

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Похожие темы

  • Просмотр переходов на следующую страницу
  • Переход на следующую страницу — как событие
  • перенос таблицы на следующую страницу
  • Сочетание клавиш: переход на следующую страницу
  • Прошу помощи: автоперенос текста в следующую ячейку таблицы
  • Помогите сделать переход на следующую строчку в таблице автоматически
  • Автоматический перенос текста в следующую ячейку таблицы Word
  • Автоматический перенос слов на следующую строку таблицы в Word 2007

Как найти следующую таблицу?

При работе с многофункциональными современными редакторами текста, такими как, например, Microsoft Word, очень часто возникает потребность обсудить проблемы и нюансы работы. На портале о Microsoft Office Word вы узнаете про: как сделать чтобы нумерация сохранялась автоматически.
В зависимости от типа текста, цели, с которой он создается или редактируется, пользователю приходится осваивать те или иные функции, искать пути автоматизации своей работы, особенно это актуально для значительных объемов текста. Наш сайт о Microsoft Office Word даст ответ про: как убрать разделение на странице в ворде.
Также бывают трудности при переходе от одной версии Ворда к другой.

Помочь пользователям текстового редактора решили на сайте Ворд Эксперт и форуме сайта. На портале о Microsoft Office Word вы узнаете про: vba word найти и заменить.
Тут собрана вся необходимая информация, касающаяся программы, доступны полезные ссылки и списки литературы, выложены готовые ответы на самые стандартные вопросы,  кроме того, оригинальные решения различных проблем при работе с программой. На портале о Microsoft Office Word вы узнаете про: укак написать макрос для защиты документа.
Например, на форуме вы найдете макросы для нумерации разделов, шаблоны оглавлений, принципы работы с горячими клавишами и многое другое. Наш сайт о Microsoft Office Word даст ответ про: рамочки на страницах.

Прежде всего, Ворд Эксперт, ориентирован на автоматизацию работы Ворда, тут обсуждаются разнообразные макросы и шаблоны, но также вы найдете сравнительные характеристики различных версий, обсуждение настроек программы и способов редактирования и форматирования тексов. На портале о Microsoft Office Word вы узнаете про: код активации для word 2010.

Кроме того, вы можете описать свою проблему в специальном подразделе и получить готовое решение.

Like this post? Please share to your friends:
  • Vba word как найти слово
  • Vba word как заменить текст
  • Vba word как закрыть документ
  • Vba word как выделить часть текста
  • Vba word как выделить строку