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

Forumthread: Wo liegt der Fehler im Code zum UserForm schließen

Wo liegt der Fehler im Code zum UserForm schließen
16.09.2024 11:58:39
RoWaLo
Hallo verehrte Experten und Helfer

Ich habe eine Excel Datei mit VBA Code und es soll folgendes passieren
Beim Öffnen der Execl Datei soll automatisch ein Makro starten das wiederum eine Userform1 zur Anzeige bringt.
Wird die userform1 über X geschlossen wird eine Userform2 zur Anzeige gebracht die 3 Commandbuttons enthält.
Über eine If Abfrage wird abgefragt ob Commandbutton1 gedrückt wurde
Wenn Ja soll eine Sub Prozedur “Bild1“ gestartet werden und die Userform2 soll geschlossen werden.
mit der einer Variablen “Datei“ der Name der aktuellen Excel zugewiesen wird - aber am Ende geändert um eine “ 1 - .jpg“
und als nächstes wird einer Variablen“PfadDatei“ der Pfad der Excel Datei plus der Name der Excel Datei zugewiesen. Ende der Sub
Als nächster Schritt soll mit einer Sub “Prüfen“ überprüft werden ob es eine solche jpg Datei im gleichen Ordner
in dem die Excel Datei sich befindet überhaupt gibt.
Ist sie dort vorhanden soll das Bild angezeigt werden
Ist sie nicht dort vorhanden soll unter "E:\Bilder für Test\" geprüft werden ob sie dort vorhanden ist.
Ist sie dort vorhanden soll das Bild angezeigt werden
Ist sie nicht dort vorhanden soll eine MsgBox angezeigt werden mit der Info., dass die Bild Datei nicht existiert
Nach Schließen der MsgBox soll die Exceldatei (inkl. allem Vba) geschlossen werden

Wird CommandButton2 gedrückt soll wie oben ……
Über eine If Abfrage wird abgefragt ob Commandbutton2 gedrückt wurde
Jetzt soll Sub Prozedur Bild2 gestartet werden, die der Variablen “Datei“ der Name der aktuellen Excel zugewiesen
wird - aber am Ende geändert um eine “ 2 - .jpg“. Der Rest folgt wie oben.

Wird CommandButton3 (= Abbrechen) gedrückt
Soll die Excel Datei geschlossen werden.

Mit dem beigefügten Code klappt auch schon vieles aber eben nicht alles.
Wenn das Makro startet werden Userform 1 und danach Userform2 angezeigt
Bei Auswahl von CommandButton1 (oder 2) wird das zugehörige Bild1 (oder 2) angezeigt wenn es in den Ordnern gefunden wurde, (Klappt!!)
aber UserForm2 wird nicht geschlossen, sondern wird wieder (weiter) angezeigt ?
und wartet auf eine Eingabe?? Ich kann in diesem Zustand nicht zu einer anderen Excel Datei wechseln, erst wenn ich die Userform über X geschlossen habe.
Wenn die jpg Datei nicht gefunden wird, wird mir die MsgBox mit der Info. nicht angezeigt?

Fragen:
Wie bekomme ich die UserForm2 geschlossen und an welcher Stelle muss ich den Unload Befehl (oder was anderes) einfügen,
damit er sich entsprechend auswirkt? Und sie nicht „blockierend“ wirkt“.
Wieso wird mir die Info über die MsgBox nicht angezeigt, wenn die jpg Bilder nicht gefunden wurden?

Danke für jede hilfreiche Antwort.
VG Roman
Private Sub Workbook_Open()


' Position_1
' Teil 1 vom Makro legt fest dass die Excel-Datei auf der rechten Bildschirmhälfte erscheinen soll.
'
Application.Left = 456.4
Application.Width = 550.8
Application.Height = 622
Application.Left = 456.4
Application.Top = 4.6
'
' Tab_verschieben_auf_A1
' Teil 2 vom Makro verschiebt das Tabellenblatt in die linke obere Ecke
'
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
ActiveWindow.ScrollRow = 4
ActiveWindow.ScrollRow = 3
ActiveWindow.ScrollRow = 2
ActiveWindow.ScrollRow = 1

UserForm1.Show

UserForm2.Show ' Wenn Userform 1 geschlossen wurde zeige Userform2

' Oeffnen von zugehörigem JPG Bild = Deutschland Karte
Dim Datei As String
Dim PfadDatei As String

If CommandButton1_Click Then
Unload UserForm2
Call Bild1
Call Prüfung
End If

If CommandButton2_Click Then
Unload UserForm2
Call Bild2
Call Prüfung
End If

If CommandButton3_Click Then
Unload UserForm2
Call Ausstieg
End If

' Unload Me hatte ich testweise hier eingefügt
End Sub
'__________________________________________________________________________________
Sub Prüfung() ' Sub Datei_Existenz_PruefungKurz()
If Dir(PfadDatei) > "" Then ' Die Datei existiert
FollowHyperlink PfadDatei ' Die existierende jpg Datei wird aufgerufen = geöffnet

Else ' Die Datei existiert nicht im Ordner der Excel Datei"

PfadDatei = "E:\Bilder für Test\" & Datei ' Pfad und Datei

If Dir(PfadDatei) > "" Then ' Die Datei existiert
FollowHyperlink PfadDatei ' Die existierende jpg Datei wird aufgerufen = geöffnet

Else
MsgBox "Die ausgewählte Datei '" & Datei _
& "' existiert nicht im Ordner dieser Excel Datei", vbCritical
End If
End If
End Sub
'__________________________________________________________________________________
Private Sub Bild1()
'Unload Me ' Userform schließen --- hatte gedacht an der Stelle wäre es richtig
With ThisWorkbook
Datei = Left(.Name, Len(.Name) - 10) & " 1 _ .jpg"
PfadDatei = .Path & "\" & Datei
End With
End Sub
'__________________________________________________________________________________
Private Sub Bild2()
'Unload Me ' Userform schließen --- hatte gedacht an der Stelle wäre es richtig
With ThisWorkbook
Datei = Left(.Name, Len(.Name) - 10) & " 2 _ .jpg"
PfadDatei = .Path & "\" & Datei
End With
End Sub
'__________________________________________________________________________________
Private Sub Ausstieg()
'Unload Me ' Userform schließen --- hatte gedacht an der Stelle wäre es richtig
ThisWorkbook.Close ' Datei schließen
End Sub
'__________________________________________________________________________________
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wo liegt der Fehler im Code zum UserForm schließen
16.09.2024 12:09:56
Yal
Hallo Roman,

nach einem "Unload Me" kann der "Me" gar nichts mehr machen (ausser das Abschluss-Ereignis, aber das erwähne nur vollständigkeitshalber). Der ganze Code vom Sub, dass nach dem "Unload Me" wird ignoriert.

Was Du aber machen kannst, ist "Me.Hide", dann die Abschlussverarbeitung, dann "Unload Me".

VG
Yal
Anzeige
AW: Wo liegt der Fehler im Code zum UserForm schließen
16.09.2024 12:41:49
RoWaLo
Hallo Yal
du schreibst .... Der ganze Code vom Sub, dass nach dem "Unload Me" wird ignoriert.

Wie erkläst du dir dann, dass der ganze Code bei mir nicht ignoriert (= ausgeführt) wird und das richtige Bild angezeigt wird?
Das solte laut deiner Aussage dann doch nicht der Fall sein.
Mit Hide ist doch die userform doch nur nicht mehr zu sehen aber nicht geschlossen.
Warum soll die UserForm2 nach der Abfrage welcher CommandButton gedrückt wurde -- nicht geschlossen werden ? was ist der Grund?
Sie wird doch nicht mehr für eine weitere Eingabe gebraucht. (es soll nur ein Klick auf einen CommandButton möglich sein)

Ich wüsste gerne an welcher Stelle (bitte nach welcher Code-zeile angeben) ich was (welchen Befehl) einbauen muss damit es funktioniert?
und ob ich statt mit Unload Me allternativ besser mit Unload userform .... oder Unload Userform2 arbeiten soll und was die Unterschiede da sind?
VG Roman
Anzeige
AW: Wo liegt der Fehler im Code zum UserForm schließen
16.09.2024 13:26:54
Yal
Hallo Roman,

ich kann nur beschreiben, was Regelfall und wie es normalerweise gemacht wird. Es gibt Best Practice, die sicherstellen, dass es funktioniert. Es gibt auch Programmierung, die teilweise funktionieren und teilweise nicht. Auf solchem instabilen Boden würde ich nicht bauen.

Und zu der Frage:
"Warum soll die UserForm2 nach der Abfrage welcher CommandButton gedrückt wurde -- nicht geschlossen werden ? was ist der Grund?"
Weil man das Mietwagen nicht tanken kann, nachdem es abgegeben worden ist.
Du hinterfragst, was der Programmierer sich dabei vorgedacht hat. Es gibt aber eine Unterschied zwischen was man haben möchte und wie man den Computer anleitet, dieses zu tun.
Ich habe vorgeschlagen: sofort ausblenden, Aktion zu Ende durchführen lassen, dann Formular-Objekt vernichten ("Unload"). Ich habe nicht vorgeschlagen, gar nicht zu entladen.

Es wäre sicher kein grossen Aufwand, verschiedene Szenarien zu testen, um festzustellen, ob Unload am Anfang oder am Ende platziert werden soll. Try-and-Error gehört zu jedem Programmierer-Werdegang. Es ist genau was ich machen müsste, wenn ich deine Datei hätte. Ich halte es wertvoller für deine Erfahrung, wenn Du es selber machst (nicht zur Strafe, sondern zur Übung).

VG
Yal
Anzeige
;

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

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