#vba #ms-word #copy-paste
#vba #ms-word #копировать-вставить
Вопрос:
В настоящее время я копирую множество диаграмм из Excel в Word с помощью макроса. Я использовал функциональность макроса записи, которая помогла мне создать следующий код:
Set charts = Sheets("Charts").ChartObjects
For Each chart In charts
WordApplication.Selection.TypeParagraph
WordApplication.ActiveDocument.Tables.Add Range:=WordApplication.Selection.Range, NumRows:=2, NumColumns:= _
1, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitFixed
With WordApplication.Selection.Tables(1)
If .Style <> "Table Grid" Then
.Style = "Table Grid"
End If
.ApplyStyleHeadingRows = True
.ApplyStyleLastRow = False
.ApplyStyleFirstColumn = True
.ApplyStyleLastColumn = False
.ApplyStyleRowBands = True
.ApplyStyleColumnBands = False
End With
WordApplication.Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
chart.Copy
WordApplication.Selection.Paste
WordApplication.Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
' configure the shape (resizing)
WordApplication.Selection.MoveDown Unit:=wdLine, Count:=2
Next
Итак, что я делаю, это возвращаю значение, добавляю таблицу с 2 строками и выравниваю первую строку по центру. Затем добавьте диаграмму, скопировав ее из Excel и вставив в Word. Немного поработайте с формой (удаленной), выбрав ее (с помощью MoveLeft
команды) и, наконец, переместитесь на 2 шага вниз (чтобы покинуть таблицу) и повторите для всех диаграмм.
Если я пройду через это с помощью F8, я получу желаемый результат. Однако, если я просто позволю ему работать, я все время вижу другой результат, например:
- Выделение остается в таблице даже после
MoveDown
команды - Фигура по-прежнему выбирается после
MoveDown
команды - ошибка времени выполнения ‘4605’: этот метод или свойство недоступны, поскольку объект ссылается на конец строки таблицы (из-за того, что выделение не перемещается и
Tables.Add
выполняется внутри предыдущей таблицы - правильный результат
Мой вопрос:
Как я могу заставить его работать без необходимости вручную выполнять макрос?
Использование Windows XP, Excel 2007 (12.0.65.62.5003). Обратите внимание, что проблема не ведет себя так же в Windows 7 (не тестировалась в Windows Vista).
Ответ №1:
Кажется, последняя строка не всегда оставляла таблицу, которую я вставил. Я заменил следующую строку:
WordApplication.Selection.MoveDown Unit:=wdLine, Count:=2
с помощью этого
Do Until Not WordApplication.Selection.Information(wdWithInTable)
WordApplication.Selection.MoveRight Unit:=wdCharacter, Count:=1
Loop
И теперь все работает так, как должно