788 Aufrufe
Gefragt in Tabellenkalkulation von

Hallo liebe Forenmitglieder

Ich habe zurzeit ein Problem beim einfügen von Bildern in eine Userform. Wäre schön, wenn Ihr mir helfen könntet.

Ich habe in der VBA Entwicklungsumgebung eine Userform mit Labels, TextBoxen, sowie ComboBoxen und ein Imagecontrol mit CommandButton zum Laden eines Bildes  aus einem beliebigen Orderverzeichnis auf dem PC erstellt. Das Hineinladen des Bildes in das Imagecontrol, sowie die Ausgabe des Bildpfads ins Tabellenblatt funktionieren.

Jetzt zu meinem Problem:

Der Code zum zurückimportiern des Bildes in das Imagecontrol der Userform über das Inizialize-Ereignis klappt  nicht. Das Imagecontrol bleibt einfach leer. Eine Fehlermeldung wird von VBA nicht ausgegeben.

Mein Code zum einfügen ins Imagecontrol in der Userform:

Private Sub CommandButton1_Click()
'Bild laden!
Dim Bild As String
Dim Bildname As String
    Bild = Application.GetOpenFilename("Bild-Dateien(*.jpg;*bmp;*gif;*png;*tif),*.jpg,*bmp,*gif,*png,*tif")
    UserForm12.Image14.Picture = LoadPicture(Bild)
    Bildname = Application.GetOpenFilename(Title:=Bild)
    If UserForm12.Label1.Caption = UserForm2.TextBox2.Text Then
       Sheets("Symbole").TextBox2.Text = Bildname
    End If
    If UserForm12.Label1.Caption = UserForm2.TextBox4.Text Then
       Sheets("Symbole").TextBox3.Text = Bildname
    End If
On Error GoTo Fehler
Fehler:
End Sub

Mein Code zum Hineinladen des Bilds über Inizialize Ereignis beim Öffnen der Userform:

Private Sub UserForm_Initialize()

'ComboBox1 füllen
With UserForm12.ComboBox1
.AddItem "Einfamilienhaus"
.AddItem "Mehrfamilienhaus"
.AddItem "Bungalow"
End With
'ComboBox2 füllen
With UserForm12.ComboBox2
.AddItem "Keller"
.AddItem "Erdgeschoss"
.AddItem "Obergeschoss"
.AddItem "Dachgeschoss"
End With
'ComboBox3 füllen
With UserForm12.ComboBox3
.AddItem "Keller"
.AddItem "Erdgeschoss"
.AddItem "Obergeschoss"
.AddItem "Dachgeschoss"
End With
'ComboBox4 füllen
With UserForm12.ComboBox4
.AddItem "Keller"
.AddItem "Erdgeschoss"
.AddItem "Obergeschoss"
.AddItem "Dachgeschoss"
End With
'ComboBox5 füllen
With UserForm12.ComboBox5
.AddItem "Keller"
.AddItem "Erdgeschoss"
.AddItem "Obergeschoss"
.AddItem "Dachgeschoss"
End With

'Importiert Bilder für Mietobjekte in Userform!
Dim Pfad As String
Dim Pfad2 As String

    Pfad = Sheets("Symbole").TextBox2.Text
    Pfad2 = Sheets("Symbole").TextBox3.Text
    
If UserForm12.Label1.Caption = UserForm2.TextBox2.Text Then
   UserForm12.Image14.Picture = LoadPicture(Pfad)
End If
If UserForm12.Label1.Caption = UserForm2.TextBox4.Text Then
   UserForm12.Image14.Picture = LoadPicture(Pfad2)
End If

End Sub

Leider finde ich den Fehler nicht.  Vielleicht spinnt auch VBA.

Vielleicht schaut einer mal drüber und findet den Fehler.

3 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)

Hallo Mathias,

wenn ich in einem Code Fehler suche, dann füge ich Haltepunkte ein um z.B. festzustellen, welche Werte Variablen haben oder MsgBoxen z.B. um zu sehen, ob eine IF-Abfrage funktioniert oder auch um Variablen auszugeben.

Wenn es mit dem Bild laden beim Initialize-Ereignis nicht funktioniert, dann überprüfe mal

- ob die Variablen Pfad und Pfad2 korrekt sind und auf die Bilddatei verweisen und

- ob deine IF-Abfragen funktionieren.

Also z.B. so

'Importiert Bilder für Mietobjekte in Userform!
Dim Pfad As String
Dim Pfad2 As String

    Pfad = Worksheets("Symbole").TextBox2.Text
    Pfad2 = Worksheets("Symbole").TextBox3.Text
    
If UserForm12.Label1.Caption = UserForm2.TextBox2.Text Then
   MsgBox Pfad
   UserForm12.Image14.Picture = LoadPicture(Pfad)
End If
If UserForm12.Label1.Caption = UserForm2.TextBox4.Text Then
   MsgBox Pfad2
   UserForm12.Image14.Picture = LoadPicture(Pfad2)
End If

Du vergleichst hier ja zudem Daten von der UserForm12 (dürfte wohl die sein, in der das Bild geladen werden soll) mit der UserForm2. Ist diese Userform2 den noch offen, wenn du die Abfrage machst?

Gruß

M.O.

0 Punkte
Beantwortet von
Danke für das schnelle Antworten auf mein Posting.

Ja, ich habe alle Verweise geprüft. Alle Userformen und Textboxenverweise sind in Ordnung.

Wenn ich in meinem Excel- Tabellenblatt  auf den entsprechenden Commandbutton klicke, öffnet sich zuerst Userform2. Und dort befindet sich auch der TextBoxinhalt (TextBox2.Text), der bei einem Klick , wenn sich die Userform12 öffnet, in das Label1 der Userform12 geladen wird. Und diese will ich ja abfragen.

Klammere ich die If Abfrage aus und lade das Bild direkt per Pfadangabe (befindet sich auch im Tabellenblatt) in das Imagecontrol auf Userform12, dann funktioniert es und das Bild wird angezeigt.

Daher verstehe ich ja gerade nicht wieso es mit der If Abfrage nicht funktioniert. Als ob die If Abfrage ins Leere läuft oder nicht ausgeführt wird. Aber dann müsste doch eine Fehlermeldung kommen oder?
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)

Hallo Mathias,

wieso soll eine Fehlermeldung kommen, wenn die IF-Bedingung nicht erfüllt ist?

Wenn die Bedingung nicht zutrifft, wird kein Bild geladen. Fertig.

Du willst eine Rückmeldung? Dann füge ELSE ein:

If UserForm12.Label1.Caption = UserForm2.TextBox2.Text Then
    UserForm12.Image14.Picture = LoadPicture(Pfad)
  Else
   MsgBox UserForm12.Label1.Caption & " <> " & UserForm2.TextBox2.Text
End If
If UserForm12.Label1.Caption = UserForm2.TextBox4.Text Then
    UserForm12.Image14.Picture = LoadPicture(Pfad2)
  Else
   MsgBox UserForm12.Label1.Caption & " <> " & UserForm2.TextBox4.Text
End If

Dann siehst, du was in deinen IF-Abfragen verglichen wird.

Du schreibst:

Und dort befindet sich auch der TextBoxinhalt (TextBox2.Text), der bei einem Klick , wenn sich die Userform12 öffnet, in das Label1 der Userform12 geladen wird.

Das sehe ich in deinem Initialize-Code für die Userform12 aber nicht.

Gruß

M.O.

...