Подтвердить что ты не робот

Копирование изображения - Excel VBA

СИНТАКСИС -

Мне нужно скопировать изображение (формат .png), встроенное в один объект изображения Excel, в другое существующее изображение (перезаписывая его данные изображения), оставив неповрежденным идентификатор целевой области и поля (положение, видимость, размер, название и т.д.).). Это простые фотографии, а не ActiveX OLEObjects.


СИТУАЦИЯ:

Я нахожусь в Windows 7, Excel 2010.

У меня есть лист с несколькими объектами изображения в пользовательском интерфейсе.

В зависимости от пользовательских настроек отображаемые изображения должны часто меняться. У меня есть запуск и т.д. Все настроено.

Иногда одной фигуре нужно отображать одно из нескольких разных изображений. Я хотел бы просто скопировать данные изображения из изображения библиотеки (вложенные в другую фигуру, скрытые от пользователя) до этого места назначения, но я могу обойти это, просто перебирая объекты изображения. p >

Однако иногда несколько элементов в пользовательском интерфейсе должны отображать одно и то же изображение, даже сохраняя при этом свои уникальные данные (имя, идентификатор, размер, видимость, название и т.д.). Уловка "swap" на этом запретительна - мне пришлось бы создать пятьдесят экземпляров каждого отдельного "библиотечного" объекта, по одному для каждого экземпляра пользовательского интерфейса, который может потребоваться для этого внешнего вида.


дезидерат:

Итак, я хотел бы просто иметь одну библиотечную копию этих изображений и иметь возможность копировать это изображение в объекты изображения, которые интегрированы в пользовательский интерфейс.


ПРОБЛЕМА:

Я не могу найти, как это сделать.

Я не могу найти ни одного поля в структурах данных VBA, которое соответствует части "изображения" объекта изображения.

CopyPicture(), а затем Paste(), похоже, работает только тогда, когда назначение для Paste() является адресом (например, Range ( "A1" )), а затем создает новый объект изображения. Но я не хочу новый объект, и я не хочу вставлять его в ячейку. Я хочу перезаписать данные изображения существующего объекта изображения с данными изображения другого объекта изображения.

Duplicate() и подобные подпрограммы являются вариантами выше - они создают новый объект изображения. У меня есть определенные события и т.д., Привязанные к существующему объекту, целевому объекту, чьи данные изображения я пытаюсь изменить, поэтому я должен изменить его образ, а не заменять его каким-либо вновь созданным объектом каждый раз.

LoadPicture() - который проходит через жесткий диск, а не в буфер обмена (медленнее и, следовательно, менее желателен), похоже, не работает на объектах формы, а только в OLEObjects. Должен ли я изменить все эти объекты изображения на изображения ActiveX? Это много накладных расходов на статические фотографии! И я ожидаю, что все, что чтение и запись на диске будет плохо пробивать лист.

ActiveX - я мог бы изменить эти объекты изображения в объекты образа ActiveX, затем изменить объекты библиотеки, а затем использовать назначение (Shapes ( "Name" ). DrawingObject.Object.Picture = Shape ( "Библиотека" ). DrawingObject.Object.Picture). [Этот подход в соответствии с подходом здесь - Excel VBA: копирование изображений с элементов управления изображением на объекты ActiveX] Я не уверен, что смогу сделать эту работу для своих ситуация. Я не только разработал большую часть пользовательского интерфейса, чтобы воспользоваться характеристиками и функциональными возможностями, которые имеют Shape/Pictures, а OLEObjects нет (например, форматирование 3D и конкретный способ "заполнять" работает на объекте изображения), но также манипулирование OLEObjects заметно медленнее, чем манипулировать простыми изображениями, достаточно, в моей реализации, чтобы разочаровать пользователя. (Это одна из основных причин, по которым я отказался от использования OLEObjects на более ранней стадии разработки.]


По сути, я хочу сделать эквивалент команды "Изменить изображение", получаемой при щелчке правой кнопкой мыши на объекте изображения (за исключением получения данных изображения из другого объекта изображения или, если необходимо, буфера обмена, а не из файла на диске). Но когда я записываю макрос этого действия, он становится пустым - видимо, "Change Picture" не создает никакого макрокода.

Целая группа веб-поиска и просмотра документации больше ничего не обнаружила.


um.... help?

4b9b3361

Ответ 1

Ненавижу говорить об этом, но я думаю, вы нарисовали себя в углу на этом. Объекты Excel не поддерживают изменение данных изображения так, как вы описываете, а это означает, что вы не можете делать эти изменения, пока лист открыт. Даже если вы выяснили, как внести изменения в необработанный файл, он не удовлетворяет вашим требованиям пользовательского интерфейса.

Ваш подход к работе - это, вероятно, ваш лучший (на основе Excel) ответ.