Автор Тема: Ошибка при копировании фигуры в колонтитул (Method 'PasteSpecial' of object 'Range' failed (80010108))  (Прочитано 743 раз)

Оффлайн Посетитель 09.02.2022

  • Посетитель форума
  • Сообщений: 12
Вот:
Спойлер
Sub TEST()
    'Запоминаем верхний колонтитул текущего раздела
    Set hHeaderRange = ActiveDocument.Sections(2).Headers(3).Range
    'Выбираем существующую версию штампа во втором разделе
    ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes.Item(1).Select
    'Копируем штамп
    Selection.Copy
    'Вставляем штамп в текущий раздел
    hHeaderRange.Paste
End Sub

Оффлайн Администратор

  • Administrator
  • Сообщений: 2066
В вашем коде первый пункт другой, чем я вам предложил.

Оффлайн Посетитель 09.02.2022

  • Посетитель форума
  • Сообщений: 12
Прошу прощения, после очередного теста, Word грохнул все модули в файле, открыл старый.
С вашей строчкой, как раз и пробовал)
Сейчас еще раз попробовал вот этот код:
Спойлер
Sub TEST()
    'Запоминаем верхний колонтитул текущего раздела
    Set hHeaderRange = ActiveDocument.Sections(2).Headers(wdHeaderFooterPrimary).Range
    'Выбираем существующую версию штампа во втором разделе
    ActiveDocument.Sections(1).Headers(2).Shapes.Item(1).Select
    'Копируем штамп
    Selection.Copy
    'Вставляем штамп в текущий раздел
    hHeaderRange.Paste
End Sub

Оффлайн Администратор

  • Administrator
  • Сообщений: 2066
Вы эту строку ещё заменили и мне об этом не сообщили:
'Выбираем существующую версию штампа в первом разделе
ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes.Item(1).Select

Оффлайн Посетитель 09.02.2022

  • Посетитель форума
  • Сообщений: 12
Я пробовал и так и так, результат один.
Согласно документации, первый вариант не подходит.

Оффлайн Администратор

  • Administrator
  • Сообщений: 2066
Выложите на форуме исправленный код, в котором заменена только одна строка, которую я указал.
Перед тем как выложить, ещё раз его запустите, чтобы убедиться, что есть ошибка.

Цитата:
Согласно документации, первый вариант не подходит.

Не понял вас. Какой первый вариант не подходит? Что за первый вариант?

Оффлайн Посетитель 09.02.2022

  • Посетитель форума
  • Сообщений: 12
Скачал приложенный файл из первого сообщения.
Заменил всю строку, на которую Вы указали.
Запустил.
Получил ошибку.
Вот тот код:
Спойлер
Sub TEST()
    'Запоминаем верхний колонтитул текущего раздела
    Set hHeaderRange = ActiveDocument.Sections(2).Headers(wdHeaderFooterPrimary).Range
    'Выбираем существующую версию штампа во втором разделе
    ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes.Item(1).Select
    'Копируем штамп
    Selection.Copy
    'Вставляем штамп в текущий раздел
    hHeaderRange.Paste
End Sub
Могу приложить файл, надо?

В моем первом сообщении, в строке ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes.Item(1).Select используется параметр wdHeaderFooterPrimary, согласно документации он - Возвращает верхний или нижний колонтитул на всех страницах, кроме первой страницы документа или раздела, а я и копирую фигуру с первой страницы первого раздела.

Хотя в Word 2010 проблем не было.

Оффлайн Администратор

  • Administrator
  • Сообщений: 2066
Попробуйте этот код. Почему ваша версия не работает, я не знаю, - я нюансы не знаю. Просто подобрал другой код. Возможно конфликт был в том, что действия делаются в колонтитуле (происходит выделение рисунка), а колонтитулы не активны.

Sub Макрос()
   
    If ActiveWindow.View.Type <> wdPrintView Then
        MsgBox "Перейдите в режим ""Разметка страницы"".", vbExclamation
        Exit Sub
    End If
   
    ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes(1).Select
    Selection.Copy
    ActiveDocument.Sections(2).Headers(wdHeaderFooterPrimary).Range.Paste
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument

End Sub

Оффлайн Посетитель 09.02.2022

  • Посетитель форума
  • Сообщений: 12
Спасибо за ответ!
Полностью скопировал Ваш код в свой файл Пример, но это не помогло, такая же проблема, правда ошибка не появляется, просто падает Word.
Я думаю, что проблема, с версией Word.
Скажите, пожалуйста, на какой версии Word Вы тестировали?

Оффлайн Администратор

  • Administrator
  • Сообщений: 2066
да, у меня тоже ошибка произошла, сначала не было, а теперь стала
подумаю, что можно ещё придумать

Оффлайн Администратор

  • Administrator
  • Сообщений: 2066
Новая версия. Смысл в том, что макрос будет делать такие же действия, как пользователь: перейдёт в первый раздел, зайдёт в верхней колонтитул, скопирует рисунок, перейдёт в колонтитул следующего раздела, вставит рисунок.

Макрос
Sub СкопироватьРисунокКолонтитула()

    '1. Проверка, что режим "Разметка страницы", т.к. этот режим нужен для "SeekView".
    If ActiveWindow.View.Type <> wdPrintView Then
        MsgBox "Перейдите в режим ""Разметка страницы"".", vbExclamation
        Exit Sub
    End If
   
    '2. Переход в основной текст, чтобы перейти к первому разделу.
    If ActiveWindow.View.SeekView <> wdSeekMainDocument Then
        ActiveWindow.View.SeekView = wdSeekMainDocument
    End If
   
    '3. Копирование рисунка из первого раздела во второй.
    ' Переход в первый раздел.
    Selection.GoTo What:=wdGoToSection, Which:=wdGoToAbsolute, Count:=1
    ' Вход в верхний колонтитул.
    ActiveWindow.View.SeekView = wdSeekPrimaryHeader
    ' Выбор и копирование рисунка.
    Selection.HeaderFooter.Range.ShapeRange(1).Select: Selection.Copy
    ' Переход в колонтитул следующего раздела.
    ActiveWindow.ActivePane.View.NextHeaderFooter
    ' Вставка скопированного рисунка.
    Selection.Paste
    ' Выход из колонтитула в основной текст.
    ActiveWindow.View.SeekView = wdSeekMainDocument
   
    '4. Очистка буфера обмена, чтобы при закрытии Ворда не было сообщения,
        ' предлагающего сохранить рисунок, который находится в буфере обмена.
    ActiveDocument.Characters(1).Copy

End Sub