Возникает проблема, что номер таблицы привязан жестко, и он может быть не всегда 1. Возможно, что таблица вставляется в середину документа, и при этом уже есть другие таблицы в начале и в конце документа.
Как можно узнать номер таблицы, которую вставляю через PasteExcelTable или же, как сразу центрировать данные (и по вертикали и по горизонтали) во вставляемой таблице?
Метод Selection, применяемый к ActiveDocument не подходит, т.к. необходимо, чтобы Word был в фоновом режиме. Да и даже не в фоновом, что-то не особо получается...
Может быть как-то в объектную переменную эту создаваемую таблицу записывать и далее уже к объекту таблицы обращаться, но как это сделать не знаю!?
Борис13 написал: Может быть как-то в объектную переменную эту создаваемую таблицу записывать
Можно проще - задать идентификатор созданной таблицы
Код
Public Sub test()
Dim pWord As Object, pDoc As Object, docRange As Object
Set pWord = CreateObject("Word.Application")
pWord.Visible = True
Set pDoc = pWord.Documents.Open("C:\Temp\0470616.docx")
Set docRange = pDoc.Bookmarks("my").Range
ActiveSheet.Range("A1:B3").Copy
docRange.PasteExcelTable False, True, False
docRange.Tables(1).ID = "myInsertId"
End Sub
Видимо из-за того, что в docRange. записано ...Bookmarks("my").Range, а после вставки таблицы Bookmarks("my") исчезает. Либо мои суждения не верны, но в любом случае возникает ошибка.
И как потом обратиться к нужной таблице? Так:
Код
Dim RowCount As Integer
RowCount = docRange.Tables(1).ID("myInsertId").Rows.Count
Борис13, я правильно понимаю, что вы программируете методом волшебных заклинаний? Тестовый документ приложил. Не забудьте положить в папку c:\temp.
Цитата
Борис13 написал: И как потом обратиться к нужной таблице?
Можете сразу с не работать, например
Код
Debug.Print docRange.Tables(1).Rows.Count
'Or
Dim pTable As Object
Set pTable = docRange.Tables(1)
Debug.Print pTable.Rows.Count
Или найти её среди таблиц документа (надеюсь вы не вставляете таблицу в таблицу или иной объект).
Код
Dim pTable As Object, foundTable As Object
Set foundTable = Nothing
For Each pTable In pDoc.Tables
If pTable.ID = "myInsertId" Then
Set foundTable = pTable
Exit For
End If
Next
If Not foundTable Is Nothing Then
Debug.Print foundTable.Rows.Count
End If
Андрей VG, возможно некая доля заклинаний в моем подходе и присутствует, но я и не программист, а экономист, так что простительно)) Спасибо за внимание к моему вопросу. Ваш код работает без проблем, но у меня почему-то пару раз возникала ошибка, хотя вроде бы все прописал правильно. Видимо, что-то все-таки было неверно. Плохо, что не сумел явным образом определить где возникала ошибка (опять "заклинания")). Но все равно заметил определенную разницу в работе наших файлов: На изображении состояние Закладок в Word сразу после вставки таблицы - почему то ее название перезатирается на диапазон, а в ваших файлах название закладки остается.