私はExcelでマクロ/ VBAを素人っぽくまとめています。これには、別の言語の凡例である画像をSource.xlsxからコピーし、それをDestination.xlsxに貼り付けることが含まれます。画像はそれだけで、チャート内のオブジェクトではなくなりました。
以下のコードは機能します。ただし、現在、Destination.xlsxの古いxlamLegendGroupを置き換えるように、新しい画像を配置しようとしています。現在、近くのセル( "AO6")に貼り付けて、手動で移動しています。
私の問題は、Destination.xlsxに入ると画像を選択できないことです。可能であれば、これらのX値とY値をVBAに含める方法を考え出すことができると確信しています。
ネームマネージャーを使用して名前を付けようとしましたが、コードが認識しません。選択中にVBAで名前を付けようとしましたが、エラーや間違ったメソッドなどが表示されます(私が言ったように、VBAのアマチュアレベルの理解)
このネーミングを解決してから問題を再選択するのを手伝ってくれる人がいれば、大いに感謝します。
酸っぱいワークブックから画像をコピーします。シート上の唯一の画像なので、この方法で選択できます
Workbooks("MyWkbSource.xlsx").Sheets("LEGEND_AVG").Activate
ActiveSheet.DrawingObjects.Select
Selection.Copy
宛先ワークブックをアクティブにして、画像を貼り付けます。これは、削除しようとしている画像に合わせて(上部の中央に配置して)配置したい場所です。
Workbooks(MyWkbDestination.xlsx").Sheets("AVG").Activate
ActiveSheet.Range("AO6").Select
ActiveSheet.Paste
既存の古い画像を選択して削除します
ActiveSheet.Shapes.Range(Array("xlamLegendGroup")).Select
Selection.Delete
画像を貼り付けると、_Picture #
_という名前が付けられる可能性があります。アイテムがすでに存在する場合は、#が1ずつ増加します。
そのため、最初に貼り付ける画像は_Picture 1
_という名前にする必要があります。現在ドキュメントにある画像の名前は、次のコマンドで確認できます。
_For Each Shape In ActiveSheet.DrawingObjects
MsgBox Shape.Name
Next
_
これはそれぞれをループし、メッセージボックスに表示します。
オブジェクトを貼り付けるだけなので、同じスイープでオブジェクトを操作するのは簡単ではありません。上記のループを使用して最後の_Picture #
_を見つけると、次に貼り付けられるのは#+ 1であり、ActiveSheet.Shapes.Range(Array("Picture #+1")).Name
を使用して必要に応じて名前を変更できることがわかります。
_.Top
_と_.Left
_を使用して、必要に応じて画像を移動したり、サイズを変更する必要がある場合は_.Height
_と_.Width
_を使用したりすることもできます。
単一のオブジェクトをコピーするときはいつでも(Shapeなど)あるシートから別のシートに、またはあるワークブックから別のワークブックにコピーするときはいつでも、。Countの場所を調べることで宛先オブジェクトを参照できます。 。例えば:
Sub CopyShape()
Dim sh1 As Worksheet, sh2 As Worksheet
Dim shp1 As Shape, shp2 As Shape
Set sh1 = Sheets("Sheet1")
Set sh2 = Sheets("Sheet2")
Set shp1 = sh1.Shapes(1)
shp1.Copy
sh2.Paste
Set shp2 = sh2.Shapes(sh2.Shapes.Count)
shp2.Name = "Most recent Shape on Sheet2"
End Sub
コピーが完了すると、宛先に配置された最新の図形が、その宛先の図形のリストの最後に表示されます。
カスタマイズした名前で図形に名前を付けるだけです。名前の後の数字は避けてください。
例:Rectangle1を> MyRectangleに変更します