Как узнать номер таблицы word vba

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

1508 / 478 / 56

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

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

1

03.02.2011, 21:19. Показов 12837. Ответов 47

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


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

номер таблицы Ворд где расположен курсор узнаю так:

Visual Basic
1
cursor_table = ActiveDocument.Range(0, Selection.Tables(1).Range.End).Tables.Count

но если есть объект

Visual Basic
1
Set WordApp = New Word.Application 'создаём новый экземпляр приложения

тогда пытаюсь узнать так:

Visual Basic
1
cursor_table = WordApp.Range(0, Selection.Tables(1).Range.End).Tables.Count

но выделает:.Range, как же узнать? Спасибо



0



Programming

Эксперт

94731 / 64177 / 26122

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

Сообщений: 116,782

03.02.2011, 21:19

47

Busine2009

Заблокирован

04.02.2011, 08:36

2

Цитата
Сообщение от Ципихович Эндрю
Посмотреть сообщение

создаём новый экземпляр приложения

просто вопрос у меня — зачем создавать новый экземпляр приложения?



0



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

1508 / 478 / 56

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

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

04.02.2011, 16:23

 [ТС]

3

просто создал объект WordApp и потом кнему обращаюсь:

Visual Basic
1
2
3
4
5
6
WordApp.Selection.MoveLeft Unit:=wdCharacter, Count:=1
s = Trim(WordApp.ActiveDocument.Tables(1).Rows(cursor_row).Range)
'а эти строки
With WordApp.Selection.Find

'cursor_table = WordApp.Range(0, Selection.Tables(1).Range.End).Tables.Count

дают сбой, может Вы и правы, что не так надо делать??
Как же узнать номер таблицы??



0



Busine2009

Заблокирован

04.02.2011, 17:33

4

Цитата
Сообщение от Ципихович Эндрю
Посмотреть сообщение

что не так надо делать??

не знаю, я просто спросил.



0



1508 / 478 / 56

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

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

04.02.2011, 17:51

 [ТС]

5

тут ответ такой
В коде cursor_table = ActiveDocument.Range(0, Selection.Tables(1).Range.End).Tables.Count
я беру свойство Range объекта ДОКУМЕНТ.
Во втором cursor_table = WordApp.Range(0, Selection.Tables(1).Range.End).Tables.Count
объекта ПРИЛОЖЕНИЕ
Я понимаю, что надо создать объект-документ, что-то вроде этого:
Set WordApp1 = Documents «D:Рабочая папка» & Файл_библиотека»
по выдаёт ошибку — ошибка синтакса



0



Busine2009

Заблокирован

04.02.2011, 17:59

6

Цитата
Сообщение от Ципихович Эндрю
Посмотреть сообщение

я беру свойство Range объекта ДОКУМЕНТ.

то, что красным, — метод называется.

Здесь:

Цитата
Сообщение от Ципихович Эндрю
Посмотреть сообщение

коде cursor_table = ActiveDocument.Range(0, Selection.Tables(1).Range.End).Tables.Count

вы берёте только число.



0



1508 / 478 / 56

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

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

04.02.2011, 18:18

 [ТС]

7

давайте это выясним, надо создать объект-документ, что-то вроде этого:
Set WordApp1 = Documents «D:Рабочая папка» & Файл_библиотека»
по выдаёт ошибку — ошибка синтакса
как правильно???

Добавлено через 2 минуты
ТОЧНЕЕ, НУЖНО
Создать переменную типа Документ Word и положить в неё ссылку на текущий (или нужный мне) документ. И именно к нему применять свой код



0



Busine2009

Заблокирован

04.02.2011, 18:18

8

Цитата
Сообщение от Ципихович Эндрю
Посмотреть сообщение

надо создать объект-документ

прежде, чем что-то создавать, надо знать, зачем это создавать. Я не вижу цели делать то действие, которое вы делаете.



0



1508 / 478 / 56

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

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

04.02.2011, 18:23

 [ТС]

9

ЦЕЛЬ:
Создать переменную типа Документ Word и положить в неё ссылку на текущий (или нужный мне) документ. И именно к нему применять свой код, чтобы знать номер таблицы Ворд где расположен курсор



0



Busine2009

Заблокирован

04.02.2011, 18:52

10

Ципихович Эндрю,
а конечная цель какая?



0



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

1508 / 478 / 56

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

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

04.02.2011, 19:27

 [ТС]

11

идет поиск слова в файле, там сейчас одна таблица, после того как слово найдено пишу:

PureBasic
1
2
cursor_row = WordApp.Selection.Rows.First.Index 'номер строки в таблице, в документе, где расположен курсор
s = LCase(Trim(WordApp.ActiveDocument.Tables(1).Rows(cursor_row).Range))

но потом вдруг добавлю еще таблицу так чтобы не париться всё сразу выяснить, какая таблица, какая строка в таблице



0



ironegg

1904 / 781 / 31

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

Сообщений: 1,567

04.02.2011, 23:45

12

Цитата
Сообщение от Ципихович Эндрю
Посмотреть сообщение

НУЖНО
Создать переменную типа Документ Word и положить в неё ссылку на текущий (или нужный мне) документ

Visual Basic
1
2
Set dcmnt = ActiveDocument
Debug.Print dcmnt



0



1508 / 478 / 56

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

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

05.02.2011, 09:02

 [ТС]

13

НУЖНО
Создать переменную типа Документ Word и положить в неё ссылку на

нужный мне

документ
Что-то вроде этого
Set WordApp1 = Documents «D:Рабочая папка» & Файл_библиотека»
где Файл_библиотека = «1.doc»
по выдаёт ошибку — ошибка синтакса, подскажите пожалуйста

Добавлено через 56 минут
прочитал я про объектную модель Ворда:
Указание конкретного документа
Если вам необходимо работать с определенным документом, который сейчас не активен,
вы должны указать его как члена коллекции Documents, состоящей изо всех документов,
открытых в настоящее время в Word. Как и в случае с любой другой коллекцией объектов
в VBA, вы можете обратиться к отдельному документу в коллекции, используя его заголовок,
который в данном случае совпадает с именем файла (только именем файла, а не с полным пу-
тем к нему). Вот соответствующий пример;
Documents(«Toy Store Newsletter.doc»)
пишу Set Файл = Documents(«1.doc») получаю — неверное имя файла
Как правильно??



0



Busine2009

Заблокирован

05.02.2011, 09:06

14

Цитата
Сообщение от Ципихович Эндрю
Посмотреть сообщение

Documents(«Toy Store Newsletter.doc»)
пишу Set Файл = Documents(«1.doc») получаю — неверное имя файла

а что здесь?



0



1508 / 478 / 56

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

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

05.02.2011, 10:50

 [ТС]

15

не понял вопроса — а что здесь?
На строке
Set Файл = Documents(«1.doc»)
и получаю ошибку — неверное имя файла
А строка
Documents(«Toy Store Newsletter.doc»)
Это приведённая цитата с книги



0



Busine2009

Заблокирован

05.02.2011, 10:58

16

Ципихович Эндрю,
неправильное описание ошибки дали разработчики Microsoft Visual Basic For Application. Должно быть так: Subscript out of range.
У вас в момент выполнения макроса не открыт документ 1.doc. Откройте его, а затем уже и запускайте макрос.



0



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

1508 / 478 / 56

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

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

05.02.2011, 11:42

 [ТС]

17

У вас в момент выполнения макроса не открыт документ 1.doc

КАК же он не открыт, когда макрос сам его открывает:

Visual Basic
1
2
WordApp.Documents.Open "D:Рабочая папка" & Файл_библиотека, , , , "111", , , "11", , , ""
Set Файл = Documents(Файл_библиотека) 'ошибка 4160 Неверное имя файла



0



Busine2009

Заблокирован

05.02.2011, 11:48

18

Ципихович Эндрю,
на панели задач Windows есть 1.doc?



0



1508 / 478 / 56

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

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

05.02.2011, 11:53

 [ТС]

19

1.док образно сказал, чтобы короче
на самом деле там
выше есть
Файл_библиотека = «Глаголы от 1 и от 3 лица.doc»
и конечно он на панели задач есть, ведь строка
WordApp.Documents.OPEN «D:Рабочая папка» & Файл_библиотека, , , , «111», , , «11», , , «»
РАБОТАЕТ



0



Busine2009

Заблокирован

05.02.2011, 11:58

20

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



0



GDK
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 23.10.2008 (Чт) 16:15

Word и номер таблицы.

Интересно кто как решает такую вещь: Определить номер таблицы, в которой находится курсор или что-нибудь выделено.
Я делаю это так: Определяю переменную-диапазон TmpRng as Word.Range. Присваиваю ему диапазон выделения. Проверяю номер стартовой или конечной ячейки в этом диапазоне — если ноль, то выход. Если нет, то расширяю диапазон до wdTable. Теперь TmpRng.Tables(1).ID — номер нужной таблицы. Может есть способ проще?


viter.alex
Бывалый
Бывалый
Аватара пользователя

 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal
  • Сайт
  • ICQ

Re: Word и номер таблицы.

Сообщение viter.alex » 25.06.2009 (Чт) 15:28

Что имеется ввиду под номером таблицы? Порядковый или ID?
Если порядковый, тогда одной строкой:

Код: Выделить всё
ActiveDocument.Range(ActiveDocument.Range.Start, Selection.Start).Tables.Count

Если ID, то тоже одной строкой, но чуть сложнее:

Код: Выделить всё
ActiveDocument.Tables(ActiveDocument.Range(ActiveDocument.Range.Start, Selection.Start).Tables.Count).ID

Лучше день потерять — потом за пять минут долететь!


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

 
Сообщения: 140
Зарегистрирован: 10.01.2007 (Ср) 21:58
Откуда: Волжский
  • ICQ

Re: Word и номер таблицы.

Сообщение dormouse » 25.06.2009 (Чт) 15:46

ну если номер таблицы ты таки определил, то я так понимаю, что проблема узнать, в таблице ли стоит курсор?
можно так:

Код: Выделить всё
If Selection.Information(wdWithInTable) = True Then
...

VBA, MSA97


GDK
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 23.10.2008 (Чт) 16:15

Re: Word и номер таблицы.

Сообщение GDK » 25.06.2009 (Чт) 18:08

Во как!
Значит ссылка на таблицу, будет выглядеть так:

Код: Выделить всё
Dim MyTabl as Word.Table
set MyTabl = ActiveDocument.Tables(ActiveDocument.Range(ActiveDocument.Range.Start, Selection.Start).Tables.Count)

Здорово одной строчкой. А я так не догодался. Теперь буду так делать.

А как делать проверку что курсор в таблице — это я знаю. Но всё равно спасибо за ответ.


Ципихович Эндрю
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 07.04.2010 (Ср) 17:19

Re: Word и номер таблицы.

Сообщение Ципихович Эндрю » 07.04.2010 (Ср) 19:39

Скажите кто знает эти решения оба верны?
Какакя между ими разница?
Номер_текущей_таблицы_где_находится_курсор = ActiveDocument.Range(ActiveDocument.Range.Start, Selection.Start).Tables.Count
Номер_текущей_таблицы_где_находится_курсор = ActiveDocument.Range(0, Selection.Tables(1).Range.End).Tables.Count


Ципихович Эндрю
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 07.04.2010 (Ср) 17:19

Re: Word и номер таблицы.

Сообщение Ципихович Эндрю » 07.04.2010 (Ср) 20:15

Посмотрел так получается это утверждение: Номер_таблицы_где_расположен_курсор = ActiveDocument.Range(ActiveDocument.Range.Start, Selection.Start).Tables.Count не верно всегда равно 0??


GDK
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 23.10.2008 (Чт) 16:15

Re: Word и номер таблицы.

Сообщение GDK » 08.04.2010 (Чт) 12:59

ActiveDocument.Range.Start — это начало документа, т.е. 0
Selection.Start — это начальная позиция в выделении.

Посмотрел так получается это утверждение: Номер_таблицы_где_расположен_курсор = ActiveDocument.Range(ActiveDocument.Range.Start, Selection.Start).Tables.Count не верно всегда равно 0??

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


Ципихович Эндрю
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 07.04.2010 (Ср) 17:19

Re: Word и номер таблицы.

Сообщение Ципихович Эндрю » 08.04.2010 (Чт) 17:54

Утверждение не верно и более добавить нечего
Номер_таблицы_где_расположен_курсор = ActiveDocument.Range(ActiveDocument.Range.Start, Selection.Start).Tables.Count
не может быть знак равенства в твете от 25.06.2009 (Чт) 18:28



Вернуться в VBA

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

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

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

Добрый день!
Ставлю курсор в таблицу и хочу узнать ее порядковый номер (ведь каждая таблица в документе имеет порядковый номер).
Как это можно сделать? Т.е. ставлю курсор в таблицу, нажимаю кнопку макроса и появляется окно: Таблица № такой-то.

Код к задаче: «Определение номера таблицы в Word»

textual

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

ActiveDocument.Range(ActiveDocument.Range.Start, Selection.Start).Tables.Count
 
ActiveDocument.Tables(ActiveDocument.Range(ActiveDocument.Range.Start, Selection.Start).Tables.Count).ID
 
ActiveDocument.Range(ActiveDocument.Content.Start, Selection.Range.End + 1).Tables.Count
 
Dim MyTabl as Word.Table
set MyTabl = ActiveDocument.Tables(ActiveDocument.Range(ActiveDocument.Range.Start, Selection.Start).Tables.Count)

Всем привет!
Подскажите, как можно решить такую задачу:
В Word в фоновом(!) режиме из Excel вставляю таблицу таким кодом:

Код
WD.Bookmarks("Таблица_1").Range.PasteExcelTable _
        LinkedToExcel:=False, _
        WordFormatting:=True, _
        RTF:=False


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

Код
WD.Tables(1).cell(i, j).Range.ParagraphFormat.Alignment = 1
WD.Tables(1).cell(i, j).Range.Cells.VerticalAlignment = 1

Возникает проблема, что номер таблицы привязан жестко, и он может быть не всегда 1. Возможно, что таблица вставляется в середину документа, и при этом уже есть другие таблицы в начале и в конце документа.

Как можно узнать номер таблицы, которую вставляю через PasteExcelTable или же, как сразу центрировать данные (и по вертикали и по горизонтали) во вставляемой таблице?

Метод Selection, применяемый к ActiveDocument не подходит, т.к. необходимо, чтобы Word был в фоновом режиме. Да и даже не в фоновом, что-то не особо получается…

Может быть как-то в объектную переменную эту создаваемую таблицу записывать и далее уже к объекту таблицы обращаться, но как это сделать не знаю!?

  • 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

Понравилась статья? Поделить с друзьями:
  • Как узнать номер таблиц word
  • Как узнать проценты в excel формула
  • Как узнать номер строки по значению в excel
  • Как узнать процентное соотношение между двумя числами в excel
  • Как узнать номер строки в excel формула