первый пост здесь, надеюсь, я все сделал правильно.
Контекст: Я пытаюсь переработать шаблон 2018 для вставки данных 2019.Шаблон состоит из нескольких защищенных таблиц данных (с паролем, установленным кем-то другим) и нескольких незащищенных графических листов.Эти графики в настоящее время ссылаются на соответствующий лист данных 2018.
Чтобы избавиться от защиты, я клонировал (через копию Pastespecial xlPasteall) защищенный лист.Часть моего кода (работающего и не разработанного ниже) состоит в создании нового листа, копировании / вставке данных из источника и переименовании листа с именем исходного листа + суффикс.В конечном счете, код также будет обрабатывать уничтожение исходного листа, если он устарел.
copySheet - источник данных 2018 года, unlockedSheet - источник данных 2019 года.Нет проблем при создании листа клона, ни один из них, имеющий клон, не наследует имя от комбинации copySheet.name & "суффикс".
Цель: Я пытаюсь сделать так, чтобы все графики ссылалиськ листу клона.Я хочу заменить = "nameOfTheSource"! [Range] на = "nameOfTheClone"! [Тот же диапазон] во всех исходных данных графика.
Поэтому я попытался создать макрос для поиска и замены ссылки на листв исходных данных, но мне трудно манипулировать свойствами ole объектов.Вот код:
Sub Copy2018()
Dim copySheet As Object, unlockedSheet As Object, graphSheet As Object, graph As OLEObject
For Each graphSheet In Sheets
For Each graph In graphSheet.OLEObjects
If graph.OLEType = xlOLELink Then
graph.SourceName = Replace(SourceName, copySheet.Name, unlockedSheet.Name)
End If
Next graph
Next
Код работает без ошибок, но ничего не делает.Как я уже упоминал, в конечном итоге будет несколько источников, и графики придется выбирать из правильного, но я думаю, что используя систему «clonename = sourcename + суффикс», я справлюсь с этим.
Непредмет, но у меня был другой подход: Могут быть альтернативы, такие как:
- замораживание формулы в диаграмме с помощью команды find = & replace '=
- для сохранения имениисточника
- подавить источник
- получить клон с тем же именем, что и источник (его имя хранится где-то до подавления листа)
- разморозить формулу на диаграммес находкой '= & replace =
Но у меня тоже не было результатов в этом смысле.Я действительно думаю, что неправильно использую свойства объектов Ole, так как знаю, что оба варианта работали бы с формулами в ячейках.
Не стесняйтесь, если у вас есть какие-либо вопросы / другие подходы.Спасибо за ваш мозг.
[ОБНОВЛЕНИЕ] Я прошел через Jon Peltier , результаты те же (код запускается без ошибок, но ничего не делает),В обоих случаях я попытался выполнить пошаговый запуск кода, и кажется, что цикл не учитывает последние 2 строки вложенных функций.Как только объект идентифицируется как объект graph / ole, код просто игнорирует эти строки и циклы, ничего не делая.