Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Bild löschen bevor neues geladen wird

Forumthread: Bild löschen bevor neues geladen wird

Bild löschen bevor neues geladen wird
06.07.2025 23:41:10
Dieter
Hey All,
Ich lade mir über vorgegebenen Pfad ein Bild in meine Tabelle, was auch klappt.
jetzt würde ich aber gerne, wenn ich ein anderes Bild laden möchte, das er mir vorher das alte oder die geladenen Bilder löscht
bevor das neue Bild geladen wird. Dabei sollen aber nicht die Buttons gelöscht werden.
Hier mein bisheriger Code
Private Sub CommandButton1_Click()

Dim sPicture As String, pic As Picture
Dim sPath$ 'neu
sPath = "E:\Download\Bi\"
ChDrive sPath 'neu
ChDir sPath 'neu
' das geht nicht
' type = 13 ist für bilder
'ActiveSheet.Pictures.Delete

sPicture = Application.GetOpenFilename _
("JPeg Fils(*.gif; *.jpg; *.bmp), *.gif; *.jpg; *.bmp", _
, "Select Picture to Import")
On Error Resume Next ' ohne bei Abbrechen Fehler
If sPicture = "False" Then Exit Sub
Range("G10").Select
Set pic = ActiveSheet.Pictures.Insert(sPicture)
With pic
.ShapeRange.LockAspectRatio = msoFalse
.Top = ActiveCell.Top
.Left = ActiveCell.Left
.Height = 450 'ActiveCell.Height
.Width = 400 'ActiveCell.Width
.Placement = xlMoveAndSize
End With
Set pic = Nothing
On Error GoTo 0
End Sub


Auch wäre es mal nett zu überprüfen ob der Code gut ist
oder es Verbesserungen gibt.
Vielen lieben dank schon mal der Mühe und Arbeit.
MfG
Dieter


Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bild löschen bevor neues geladen wird
07.07.2025 01:25:25
xlKing
Hi,

Füge das unter den Dim Anweisungen hinzu.
For Each pic In ActiveSheet.Pictures

pic.Delete
Next pic

Und so schlecht ist der Code jetzt nicht. Er funktioniert und läuft schnell durch. Nur das ist wichtig.
Gruß Mr. K.
AW: Bild löschen bevor neues geladen wird
07.07.2025 13:35:51
Dieter
hey xLKing,
Erst mal Danke für Deinen Versuch, aber leider klappt das nicht.
Habe Deine Codezeile überall versucht in meinem Code, aber geht nicht.
Die Bilder stapeln sich weiter untereinander.
Lg
Dieter
Anzeige
AW: Bild löschen bevor neues geladen wird
07.07.2025 12:00:52
Beverly
Hi Dieter,

wenn du dem Bild einen spezifischen Namen gibst kannst du es zum Löschen auch mit diesem Namen ansprechen:

Private Sub CommandButton1_Click()

Dim sPicture As String, pic As Picture
Dim sPath$ 'neu
sPath = "E:\Z_Test\"
ChDrive sPath 'neu
ChDir sPath 'neu
'************wenn Bild vorhanden dann löschen
On Error Resume Next
ActiveSheet.Pictures("MeinEingefuegtesBild").Delete '== Bild mit spezifischem Namen löschen
On Error GoTo 0
'***********
sPicture = Application.GetOpenFilename _
("JPeg Fils(*.gif; *.jpg; *.bmp), *.gif; *.jpg; *.bmp", _
, "Select Picture to Import")
If sPicture > "Falsch" And sPicture > "False" Then
Application.ScreenUpdating = False
Range("G10").Select
Set pic = ActiveSheet.Pictures.Insert(sPicture)
With pic
.ShapeRange.LockAspectRatio = msoFalse
.Top = ActiveCell.Top
.Left = ActiveCell.Left
.Height = 450 'ActiveCell.Height
.Width = 400 'ActiveCell.Width
.Placement = xlMoveAndSize
.Name = "MeinEingefuegtesBild" '== eingefügtem Bild spezifischen Namen geben
End With
Set pic = Nothing
Application.ScreenUpdating = True
End If
End Sub


Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Anzeige
AW: Bild löschen bevor neues geladen wird
07.07.2025 13:42:21
Dieter
Hallo Karin,
Vielen lieben Dank für die Codeumschreibung.
Es klappt wunderbar wie ich auch wollte.
Hab noch eine Frage dazu,
kann könnte man das auch über einen SpinButton regeln?
Heißt rechts drücken Bild vor, links drücken Bild wieder zurück.
Ist nur Frage ob sowas überhaupt geht.
Das wäre für mich das Highlite.
Trotzdem nochmal vielen lieben Dank Deiner Mühe
Lg
Dieter
Anzeige
AW: Bild löschen bevor neues geladen wird
07.07.2025 15:50:01
daniel
Hi
so was kann man schon machen.
hier mal ein Beispiel.
damit es funktioniert, musst du aber zuerst aus den ActiveX-Steuerelementen folgendes Anlegen:
- ein Image-Control (Image1), hier werden die Bilder angezeigt. In den Eigenschaften musst du ggf noch ein paar Einstellungen setzen, wie das Bild angezeigt werden soll
- den Spinbutton.

dann kommt folgender Code ins Modul des Tabellenblatts:

Option Explicit

Dim Bilder


Private Sub SpinButton1_Change()
If VarType(Bilder) = 0 Then Call Bilder_laden
Me.Image1.Object.Picture = LoadPicture(Bilder(SpinButton1.Value))
End Sub


Sub Bilder_laden()
Bilder = Application.GetOpenFilename(MultiSelect:=True)
Application.EnableEvents = False
With SpinButton1
.Min = 1
.Max = UBound(Bilder)
.Value = 1
End With
Application.EnableEvents = True
Call SpinButton1_Change
End Sub


wenn du das erste mal den Spinbutton drückst, kann wirst du aufgefordert, die anzuzeigenden Bilder auszuwählen. Du kannst mehrere Bilder wählen, aber sie müssen im selben Verzeichnis liegen.
bei weiteren Clicks auf den Spinbutton blätterst du dich dann durch die ausgewählten Bilder.
für eine neue Auswahl musst du das Makro "Bilder laden" direkt starten.

Gruß Daniel
Anzeige
AW: Bild löschen bevor neues geladen wird
09.07.2025 14:51:56
Dieter
Hallo Daniel,
Ich habe versucht Deinen Code umzusetzen wie Du beschrieben hast, aber klappt leider nicht.
Auf dem Tabellenblatt habe ich mir ein Image angelegt, und einen SpinButton.
Auf Tabellenblatt1  '=EINBETTEN("Forms.Image.1";"")  eingefügt und mit Code hinterlegt


Private Sub Image1_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As MSForms.fmDragState, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)

Bilder = Application.GetOpenFilename(MultiSelect:=True)
Application.EnableEvents = False
With SpinButton1
.Min = 1
.Max = UBound(Bilder)
.Value = 1
End With
Application.EnableEvents = True
Call SpinButton1_Change

End Sub

Private Sub SpinButton1_Change()
Dim Bilder
If VarType(Bilder) = 0 Then Call Bilder_laden
Me.Image1.Object.Picture = LoadPicture(Bilder(SpinButton1.Value))
End Sub

Wenn ich nur auf das eingefügte Image gehe kann ich nur ein Bild laden, das klappt.

Dann habe ich versucht den Code noch ins Modul2 anzulegen, aber da kommt Fehler bei With SpinButton1

   '  Steht Im Modul2


Option Explicit
Dim Bilder
--------------------------
Private Sub SpinButton1_Change()
Dim Bilder
If VarType(Bilder) = 0 Then Call Bilder_laden
Me.Image1.Object.Picture = LoadPicture(Bilder(SpinButton1.Value))
End Sub
--------------------------------------
Sub Bilder_laden()
Dim Bilder
Bilder = Application.GetOpenFilename(MultiSelect:=True)
Application.EnableEvents = False
With SpinButton1 ' Fehler, Variable nicht definiert
.Min = 1
.Max = UBound(Bilder)
.Value = 1
End With
Application.EnableEvents = True
Call SpinButton1_Change
End Sub

Wo liegt mein Fehler ?
Leider habe ich das noch nicht gemacht mit dem Image und SpinnButton zusammen, deswegen null Plan.
Es wäre sehr nett wenn Du noch mal ein Auge darüber werfen würdest
und mir den Fehler aufzeigen könntest.
Sollte das zuviel Arbeit sein, lassen wir es.
Ich danke schon mal Herzlich für Deine Hilfe.
Lg
Dieter
Anzeige
AW: Bild löschen bevor neues geladen wird
11.07.2025 20:01:52
schauan
Hallöchen,

der Code gehört in das Codemodul vom Tabellenblatt, wo auch der Spinbutton1 angesiedelt ist. Ansonsten müsstest Du dem Code mitgeben, wo er den Spinbutton1 finden kann. Das gilt übrigens vor allem auch für das Change_Ereignis - das geht schon mal gar nicht in einem Modul ...


Anzeige
AW: Bild löschen bevor neues geladen wird
16.07.2025 14:44:34
Dieter
Hallo schauan,
Habe es hinbekommen, funktioniert jetzt.
Vielen Dank noch mal des Hinweises.
Lg
Dieter

Forumthreads zu verwandten Themen

Anzeige