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

Forumthread: Bild in Userform einfügen

Bild in Userform einfügen
25.09.2013 14:02:04
Karl-Heinz
Guten Tag liebe Forumsteilnehmer,
als Anfänger habe ich mir zur Anzeige von Bildern in einer Userform ein Makro gebastelt. Es funktioniert auch. Nur folgende Erweiterungen gelingen mir nicht:
1.) Der letzte Ordnername (hier im Beispiel "8008") unter verz soll nicht fest sondern variabel aus einer Excel-Zelle (z.B. Range ("c3") abgeleitet werden.
2.) Aus dem dann gewählten Ordner sollen nur die Bilder mit der Endung "*.jpg" aufgerufen werden. Wer kann mir für diese Ergänzung helfen?
Gruß
Karl-Heinz
Private Sub SpinButton2_Change()
Dim verz As String
Dim Fotos() As Variant
Dim i_zaehler As Long
Dim i_zaehler2 As Long
Dim fs As Object
Dim objDatei As Object
With Filialfotos
.SpinButton1.Min = 1
verz = "c:\filialen\Filialfotos\8008\"
Set fs = CreateObject("Scripting.FileSystemObject")
Set Folder = fs.Getfolder(verz)
i_zaehler = Folder.Files.Count
.SpinButton2.Max = i_zaehler
ReDim Fotos(i_zaehler)
For Each objDatei In Folder.Files
Fotos(i_zaehler2) = verz & objDatei.Name
i_zaehler2 = i_zaehler2 + 1
Next
TextBox1.Text = SpinButton2.Value
Label1.Caption = Fotos(SpinButton2.Value)
Image1.Picture = LoadPicture(Fotos(SpinButton2.Value))
End With
End Sub

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bild in Userform einfügen
25.09.2013 14:11:17
Rudi
Hallo,
Private Sub SpinButton2_Change()
Dim verz As String
Dim Fotos() As Variant
Dim i_zaehler As Long
Dim i_zaehler2 As Long
Dim fs As Object
Dim objDatei As Object
With Filialfotos
.SpinButton1.Min = 1
verz = "c:\filialen\Filialfotos\" & Range("C3") & "\"
Set fs = CreateObject("Scripting.FileSystemObject")
Set Folder = fs.Getfolder(verz)
i_zaehler = Folder.Files.Count
.SpinButton2.Max = i_zaehler
ReDim Fotos(i_zaehler)
For Each objDatei In Folder.Files
If Right(objDatei.Name, 4) = ".jpg" Then
Fotos(i_zaehler2) = verz & objDatei.Name
i_zaehler2 = i_zaehler2 + 1
End If
Next
TextBox1.Text = SpinButton2.Value
Label1.Caption = Fotos(SpinButton2.Value)
Image1.Picture = LoadPicture(Fotos(SpinButton2.Value))
End With
End Sub

Gruß
Rudi
P.S. würd ich anders machen.
Fotos() als globale Var und Min/Max in UF_Initialize festlegen.

Anzeige
AW: Bild in Userform einfügen
25.09.2013 15:41:03
Karl-Heinz
Hallo Rudi,
vielen Dank für die schnelle Antwort. Im Nachhinein eigentlich einfach und logisch. Hatte mich aber zwischenzeitlich total verrannt. Hab es getestet und alles funktioniert. Toll. Wäre Deine andere angedachte Möglichkeit für mich als Anfänger noch nachvollziehbar? Vielleicht ist es vom Handling für Dich einfacher, mir einen kurzen Tipp auf einen anderen Beitrag zu diesem Konstrukt geben.
Viele Grüße
Karl-Heinz

Anzeige
AW: Bild in Userform einfügen
25.09.2013 16:08:19
Rudi
Hallo,
ungetestet.
Im Modul der UF
Option Explicit
Dim Fotos()
Private Sub UserForm_Activate()
Dim oFS As Object, oFolder As Object
Dim verz As String
Dim i_zaehler As Long
Dim i_zaehler2 As Long
Dim objDatei As Object
verz = "c:\filialen\Filialfotos\" & Range("C3") & "\"
Set oFS = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFS.Getfolder(verz)
i_zaehler = oFolder.Files.Count
ReDim Fotos(1 To i_zaehler)
For Each objDatei In oFolder.Files
If Right(objDatei.Name, 4) = ".jpg" Then
i_zaehler2 = i_zaehler2 + 1
Fotos(i_zaehler2) = verz & objDatei.Name
End If
Next
SpinButton2.Min = 1
SpinButton2.Max = i_zaehler
End Sub
Private Sub SpinButton2_Change()
TextBox1.Text = SpinButton2.Value
Label1.Caption = Fotos(SpinButton2.Value)
Image1.Picture = LoadPicture(Fotos(SpinButton2.Value))
End Sub

Gruß
Rudi

Anzeige
AW: Bild in Userform einfügen
25.09.2013 19:30:27
Karl-Heinz
Hallo Rudi,
vielen Dank für die Alternative. Aber, beim Testen wurde abgebrochen und in der Zeile
Label1.Caption = Fotos(SpinButton2.Value)
Fotos blau hinterlegt, mit dem Hinweis, Sub oder Function nicht definiert.
Keine Ahnung woran es liegt.
Leider habe ich erst jetzt bei der ersten Variante festgestellt, dass beim Aufrufen der Bilder nach dem sechsten Bild Schluss ist. Es wird zwar weitergezählt, aber es kommt kein Bild mehr. Habe die Bilder noch einmal kontrolliert. Es sind jpg-Dateien. Bei meinem alten Makro wurde alles abgebildet, leider auch die wmf-Dateien im Ordner.
Viele Grüße
Karl-Heinz

Anzeige
AW: Bild in Userform einfügen
25.09.2013 23:09:12
Rudi
Hallo,
dann ignorieren wir mal die Groß-Kleinschreibung im Dateinamen.
 For Each objDatei In oFolder.Files
If Right(LCase(objDatei.Name), 4) = ".jpg" Then
i_zaehler2 = i_zaehler2 + 1
Fotos(i_zaehler2) = verz & objDatei.Name
End If
Next
Gruß
Rudi

Anzeige
AW: Bild in Userform einfügen
25.09.2013 23:56:55
Karl-Heinz
Hallo Rudi,
Danke. Funktion jetzt 100%-ig.
Viele Grüße und gute Nacht
Karl-Heinz
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Bild in Userform einfügen


Schritt-für-Schritt-Anleitung

Um ein Bild in einer Excel Userform einzufügen, kannst du das folgende VBA-Skript verwenden. Dieses Beispiel zeigt, wie du den Pfad des Bildes dynamisch aus einer Excel-Zelle (z.B. C3) ableiten und nur JPEG-Bilder (.jpg) anzeigen kannst.

  1. Öffne den VBA-Editor (ALT + F11) und füge eine Userform hinzu.
  2. Füge einen SpinButton, ein TextBox, ein Label und ein Image-Steuerelement in die Userform ein.
  3. Füge den folgenden VBA-Code in das Code-Fenster der Userform ein:
Option Explicit
Dim Fotos() As Variant

Private Sub UserForm_Activate()
    Dim oFS As Object, oFolder As Object
    Dim verz As String
    Dim i_zaehler As Long
    Dim i_zaehler2 As Long
    Dim objDatei As Object

    verz = "c:\filialen\Filialfotos\" & Range("C3") & "\"
    Set oFS = CreateObject("Scripting.FileSystemObject")
    Set oFolder = oFS.Getfolder(verz)

    i_zaehler = oFolder.Files.Count
    ReDim Fotos(1 To i_zaehler)

    For Each objDatei In oFolder.Files
        If Right(LCase(objDatei.Name), 4) = ".jpg" Then
            i_zaehler2 = i_zaehler2 + 1
            Fotos(i_zaehler2) = verz & objDatei.Name
        End If
    Next

    SpinButton2.Min = 1
    SpinButton2.Max = i_zaehler2
End Sub

Private Sub SpinButton2_Change()
    TextBox1.Text = SpinButton2.Value
    Label1.Caption = Fotos(SpinButton2.Value)
    Image1.Picture = LoadPicture(Fotos(SpinButton2.Value))
End Sub
  1. Stelle sicher, dass die Bilder im angegebenen Ordner vorhanden sind und die Endung .jpg haben.

Häufige Fehler und Lösungen

  • Fehler: Sub oder Function nicht definiert

    • Dies kann auftreten, wenn die globale Variable Fotos() nicht korrekt deklariert ist. Stelle sicher, dass du die Dim Fotos() As Variant Zeile im Modul der Userform hast.
  • Fehler: Keine Bilder werden angezeigt

    • Überprüfe, ob der Pfad in der Zelle C3 korrekt ist und ob sich tatsächlich JPEG-Bilder im angegebenen Ordner befinden.
  • Fehler: Abbruch beim Laden des Bildes

    • Wenn nach dem sechsten Bild keine weiteren Bilder angezeigt werden, könnte das daran liegen, dass einige der Bildnamen oder Dateiendungen nicht übereinstimmen. Achte darauf, dass alle Bilder die Endung .jpg haben.

Alternative Methoden

Eine alternative Methode zur Anzeige von Bildern in einer Userform ist die Verwendung von UserForm_Initialize anstelle von UserForm_Activate. Hier ist ein Beispiel:

Private Sub UserForm_Initialize()
    ' Code hier einfügen, um vor dem Aktivieren der Userform Bilder zu laden
End Sub

Diese Methode stellt sicher, dass die Bilder geladen werden, bevor die Userform angezeigt wird.


Praktische Beispiele

Angenommen, du hast eine Liste von Filialen und deren Bilder in einem bestimmten Ordner organisiert. Du kannst die Userform so anpassen, dass du die Bilder der ausgewählten Filiale anzeigst, indem du den Namen der Filiale in C3 eingibst und dann mit dem SpinButton durch die Bilder navigierst.


Tipps für Profis

  • Globale Variablen verwenden: Wenn du die Fotos()-Variable global deklarierst, kannst du sie einfacher in verschiedenen Subroutinen der Userform verwenden.

  • Fehlerbehandlung hinzufügen: Um robustere VBA-Skripte zu erstellen, solltest du Fehlerbehandlungsroutinen implementieren, um unerwartete Fehler abzufangen.

  • Userform anpassen: Gestalte deine Userform ansprechend, indem du weitere Steuerelemente hinzufügst, wie z.B. Schaltflächen zum Zurück- oder Vorblättern der Bilder.


FAQ: Häufige Fragen

1. Wie kann ich andere Bildformate hinzufügen? Um andere Formate wie .png oder .bmp zu unterstützen, füge einfach weitere Bedingungen in die If-Anweisung ein:

If Right(LCase(objDatei.Name), 4) = ".jpg" Or Right(LCase(objDatei.Name), 4) = ".png" Then

2. Was mache ich, wenn der Ordner leer ist? Du kannst eine Überprüfung hinzufügen, um sicherzustellen, dass der Ordner nicht leer ist, bevor du versuchst, die Bilder zu laden. Wenn der Ordner leer ist, kannst du eine entsprechende Nachricht anzeigen.

3. Wie kann ich die Userform schneller laden? Wenn du viele Bilder hast, kannst du die Anzahl der geladenen Bilder begrenzen, indem du nur die ersten N Bilder lädst, oder indem du die Userform nur beim Bedarf lädst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige