Ципихович Эндрю 1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
||||||||||||
1 |
||||||||||||
03.02.2011, 21:19. Показов 12837. Ответов 47 Метки нет (Все метки)
номер таблицы Ворд где расположен курсор узнаю так:
но если есть объект
тогда пытаюсь узнать так:
но выделает:.Range, как же узнать? Спасибо
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
03.02.2011, 21:19 |
47 |
Заблокирован |
|
04.02.2011, 08:36 |
2 |
создаём новый экземпляр приложения просто вопрос у меня — зачем создавать новый экземпляр приложения?
0 |
Ципихович Эндрю 1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
||||
04.02.2011, 16:23 [ТС] |
3 |
|||
просто создал объект WordApp и потом кнему обращаюсь:
дают сбой, может Вы и правы, что не так надо делать??
0 |
Заблокирован |
|
04.02.2011, 17:33 |
4 |
что не так надо делать?? не знаю, я просто спросил.
0 |
1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
|
04.02.2011, 17:51 [ТС] |
5 |
тут ответ такой
0 |
Заблокирован |
|
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 |
давайте это выясним, надо создать объект-документ, что-то вроде этого: Добавлено через 2 минуты
0 |
Заблокирован |
|
04.02.2011, 18:18 |
8 |
надо создать объект-документ прежде, чем что-то создавать, надо знать, зачем это создавать. Я не вижу цели делать то действие, которое вы делаете.
0 |
1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
|
04.02.2011, 18:23 [ТС] |
9 |
ЦЕЛЬ:
0 |
Заблокирован |
|
04.02.2011, 18:52 |
10 |
Ципихович Эндрю,
0 |
Ципихович Эндрю 1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
||||
04.02.2011, 19:27 [ТС] |
11 |
|||
идет поиск слова в файле, там сейчас одна таблица, после того как слово найдено пишу:
но потом вдруг добавлю еще таблицу так чтобы не париться всё сразу выяснить, какая таблица, какая строка в таблице
0 |
ironegg 1904 / 781 / 31 Регистрация: 11.02.2010 Сообщений: 1,567 |
||||
04.02.2011, 23:45 |
12 |
|||
НУЖНО
0 |
1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
|
05.02.2011, 09:02 [ТС] |
13 |
НУЖНО нужный мне документ Добавлено через 56 минут
0 |
Заблокирован |
|
05.02.2011, 09:06 |
14 |
Documents(«Toy Store Newsletter.doc») а что здесь?
0 |
1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
|
05.02.2011, 10:50 [ТС] |
15 |
не понял вопроса — а что здесь?
0 |
Заблокирован |
|
05.02.2011, 10:58 |
16 |
Ципихович Эндрю,
0 |
Ципихович Эндрю 1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
||||
05.02.2011, 11:42 [ТС] |
17 |
|||
У вас в момент выполнения макроса не открыт документ 1.doc КАК же он не открыт, когда макрос сам его открывает:
0 |
Заблокирован |
|
05.02.2011, 11:48 |
18 |
Ципихович Эндрю,
0 |
1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
|
05.02.2011, 11:53 [ТС] |
19 |
1.док образно сказал, чтобы короче
0 |
Заблокирован |
|
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 = ActiveDocumentfile = 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 SubThis 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
-
Edited by
-
«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
-
Marked as answer by
-
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
-
Marked as answer by