复制图像-Excel VBA



概要-

我需要将嵌入一个Excel图片对象中的图像(.png格式(复制到另一个现有图片中(覆盖其图像数据(,同时保持目标形状的标识和字段(位置、可见性、大小、标题等(不变。这是简单的图片,而不是ActiveX OLEObjects。


情况:

我使用的是Windows 7,Excel 2010。

我有一张在UI中有多个图片对象的工作表。

根据用户的设置,显示的图片需要频繁更改。我已经设置好了触发等等。

有时,单个形状需要显示几个不同图片中的一个。我只想将图片数据从"库"图片(嵌入另一个形状,对用户隐藏(复制到那个目的地,但我可以通过简单地交换图片对象来解决这个问题。

然而,有时UI中的多个形状需要显示相同的图像,即使保留了它们的唯一数据(名称、id、大小、可见性、标题等(。这方面的"交换"技巧令人望而却步——我必须为每个"库"对象创建50个副本,为可能需要呈现的UI中的每个实例创建一个副本。


DESIDERATUM:

因此,我想做的是简单地拥有这些图片的一个库副本,并能够将该图像复制到集成到UI中的图片对象中。


问题:

我不知道该怎么做。

在VBA数据结构中找不到与图片对象的"图像"部分相对应的任何字段。

只有当粘贴((的目的地是一个地址(例如Range("A1"((,然后它创建一个新的图片对象时,CopyPicture((和Paste((才会显示工作。但我不想要新对象,也不想粘贴到单元格中。我想用另一个图片对象的图像数据覆盖现有图片对象的图片数据。

Duplicate((和类似的例程是上面的变体-它们创建了一个新的图片对象。我有特定的事件等与现有对象,目标对象,我试图更改其图像数据,所以我必须更改图像,而不是每次都用一些新创建的对象替换它。

LoadPicture((-它通过硬盘而不是剪贴板(速度较慢,因此不太理想(似乎不适用于形状对象,只有OLEObjects。我是否必须将所有这些图片对象更改为ActiveX图像?对于静态图片来说,这是一大笔开销!我希望所有的磁盘读取&书写会使纸明显地陷入泥沼。

ActiveX-我可以将这些图片对象更改为ActiveX图像对象,然后更改"库"对象,然后使用赋值(Shapes("Name"((。DrawingObject。对象Picture=形状("库"(。DrawingObject。对象图片(。[这种方法与这里的方法类似-Excel VBA:将图片从图像控件复制到activeX对象]我不确定我能不能满足我的情况。我不仅已经设计了很多UI来利用Shape/Pictures和OLEObjects所没有的特性和功能(例如3d格式和图片对象上"填充"的特殊方式(,而且操作OLEObject明显比操作简单图片慢,在我的实现中,这足以让用户感到沮丧。(这也是我在早期开发阶段放弃使用OLEObjects的主要原因之一。(


从本质上讲,我想做与右键单击图片对象时获得的"更改图片"命令等效的操作(除了从另一个图片对象或剪贴板(如有必要(获取图像数据,而不是从磁盘上的文件(。但当我录制该动作的宏时,它会显示为空——显然"更改图片"不会生成任何宏代码。

一大堆的网络搜索和文档浏览都没有发现其他任何东西。


嗯。。。。帮助

我不想这么说,但我认为你在这件事上把自己画成了一个角落。Excel的对象不支持以您描述的方式修改图片数据,这意味着在工作表打开时无法进行这些更改。即使您知道如何对原始文件进行更改,它也不能满足您的UI需求。

你的变通方法可能是你最好的(基于Excel的(答案。

最新更新