Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Image in Userform wird nicht angezeigt

Image in Userform wird nicht angezeigt
07.02.2006 13:13:14
Reinhard
Hallo Wissende,
die UF erscheint , aber nur als weiße Fläche, mal von Titel und Schließkeuz abgesehen, warum das denn?
Option Explicit
Option Base 1
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub Bild()
Dim nr As Byte, Verzeichnis As String, Bilddatei, merker
Verzeichnis = "C:\Dokumente und Einstellungen\All Users\Dokumente\Eigene Bilder\Beispielbilder\"
Bilddatei = Array("Sonnenuntergang", "Blaue Berge", "Winter")
nächstes:
nr = nr + 1
If nr = 4 Then nr = 1
merker = Timer
UserForm1.Image1.Picture = LoadPicture(Verzeichnis & Bilddatei(nr) & ".jpg")
Sleep 10000 'Wartezeit in Millisekunden
UserForm1.Image1.Picture = LoadPicture("")
GoTo nächstes
End Sub
Sub zeigen()
UserForm1.Show vbModeless
Call Bild
End Sub
Wenn ich die Zeilen:
UserForm1.Image1.Picture = LoadPicture(Verzeichnis & Bilddatei(nr) & ".jpg")
Sleep 10000 'Wartezeit in Millisekunden
UserForm1.Image1.Picture = LoadPicture("")
GoTo nächstes
auskommentiere wird zumindest das erste Bild angezeigt.
Nachfolgenden Code fand ich im Internet, blicke da nicht ganz durch,
wie kann ich den einbinden bzw. benutzen?

Danke ^ Gruß
Reinhard
Du könntest jedoch den API_Timer nutzen, dann würde der Thread nicht
blockiert. Die Funktion sleep_t kehrt nach der angegebenen Zeit zurück.
Rückgabewert ist True, falls erfolgreich.

Declare Function SetTimer Lib "user32" Alias "SetTimer" _
(ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, _
ByVal lpTimerFunc As Long) As Long
Declare Function KillTimer Lib "user32" Alias "KillTimer" _
(ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Private TimerID as long
public Function sleep_t(dwMilliSeconds as long) as Boolean
TimerID = SetTimer(0&, 0&, dwMilliSeconds, AddressOf TimerProc)
sleep_t = (TimerID <> 0)
do
doEvents
loop until TimerID = 0
End Function
Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, _
ByVal uElapse As Long, ByVal lpTimerFunc As Long)
KillTimer 0&, TimerID
TimerID = 0
End Sub 

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Image in Userform wird nicht angezeigt
07.02.2006 13:48:00
u_
Hallo,
bis auf die Tatsache, dass du eine Endlosschleife produzierst:
UserForm1.Image1.Picture = LoadPicture(Verzeichnis & Bilddatei(nr) & ".jpg")
UserForm1.Repaint
Gruß
Geist ist geil!
AW: Image in Userform wird nicht angezeigt
07.02.2006 13:59:51
Reinhard
Danke dir,
das half.
Aber mir ist immer noch sehr unklar warum,
UserForm1.Image1.Picture = LoadPicture(Verzeichnis & Bilddatei(nr) & ".jpg")
müßte doch das Bild anzeigen, bzw. macht es doch auch wenn danach kein Code mehr kommt. Wieso wird kein Bild angezeigt wenn danach Code kommt?
(Die Zeile merker=Timer kann weg, stammte noch aus einer while-wend Codeversion)
Und zur Endlosschleife, ja, werde da noch Abbruchbedingung durch Zellenüberprüfung einbauen, hatte ja deshalb die UF modeless gestartet.
Gruß
Reinhard
Anzeige
Userform imit Endlosschleife abbrechen
07.02.2006 14:21:32
Reinhard
Hallo,
obwohl ich die Uf modeless gestartet habe kann ich keinen Wert in eine Zelle schreiben um dies dann als Abbruchkriterium zu nehmen.
Lsg. aus dem Internet:
Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
ActiveWorkbook.VBProject.VBE.CommandBars(1).Controls(7).Controls(3).Execute
End Sub
klappt nicht. Wie also kann ich die Uf beenden ohne Strg+Pause?
Option Explicit
Option Base 1
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub Bild()
Dim nr As Byte, Verzeichnis As String, Bilddatei, merker
Verzeichnis = "C:\Dokumente und Einstellungen\All Users\Dokumente\Eigene Bilder\Beispielbilder\"
Bilddatei = Array("Sonnenuntergang", "Blaue Berge", "Winter")
nächstes:
nr = nr + 1
If nr = 4 Then nr = 1
merker = Timer
UserForm1.Image1.Picture = LoadPicture(Verzeichnis & Bilddatei(nr) & ".jpg")
UserForm1.Repaint
Sleep 1000 'Wartezeit in Millisekunden
UserForm1.Image1.Picture = LoadPicture("")
GoTo nächstes
End Sub
Sub zeigen()
UserForm1.Show vbModeless
Call Bild
End Sub

Gruß
Reinhard
Anzeige
AW: Userform imit Endlosschleife abbrechen
07.02.2006 14:56:26
Nepumuk
Hallo Reinhard,
versuch es mal so:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Sub Sleep Lib "kernel32" ( _
    ByVal dwMilliseconds As Long)

Public blnClose As Boolean

Public Sub zeigen()
    blnClose = False
    UserForm1.Show vbModeless
    Call Bild
End Sub

Private Sub Bild()
    Dim nr As Byte, Verzeichnis As String, Bilddatei, merker
    Verzeichnis = "D:\Eigene Dateien\Eigene Bilder\"
    Bilddatei = Array("004", "005", "007", "014")
    Do
        For nr = 0 To 3
            UserForm1.Image1.Picture = LoadPicture(Verzeichnis & Bilddatei(nr) & ".gif")
            UserForm1.Repaint
            Sleep 1000 'Wartezeit in Millisekunden
            UserForm1.Image1.Picture = Nothing
            DoEvents
            If blnClose Then Exit Do
        Next
    Loop
    Unload UserForm1
End Sub

' **********************************************************************
' Modul: UserForm1 Typ: Userform
' **********************************************************************

Option Explicit

Private Sub Image1_Click()
    blnClose = True
End Sub

Gruß
Nepumuk

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Bild in Userform anzeigen: Probleme und Lösungen


Schritt-für-Schritt-Anleitung

Um ein Bild in einer Userform in Excel anzuzeigen, gehe wie folgt vor:

  1. Userform erstellen: Öffne den VBA-Editor (ALT + F11) und füge eine neue Userform hinzu.

  2. Bildsteuerelement hinzufügen: Ziehe ein Bildsteuerelement (Image) auf die Userform.

  3. VBA-Code einfügen: Verwende den folgenden Code, um das Bild zu laden:

    Option Explicit
    Option Base 1
    
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    
    Sub Bild()
        Dim nr As Byte, Verzeichnis As String, Bilddatei
        Verzeichnis = "C:\Pfad\zu\deinen\Bildern\"
        Bilddatei = Array("Bild1.jpg", "Bild2.jpg", "Bild3.jpg")
    
        Do
            nr = (nr + 1) Mod 3
            UserForm1.Image1.Picture = LoadPicture(Verzeichnis & Bilddatei(nr))
            UserForm1.Repaint
            Sleep 1000 ' Wartezeit in Millisekunden
        Loop
    End Sub
    
    Sub zeigen()
        UserForm1.Show vbModeless
        Call Bild
    End Sub
  4. Userform testen: Starte die Userform mit dem zeigen-Sub.


Häufige Fehler und Lösungen

  1. Bild wird nicht angezeigt: Wenn das Bild nicht angezeigt wird, stelle sicher, dass der Pfad zu den Bildern korrekt ist. Verwende den LoadPicture-Befehl wie folgt:

    UserForm1.Image1.Picture = LoadPicture(Verzeichnis & Bilddatei(nr))
  2. Endlosschleife: Achte darauf, dass du die Userform nicht in einer Endlosschleife blockierst. Füge UserForm1.Repaint hinzu, um die Userform zu aktualisieren.

  3. Fehlende Bilder: Wenn excel bilder werden nicht angezeigt, überprüfe den Dateityp und stelle sicher, dass die Bilddateien im angegebenen Verzeichnis vorhanden sind.


Alternative Methoden

  • API-Timer verwenden: Anstelle von Sleep, kannst du den API-Timer verwenden, um die Userform nicht zu blockieren. Der Code könnte so aussehen:

    Declare Function SetTimer Lib "user32" Alias "SetTimer" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  • Bild in einer Schleife: Um zwischen mehreren Bildern zu wechseln, verwende eine Schleife, wie im obigen Beispiel gezeigt.


Praktische Beispiele

Hier ist ein einfaches Beispiel, das die Verwendung von LoadPicture zeigt:

Sub Beispiel()
    Dim BildPfad As String
    BildPfad = "C:\Pfad\zu\deinem\Bild.jpg"
    UserForm1.Image1.Picture = LoadPicture(BildPfad)
    UserForm1.Show
End Sub

Wenn du mit verschiedenen Bildformaten arbeitest, stelle sicher, dass du die Dateiendungen entsprechend anpasst.


Tipps für Profis

  • Fehlerbehandlung: Füge eine Fehlerbehandlung ein, um sicherzustellen, dass das Bild korrekt geladen wird. Verwende On Error Resume Next, um Fehler zu ignorieren und On Error GoTo 0, um die Fehlerbehandlung zurückzusetzen.

  • Performance optimieren: Minimale Wartezeiten zwischen der Anzeige von Bildern helfen, die Performance der Userform zu verbessern.


FAQ: Häufige Fragen

1. Warum wird das Bild nicht angezeigt?
Mögliche Ursachen sind ein falscher Dateipfad oder ein nicht unterstütztes Bildformat. Überprüfe den Pfad und das Bildformat.

2. Wie kann ich die Userform schließen?
Du kannst ein Button-Steuerelement hinzufügen und den folgenden Code verwenden:

Private Sub btnSchliessen_Click()
    Unload UserForm1
End Sub

3. Was ist LoadPicture?
LoadPicture ist eine Funktion in Excel VBA, die verwendet wird, um Bilder in ein Bildsteuerelement zu laden.

Mit diesen Anleitungen und Tipps solltest du in der Lage sein, Bilder in deiner Userform erfolgreich anzuzeigen und häufige Probleme zu beheben.

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