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

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

  • Посетитель форума
  • Сообщений: 12
Здравствуйте! Столкнулся со следующей проблемой.

Есть документ у которого два раздела с разными верхними колонтитулами. В первом разделе, в колонтитуле есть фигура с текстом, которую нужно скопировать в колонтитул второго раздела.
В Word 2010 у меня был код, который работал.
Спойлер
Application.ScreenUpdating = False
    'Запоминаем верхний колонтитул текущего раздела
    Set hHeaderRange = ActiveDocument.Sections(2).Headers(3).Range
    'Выбираем существующую версию штампа в первом разделе
    ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes.Item(1).Select
    'Копируем штамп
    Selection.Copy
    'Вставляем штамп в текущий раздел
    hHeaderRange.Paste
    Application.ScreenUpdating = True

Но в Word 2016 данный код выдает ошибку (см. вложение) на строке hHeaderRange.Paste

При нажатии кнопки End, Word падает и перезагружается с попыткой восстановить последнюю сохраненную версию документа.
Причем, если остановить код перед строкой hHeaderRange.Paste, то можно перейти в колонтитул второго раздела и нажать Вставить, и фигура вставится.

Скажите, пожалуйста, есть ли у кого-нибудь предположение, как решить эту проблему?

Задача простая, нужно скопировать фигуру из колонтитула одного раздела в колонтитул другого раздела.

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

  • Administrator
  • Сообщений: 2017
Написал вам два письма на почту с заголовком "Письмо с Форума по VBA, Excel и Word". Написал именно на почту, а не на форум.

Сначала надо разобраться, с какими колонтитулами вы работаете. Их есть три вида:
1) основной
2) колонтитул первой страницы раздела
3) колонтитул нечётной или чётной страницы

В этой строке упоминается колонтитул нечётной или чётной страницы:
Set hHeaderRange = ActiveDocument.Sections(2).Headers(3).Range

Но вы выложили файл, где во втором разделе основной колонтитул. Сейчас путаница.

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

  • Посетитель форума
  • Сообщений: 12
Здравствуйте!
Вы, наверное, имеете ввиду это перечисление - WdHeaderFooterIndex, я использовал разные варианты применения этих значений, это не помогло.
Как узнать, что колонтитул Основной?
Как узнать, что колонтитул нечётной или чётной страницы?
В чем разница?
Подскажите, пожалуйста, что нужно поменять в коде и документе, чтобы получилось скопировать фигуру из колонтитула первого раздела в колонтитул второго раздела?
Вы на какой версии Word пробовали этот код?

Самое странное, что Word падает после выполнения этой строки.

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

  • Administrator
  • Сообщений: 2017
Одно и то же писать в каждом ответе не надо. Я понял проблему.
Я сейчас обсуждаю детали.

Вы спрашиваете, как узнать вид колонтитула. А какой колонтитул вы хотите использовать в своём файле:
1) основной
2) первой страницы раздела
3) чётной / нечётной страницы

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

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

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

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

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

  • Administrator
  • Сообщений: 2017
Сначала вам надо разобраться в колонтитулах. Вам надо понять, какого вида колонтитулы в документах. Можете вы их менять или не можете. После этого уже дальше обсуждать.
Если не знаете, как понять, вид колонтитула, создайте на форуме тему: Как узнать вид колонтитула.

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

  • Посетитель форума
  • Сообщений: 12
Вы можете прислать пример документа, где реализовано то, что я хочу (с любыми колонтитулами)?

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

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

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

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

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

  • Administrator
  • Сообщений: 2017
Если колонтитул основной, то нужно указать соответствующую константу и код работает без ошибки:
'Запоминаем верхний колонтитул текущего раздела
Set hHeaderRange = ActiveDocument.Sections(2).Headers(wdHeaderFooterPrimary).Range

Почему была ошибка, я не знаю, я всех нюансов не знаю.

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

  • Посетитель форума
  • Сообщений: 12
Не помогло, такая же ошибка.
На какой версии Word Вы пробовали этот код?
У меня Word 2016 MSO (16.0.4266.1001), 64-разрядная версия.

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

  • Administrator
  • Сообщений: 2017
Покажите код, который вы использовали.

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

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

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

  • Administrator
  • Сообщений: 2017
Нужно показывать весь код, чтобы начиналось Sub и заканчивалось End Sub. Иначе у вас там ещё что-то может быть.