Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1084to1088
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
VBA - Userform löschen
Bernhard
Hallo Profis,
ich bin auf ein Problem bezüglich dynamischer Userforms gestoßen.
Das Problem habe ich in folgendem Code zusammengefaßt.

Sub test()
Set frmTemp = ThisWorkbook.VBProject.VBComponents.Add(3)
frmTemp.Properties("Name") = "frmTest"
With ThisWorkbook.VBProject
.VBComponents.Remove .VBComponents(frmTemp.Name)
End With
ThisWorkbook.Save
Set frmTemp = ThisWorkbook.VBProject.VBComponents.Add(3)
frmTemp.Properties("Name") = "frmTest"      'Path/File access error
End Sub


Es wird eine Userform angelegt, später gelöscht, und dann wieder angelegt.
Das Löschen funktioniert scheinbar auch, die Userform ist weg.
Nun funktionert das neuerliche Anlegen der Userform aber nur, wenn die Datei zwischendurch gespeichert wird.
ThisWorkbook.Save
Das möchte ich aber nicht, da es an dieser Stelle nicht nötig ist.
Ohne das Speichern kommt es aber in der letzten Zeile zum Fehler der im Kommentar steht.
Offenbar greift das Remove nicht komlett durch.
Ich habe (auch hier im Forum) nach Lösungen gesucht und etliches ausprobiert -> kein Erfolg.
Hat da jemand einen Tip?
Besten Dank
BCM

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA - Userform löschen
03.07.2009 13:19:17
Tino
Hallo,
ich würde sagen das geht nicht, dies ist auch nicht von Hand möglich.
Warum muss man eine Userform immer wieder löschen und neu erstellen?
Gruß Tino
AW: VBA - Userform löschen
03.07.2009 13:31:43
BCM
Hallo Tino,
in dieser Form passiert das auch nicht.
Im Projekt wird die Userform dynamisch erzeugt und sieht dabei jedesmal anders aus, das hängt von der aktiven Arbeitsmappe ab.
Nachdem die Userform geschlossen wird soll sie wirkungsvoll gelöscht werden um bei einem neuerlichen Aufruf neu (und diesmal anders) wieder aufgebaut zu werden.
Das Löschen funktioniert ja auch, nur hängt offenbar noch irgendwo im Hintergrund der Name der Userform als vergeben herum. Das wird dann scheinbar erst beim Speichern der Datei, in der der Code liegt, bereinigt.
Und das sollte ja auch anders funktionieren als über ein in diesem Moment nicht sinnvolles Speichern.
lG
BCM
Anzeige
wie schon geschrieben...
03.07.2009 13:53:36
Tino
Hallo,
geht von Hand auch nicht.
Teste dies doch mal,erstelle zwei UF lösche die erste und versuche mal der zweiten den Namen der gelöschten ersten zu geben.
Gruß Tino
AW: wie schon geschrieben...
03.07.2009 16:51:05
Bernhard
Hallo Tino,
ja, schon klar, aber wieso bereinigt einfaches Speichern das Problem?
Nicht einmal schließen und neu öffnen ist notwendig.
Versuchs mal. Einfach nach dem Löschen der ersten Userform die Datei speichern und danach die 2. Userform umbenennen.
Die Frage ist, ob die Routine, die beim Speichern offenbar den Speicher von diesen Resten befreit, nicht auch direkt ansprechbar ist.
lG
BCM
Anzeige
AW: VBA - Userform löschen
03.07.2009 13:31:48
fcs
Hallo BCM,
ich bin nicht unbedingt der Freund solcher dynamischer UF.
Auf alle Fälle sollte jedes Schließen des dyn. UF vor dem Löschen auch mit einem

Unload Me 


verbunden sein. Dadurch werden alle flüchtigen UF-Informationen aus dem Arbeitsspeicher gelöscht.
Und warum stört das Speichern, um verschieden Informationen, die Excel bei der Bearbeitung sammelt zurückzusetzen? Außer es dauert extrem lange oder Daten nicht immer gleich gespeichert und ggf. verworfen werden. Dann in einer Arbeitskopie arbeiten, deren Daten dann ggf. vor dem Schließen in das Original zurückgespeichert werden.
Gruß
Franz

Anzeige
AW: VBA - Userform löschen
03.07.2009 13:36:31
BCM
Hallo Franz,
da die Userform jedesmal anders aussieht sollte sie jedesmal komplett neu generiert werden.
Und genau die Zeitverzögerung beim Speichern stört.
Unload Me bringt auch nichts.
Danke+lG
BCM
AW: VBA - Userform löschen
03.07.2009 13:44:44
Jogy
Hi.
Wieso löschst Du nicht einfach alle Controls auf der UserForm und erstellst die dann neu (und paßt ggf. noch die Größe der UF an)? So hast Du auch Dein dynamisches Verhalten.
Gruss, Jogy
AW: VBA - Userform löschen
03.07.2009 16:59:35
Bernhard
Hallo Jogy,
das wäre natürlich eine Möglichkeit.
Obwohl das bei uns bezüglich Weitergabe des Codes ein wenig umständlicher wäre. Reiner Code ist ja in 2 Sekunden verschickt; jeder baut sich das dann in seine eigene Toolsammlung ein wie er will.
Mit statischer Userform muß man exportieren, zippen (solche Dateien werden sonst in unserem Mailsystem konsequent eliminiert), entpacken, importieren .....
Wenn man faul ist ...... :-)
Interessiert mich einfach wieso das nicht gehen soll, vor allem da es ein dezidiertes Remove gibt.
Aber Deine Idee hat was.
Danke&lG
Bernhard
Anzeige
AW: VBA - Userform löschen
03.07.2009 13:42:56
Rudi
Hallo,
warum gibst du der UF überhaupt einen Namen? Du kannst doch mit dem Objekt arbeiten.

Sub test()
Set frmTemp = ThisWorkbook.VBProject.VBComponents.Add(3)
With ThisWorkbook.VBProject
.VBComponents.Remove frmTemp
End With
Set frmTemp = ThisWorkbook.VBProject.VBComponents.Add(3)
End Sub


Gruß
Rudi

AW: VBA - Userform löschen
03.07.2009 17:02:47
Tino
Hallo,
warum dies so ist weis ich auch nicht und warum Excel z. Bsp. nach dem löschen der Userform1 und neu erstellen einer Userform auch wieder den Namen Userform1 vergeben kann (ohne speichern) weis ich auch nicht.
Aber wie ist es mit dem Tipp von Rudi, der geht auch ohne speichern.
Gruß Tino
Anzeige
sorry Rudi, sollte zu Bernhard oT.
03.07.2009 17:23:51
Tino
AW: VBA - Userform löschen
03.07.2009 17:25:50
Bernhard
Hallo Rudi,
natürlich, da bringst Du mich auf was!
Ich habs gerade in meiner Konfiguration getestet, das Remove kann ich nämlich nicht direkt in den generierenden Code einbauen, sonder muß es ins Terminate-Ereignis der UserForm einbinden (da ich die Userform Modeless öffne).
Zu diesem Zeitpunkt steht frmTemp natürlich nicht mehr zur Verfügung, aber mit

Private Sub UserForm_Terminate()
With ThisWorkbook.VBProject
.VBComponents.Remove .VBComponents(Me.Name)
End With
End Sub


funktioniert es!
Erstaunlicherweise legt jetzt Excel immer wieder eine UserForm1 an, ohne zwischenspeichern etc.
Wieso es mit Name nicht auch so funktioniert ist mir zwar noch immer nicht ganz klar, aber wenns so geht ists mir auch recht.
Besten Dank
BCM

Anzeige
Danke allen
03.07.2009 17:28:25
Bernhard
allen voran Rudi für die Bemühungen, Problem gelöst :-)
Schönes WE
BCM

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige