В настоящее время я копирую множество диаграмм из Excel в Word с помощью макроса. Я использовал функциональность Record Macro, которая помогла мне создать следующий код:
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
Так что я делаю, ставлю Return, добавляю таблицу с 2 строками и выравниваю первую строку по центру. Затем добавьте диаграмму, скопировав ее из Excel и вставив в Word. Сделайте некоторую переделку с формой (удаленной), выбрав ее (с помощью команды MoveLeft
) и, наконец, сдвиньте на 2 шага вниз (чтобы покинуть стол) и повторите для всех графиков.
Если я пройду через F8, я получу желаемый результат. Однако, если я просто позволю ему работать, я все время вижу другой результат, например:
- Выбор остается в таблице даже после команды
MoveDown
- Форма все еще выбирается после команды
MoveDown
- ошибка времени выполнения '4605': этот метод или свойство недоступны, поскольку объект ссылается на конец строки таблицы (из-за того, что выбор не был перемещен, а
Tables.Add
выполняется внутри предыдущей таблицы
- правильный результат
Мой вопрос:
Как я могу заставить его работать без необходимости вручную проходить макрос?
Использование Windows XP, Excel 2007 (12.0.65.62.5003). Обратите внимание, что эта проблема не работает в Windows 7 (не тестировалась в Windows Vista).