Копировать диаграммы из Excel в слово - неопределенное поведение - PullRequest
0 голосов
/ 25 октября 2011

В настоящее время я копирую множество диаграмм из 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).

1 Ответ

1 голос
/ 25 октября 2011

Кажется, последняя строка не всегда покидала таблицу, которую я вставил. Я заменил следующую строку:

WordApplication.Selection.MoveDown Unit:=wdLine, Count:=2

с этим

Do Until Not WordApplication.Selection.Information(wdWithInTable)
    WordApplication.Selection.MoveRight Unit:=wdCharacter, Count:=1
Loop

А теперь работает как надо

...