Копирование диаграмм из Excel в word — неопределенное поведение

#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
  

И теперь все работает так, как должно