我有一个宏从目录中导入图像并将它们放在excel单元格中,这些单元格大小足以适合图像
宏的片段如下: -
'Set the Row Height and Column Width of the thumbnail
Range("A" & CStr(currRow)).RowHeight = ThumbnailSizeRef + 2
Columns("A").ColumnWidth = (ThumbnailSizeRef - 5) / 5 'Column Width uses a font width setting, this is the formula to convert to pixels
'Add the thumbnail
Set sShape = ActiveSheet.Shapes.AddPicture(Filename:=sFilename, LinktoFile:=msoFalse, SaveWithDocument:=msoTrue, Left:=0, Top:=0, Width:=ThumbnailSizeRef, Height:=ThumbnailSizeRef)
'Set the Left and Top position of the Shape
sShape.Left = Range("A" & CStr(currRow)).Left + ((Range("A" & CStr(currRow)).Width - sShape.Width) / 2)
sShape.Top = Range("A" & CStr(currRow)).Top + ((Range("A" & CStr(currRow)).Height - sShape.Height) / 2)
一切正常。根据需要,图像只在单元格中正确显示。我也可以成功地对单元格进行排序,并且图像可以正确移动。
我遇到的问题是当我删除整行时(右键单击行并删除)...在这种情况下,行删除的图像会向下跳跃并隐藏在下一行的图像后面。
当我删除行时,有没有办法删除图像?
答案 0 :(得分:5)
您可以将图片属性更改为“使用单元格移动和调整大小”。因此,当您删除行时,您的图像也将被删除。 在Excel 2007中测试。
另一种解决方案是添加评论并在后台填写图片(请参阅此处的详细信息:http://www.excelforum.com/excel-general/569566-embed-image-in-cell.html)
答案 1 :(得分:3)
可能有更好的方法,但我可以想到2个解决方法。
将形状导入单元格时,请使用命名约定命名形状以标识行/列(例如.Name =“ImageX-RowY-ColumnZ”)。然后使用工作表更改事件和此链接Capture Deleted Rows来循环遍历形状并根据已删除的内容删除所需的形状。
或者,在您的图片中填写评论框,当该行被删除时,评论&图像也消失了
例如
Sub test()
ThumbnailSizeRef = 100
currRow = 5
sFilename = "C:\Users\....\Desktop\Untitled.png"
Range("A" & CStr(currRow)).RowHeight = ThumbnailSizeRef + 2
Columns("A").ColumnWidth = (ThumbnailSizeRef - 5) / 5
With Sheet1
With .Range("A" & currRow)
.ClearComments
.AddComment
With .Comment
.Visible = True
.Text Text:=""
.Shape.Left = Sheet1.Range("A" & currRow).Left
.Shape.Top = Sheet1.Range("A" & currRow).Top
.Shape.Width = Sheet1.Range("A" & currRow).Offset(0, 1).Left - Sheet1.Range("A" & currRow).Left
.Shape.Height = Sheet1.Range("A" & currRow).Offset(1, 0).Top - Sheet1.Range("A" & currRow).Top
.Shape.Fill.UserPicture sFilename
.Shape.Line.ForeColor.RGB = RGB(255, 255, 255) 'hides connector arrow
End With
End With
End With
End Sub
答案 2 :(得分:1)
这并不完美,但它可能会满足您的需求,或至少让您朝着正确的方向前进。
将此代码放在工作表模块中。当事件更改整行时,它将删除找到的左上角单元格在该行中的第一个形状。如果你要删除一行,这是有效的,但如果你剪切了一行,它也会被触发,这是不希望的。如果你不打算剪切和粘贴行,那么这不是问题。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim pic As Shape
If Union(Target, Target.EntireRow).Address = Target.Address Then
For Each pic In ActiveSheet.Shapes
If pic.TopLeftCell.Row = Target.Row Then
pic.Delete
Exit For
End If
Next pic
End If
End Sub