Excel VBA - Изменить исходные данные для графиков - PullRequest
0 голосов
/ 19 марта 2019

первый пост здесь, надеюсь, я все сделал правильно.

Контекст: Я пытаюсь переработать шаблон 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, код просто игнорирует эти строки и циклы, ничего не делая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...