Поиск таблиц в vba word

SkyFlyStaR

1 / 1 / 0

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

Сообщений: 69

1

18.04.2014, 15:50. Показов 5614. Ответов 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

11343 / 4661 / 749

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

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

Записей в блоге: 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



  • 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

Something like this:

Sub ReplaceTables()
    Dim oTable As Table
    Dim oRng As Range
    For Each oTable In ThisDocument.Tables
        If oTable.Rows.Count > 1 And oTable.Columns.Count > 1 Then
            If IsNumeric(oTable.Cell(2, 1).Range.Words(1).Text) And _
                        IsNumeric(oTable.Cell(2, 2).Range.Words(1).Text) Then
                Set oRng = oTable.Range
                oTable.Delete
                oRng.Text = "[TABLE]" & vbCrLf
            End If
        End If
    Next
    Set oTable = Nothing
    Set oRng = Nothing
End Sub

It loops through all the tables in the document, checks in the first two cells in the second row if the first word is numeric, and if so deletes the table and puts the [TABLE] text and a new line instead.

Hope this helps.

Addition:

To check for 4 columns or more, and the presence of a $ sign in the text of the table, use this check instead:

If oTable.Columns.Count >= 4 Then
    If InStrRev(oTable.Range.Text, "$") > 0 Then

Формулировка задачи:

Добрый день! Есть документы word, в каждом есть определенная табличка 3*3 с какой то информацией! Заполнять ее надо из Excel. Она находится в середине текста. Ее порядковый номер я не знаю, перед ней могут быть еще таблицы. Помогите ее идентифицировать. Решил устроить поиск по уникальному тексту.

Ну нашли, а что нашли и где оно! Не очень понимаю работу ворда и Vba.

Код к задаче: «Макрос поиска таблицы в word»

textual

Листинг программы

Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Dim wdTable As Word.Table
 
Set wdApp = GetObject(, "Word.Application")
Set wdDoc = wdApp.ActiveDocument
 
With wdDoc.Content.Find
     .Text = "Сметная стоимость"
     .Execute
     If .Found = True Then
        Set wdTable = .Parent.Tables(1)
        wdTable.Cell(1, 1).Range = "Ячейка <a1>"</a1>
        wdTable.Cell(3, 3).Range = "Ячейка <c3>"</c3>
     End If
End With

Полезно ли:

5   голосов , оценка 3.400 из 5

Похожие ответы

  1. Макрос поиска одного из указанных символов в Word
  2. Макрос поиска и замены дат в документе Word
  3. Word Поиск таблицы в документе
  4. Word: макрос для таблиц. Отформатировать определенный вид таблиц
  5. Макрос в Excel, использующий Word
  6. Создать таблицу в Word и заполнить её данными из массива
  7. Перенос таблицы из Word в Excel
  8. Создание нескольких таблиц в Word
  9. Как объединить ячейки таблицы в Word, обращаясь к ним по свойству Cell (n, m)
  10. Как изменить размер изображения, вставленного в ячейку таблицы MS Word?
  11. Импорт данных из Excel в таблицу колонтитула 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

Понравилась статья? Поделить с друзьями:
  • Поиск схожих ячеек в excel
  • Поиск слова в списке excel
  • Поиск слова в нескольких файлах excel
  • Поиск слова в документах word не открывая их
  • Поиск слова в документах word 2007