概要-
あるExcel画像オブジェクトに埋め込まれた画像(.png形式)を別の既存の画像にコピー(画像データを上書き)する必要がありますが、ターゲットの図形のIDとフィールド(位置、可視性、サイズ、タイトルなど)はそのままにします。これは、ActiveX OLEObjectsではなく、単純な画像を使用したものです。
状況:
私はWindows7、Excel2010を使用しています。
UIに複数の画像オブジェクトを含むシートがあります。
ユーザーの設定によっては、表示される画像を頻繁に変更する必要があります。トリガーなどをすべて設定しました。
場合によっては、1つの図形で複数の異なる画像の1つを表示する必要があります。「ライブラリ」画像(別の形に埋め込まれ、ユーザーには表示されない)からその宛先に画像データをコピーしたいのですが、画像オブジェクトを入れ替えるだけで回避できます。
ただし、UIの複数の図形は、一意のデータ(名前、ID、サイズ、可視性、タイトルなど)を保持している場合でも、同じ画像を表示する必要がある場合があります。その「スワップ」トリックは法外なものです。UIのインスタンスごとに1つずつ、すべての「ライブラリ」オブジェクトのコピーを50個作成する必要があります。
DESIDERATUM:
ですから、私がやりたいのは、それらの画像のライブラリコピーを1つだけ持っていて、その画像をUIに統合されている画像オブジェクトにコピーできるようにすることです。
問題:
これを行う方法が見つかりません。
画像オブジェクトの「画像」部分に対応するVBAデータ構造内のフィールドが見つかりません。
CopyPicture()、次にPaste()は、Paste()の宛先がアドレス(例:Range( "A1"))の場合にのみ機能するように見え、新しい画像オブジェクトを作成します。しかし、新しいオブジェクトは必要ありません。また、セルに貼り付けたくありません。既存の画像オブジェクトの画像データを別の画像オブジェクトの画像データで上書きしたい。
Duplicate()および同様のルーチンは、上記のバリエーションであり、新しい画像オブジェクトを作成します。画像データを変更しようとしている既存のオブジェクト、宛先オブジェクトに関連付けられた特定のイベントなどがあるため、毎回新しく作成されたオブジェクトに置き換えるのではなく、画像を変更する必要があります。
LoadPicture()-クリップボードではなくハードドライブを経由します(低速であるため、あまり望ましくありません)は、シェイプオブジェクトでは機能しないようで、OLEObjectsのみで機能するようです。これらすべての画像オブジェクトをActiveX画像に変更する必要がありますか?これは、静止画のオーバーヘッドが非常に大きくなります。そして、ディスクの読み取りと書き込みがすべてシートを著しく停止させることを期待しています。
ActiveX-これらの画像オブジェクトをactiveX画像オブジェクトに変更し、次に「ライブラリ」オブジェクトを変更してから、割り当て(Shapes( "Name")。DrawingObject.Object.Picture = Shape( "Library")。DrawingObject.Objectを使用できます。 。写真)。[このアプローチは、ここでのアプローチに沿ったものです-Excel VBA:画像コントロールからActiveXオブジェクトへの画像のコピー]自分の状況でそれを機能させることができるかどうかはわかりません。Shape / Picturesにはある特性と機能を利用するためにUIの多くをすでに設計しているだけでなく、OLEObjectsにはない機能(3Dフォーマットや画像オブジェクトでの「塗りつぶし」の特定の方法など)だけでなく、OLEObjectsの操作も可能です。著しく私の実装では、単純な画像を操作するよりも遅く、ユーザーを苛立たせます。(これが、開発の初期段階でOLEObjectsの使用をやめた主な理由の1つです。]
基本的に、画像オブジェクトを右クリックしたときに表示される「画像の変更」コマンドと同等のコマンドを実行したいと思います(ただし、ディスク上のファイルからではなく、別の画像オブジェクトまたは必要に応じてクリップボードから画像データを取得する場合を除く)。 。しかし、そのアクションのマクロを記録すると、空になります。「画像の変更」ではマクロコードは生成されないようです。
たくさんのWeb検索とドキュメントブラウジングは他に何も見つかりませんでした。
ええと....助けますか?