我在单元格(3,1)中有一个图像,并希望将图像移动到单元格(1,1)中。
我有这段代码:
ActiveSheet.Cells(1, 1).Value = ActiveSheet.Cells(3, 1).Value
ActiveSheet.Cells(3, 1).Value = ""
但是,对于包含图像的单元格,单元格值似乎为空,因此不会移动图像,也不会删除单元格(3,1)中的图像。当我运行代码的特定位时,什么都没发生。
非常感谢任何帮助。
感谢。
答案 0 :(得分:7)
您的代码的部分问题在于您将图像视为单元格的值。但是,尽管图像可能看起来在单元格中,但实际上并不是单元格的值。
要移动图片,您可以相对(使用Shape.IncrementLeft
或Shape.IncrementRight
),或者您可以绝对(通过设置) Shape.Left
和Shape.Top
)的值。
在下面的示例中,我演示了如何将形状移动到新的绝对位置,无论是否保持原始单元格的原始缩进(如果您没有保留原始缩进,这就像设置Top
的{{1}}和Left
值等于目标Shape
的值。
此过程采用形状名称(您可以通过多种方式找到形状名称;我这样做的方式是记录宏,然后单击形状并移动它以查看它生成的代码),目标地址(例如Range
和(可选)一个布尔值,指示是否要保留原始缩进偏移量。
"A1"
注意:我以非常实用的方式编写代码。如果您想“清理”此代码,最好将功能放在对象中。希望它能帮助读者理解形状在Excel中的工作方式。
答案 1 :(得分:3)
快速而肮脏的方式:
Public Sub Example()
MoveShape ActiveSheet.Shapes("Picture 1"), Range("A1")
End Sub
Private Sub MoveShape(ByVal shp As Excel.Shape, ByVal target As Excel.Range)
shp.IncrementLeft -(shp.TopLeftCell.Left - target.Left)
shp.IncrementTop -(shp.TopLeftCell.Top - target.Top)
End Sub