SkyFlyStaR 1 / 1 / 0 Регистрация: 16.10.2011 Сообщений: 69 |
||||
1 |
||||
18.04.2014, 15:50. Показов 5614. Ответов 2 Метки нет (Все метки)
Есть документ, содержащий 2 заполненные таблицы
Если параметр в Tables равен 1, то таблица находится и обрабатывается без проблем, иначе появляется ошибка 5941 «Запрашиваемый номер семейства не существует», не понимаю в чем проблема
0 |
shanemac51 Модератор 11343 / 4661 / 749 Регистрация: 07.08.2010 Сообщений: 13,512 Записей в блоге: 4 |
||||
18.04.2014, 16:02 |
2 |
|||
1 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||||||||||
18.04.2014, 16:22 |
3 |
|||||||||||
Сообщение было отмечено SkyFlyStaR как решение РешениеКоллеги,
это то же самое, что
Добавлено через 4 минуты
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 = 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
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
Похожие ответы
- Макрос поиска одного из указанных символов в Word
- Макрос поиска и замены дат в документе Word
- Word Поиск таблицы в документе
- Word: макрос для таблиц. Отформатировать определенный вид таблиц
- Макрос в Excel, использующий Word
- Создать таблицу в Word и заполнить её данными из массива
- Перенос таблицы из Word в Excel
- Создание нескольких таблиц в Word
- Как объединить ячейки таблицы в Word, обращаясь к ним по свойству Cell (n, m)
- Как изменить размер изображения, вставленного в ячейку таблицы MS Word?
- Импорт данных из 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