在VBA中的单元格之间移动图像

时间:2009-12-15 03:52:25

标签: excel vba excel-vba

我在单元格(3,1)中有一个图像,并希望将图像移动到单元格(1,1)中。

我有这段代码:

ActiveSheet.Cells(1, 1).Value = ActiveSheet.Cells(3, 1).Value
ActiveSheet.Cells(3, 1).Value = ""

但是,对于包含图像的单元格,单元格值似乎为空,因此不会移动图像,也不会删除单元格(3,1)中的图像。当我运行代码的特定位时,什么都没发生。

非常感谢任何帮助。

感谢。

2 个答案:

答案 0 :(得分:7)

您的代码的部分问题在于您将图像视为单元格的。但是,尽管图像可能看起来在单元格中,但实际上并不是单元格的值。

要移动图片,您可以相对(使用Shape.IncrementLeftShape.IncrementRight),或者您可以绝对(通过设置) Shape.LeftShape.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