Ich habe zwei Spalten:Excel VBA - Ausgabe als Bild einfügen auf Worksheet_Change Ereignisse Arbeitsblatt
A B
1 Animal Picture
2 Lion (Lion picture)
3 Ant (Ant picture)
Wenn ich ein Tier Namen in einer neuen Zelle eingeben (können sagen, A4
), die Formel funktioniert perfekt: Ich erhalte das Bild in der Bildspalte (B
).
Wenn ich einen Wert in cloumn A
lösche (sagen wir lösche Lion), dann wird das Bild von Lion gelöscht.
Aber wenn ich manuell bearbeiten, ohne Wert in A2
zu löschen, überlappt ein neues Bild B2
über dem letzten. Wenn ich den Wert A2
lösche, wird nur das letzte Bild gelöscht. Ich muss wieder leere Zelle A2
löschen, um das verbleibende Bild in Zelle B2
zu löschen.
Gibt es eine Möglichkeit, dieses Problem zu beheben?
Hier ist meine aktuelle Worksheet_Change
Ereigniscode:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo son
If Intersect(Target, [A:A]) Is Nothing Then Exit Sub
If Target.Row Mod 20 = 0 Then Exit Sub
If Not IsEmpty(Target) Then '<--| if changed cell content is not empty
With Pictures.Insert(ThisWorkbook.Path & "\" & Target.Value & ".png")
.Top = Target.Offset(0, 2).Top
.Left = Target.Offset(0, 1).Left
.ShapeRange.LockAspectRatio = msoFalse
.ShapeRange.Height = Target.Offset(0, 2).Height
.ShapeRange.Width = Target.Offset(0, 2).Width
.Name = Target.Address '<--| associate the picture to the edited cell via its address
End With
Else '<--| if cell content has been deleted
Me.Shapes(Target.Address).Delete '<--| delete the picture whose name is associated to the cell via its address
End If
Target.Offset(1, 0).Select
son:
End Sub
Auf den ersten Blick vielleicht sollten Sie immer (und vor etwas zu tun) löschen Sie die auf die Zelle im Zusammenhang Bild, das Sie gerade bearbeiten. Wenn der bearbeitete Zellenwert ein gültiger ist, sollten Sie das entsprechende Bild einfügen. Auf diese Weise können keine Bilder überlagert werden. Es könnte manchmal "dumm" sein, denn wenn Sie die Zelle bearbeiten und denselben Wert eingeben, wird das gleiche Bild gelöscht und eingefügt. Um dies zu vermeiden, überprüfe http://StackOverflow.com/a/4668523/6671476 und überprüfe, ob der alte Wert von dem neuen abweicht :) – RCaetano
Hat Robins Antwort dir geholfen? – RCaetano