9

Shapes.AddPicture(...) メソッドを使用して Excel ワークシートに画像を挿入すると、Excel は自動的に「画像 1」、「画像 2」などの名前を付けます。

この名前は、Shapes.Item("Picture 1") のような Shapes コレクション内のこのシェイプ オブジェクトへの参照を取得するために使用できます。名前ボックスを使用して Excel で名前を変更した場合、Shape オブジェクトを参照できる 2 つの異なる名前 (またはそのうちの 1 つがキー/キャプション) があります。したがって、名前を「MyPic」に変更すると、これらのいずれかを使用して Shapes コレクション内の形状を参照できます。

Shapes.Item("Picture 1")
OR
Shapes.Item("MyPic")

名前は VBA の Shape.Name プロパティを使用してアクセスできますが、内部で変更されないように見える他の値 (MyPic) にアクセスするにはどうすればよいでしょうか?

UPDATED
私がやろうとしているのは、セルをExcelの写真にリンクすることです。セルのコメントに画像データを保管しています。シナリオは次のとおりです。

  1. 画像名 (外部名) を保持すると、同じワークシートに構造をコピーして貼り付けると、名前が複製され、セルは同じ構造を指します。
  2. 内部名を保持すると、同じ内部名が同じワークブック内の他のワークシートに存在する可能性があるため、他のワークシートにコピーして貼り付けると問題が発生します。
  3. IDを取得すると、そこから写真の参照を取得できなくなります

私にとって、内部名を取得することは重要です。Shape 参照がありますが、この参照から内部名を取得する方法がわかりません。

4

1 に答える 1

8

シェイプをワークシート (oSht) に追加した直後に、それを使用oSht.Shapes(Osht.Shapes.count)して参照できます。だから、oSht.Shapes(osht.shapes.count).Nameあなたにその名前を与えます。

Shapes コレクション内の図形のインデックスを検索する必要があり、その名前がわかっている場合は、Shapes.Nameそれが見つかるまでループする必要があります。インデックスがわかっている場合は、"Picture n" 代替名を作成するか、"Picture n" 代替名を格納できます。また、シェイプの ID プロパティを格納し、Shapes コレクションが見つかるまでループしてシェイプを参照することもできます。Shape.ID

ユーザーが形状を別のシートに移動して名前を変更した場合、外部名、代替名、形状インデックス、および ID がすべて異なるため、元の形状として識別する方法はありません。したがって、これがシナリオの問題である場合は、シャドウ コピーまたはシート保護を検討する必要があります。

于 2010-09-19T16:45:13.783 に答える