Here is how I would do it.
Firstly the code is now against the Change event rather than calculate.
It creates a copy of the require picture on the active sheet. The original pictures are on Sheet2.
It names the newly copied shape in reference to the changed cell. Deleting the shape before create a copy of the next person selected.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim shpTemp As Shape
Const PREFIX = "PIC_"
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Range("D5,D10,D15,D20,D25"), Target) Is Nothing Then
On Error Resume Next
' check and remove existing picture
Set shpTemp = ActiveSheet.Shapes(PREFIX & Target.Address)
If Not shpTemp Is Nothing Then shpTemp.Delete
Sheet2.Shapes(Target.Offset(, 6).Value).Copy
ActiveSheet.Paste
Set shpTemp = ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
With shpTemp
.Name = PREFIX & Target.Address
.Left = Target.Offset(, 6).Left
.Top = Target.Top
End With
ActiveCell.Select
End If
End Sub
Bookmarks