Clever-Excel-Forum

Normale Version: Dynamisch erstellte UserForm1 wird nicht sofort angezeigt
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo meine Lieben,

ich habe bei der dynamischen Erstellung meiner UserForm ein Problem. Ich kann die UserForm1 dynamisch erstellen, aber nicht sofort anzeigen lassen.

Dies hat zur Folge, dass ich meine Prozedur Anzeigen 2 mal starten muss, damit die dynamisch erzeugte UserForm1, das erste Mal angezeigt wird.
(woraufhin, dann als kleine Nebenwirkung noch eine 2 UserForm2  durch die Prozedur CreateUserForm erstellt wird)

Wie kriege ich es hin, damit meine gerade erstellte UserForm1 auch gleich angezeigt wird?



Code:
Sub Anzeigen()
'Muss diese Prozedur 2 mal durchlaufen lassen, damit die UserForm1 aus CreateUserForm angezeigt wird.
On Error Resume Next
CreateUserForm
UserForm1.Show
End Sub


Sub CreateUserForm()
'Erzeugt zwar eine Userform, aber wie kann ich diese dann auch sofort anzeigen lassen?
Dim mynewform As Object
Set mynewform = Application.VBE.ActiveVBProject.VBComponents.Add(3)

With mynewform
.Properties("Height") = 246
.Properties("Width") = 616
.Name = "UserForm1"
.Properties("Caption") = "Testlauf"
End With

Code zum Löschen der Userformen:


Code:
Sub LöscheUserformen()
'verbesserungswürdig, löscht erstMal im Rundumschlag bis zu 10 UserFormen!
On Error Resume Next
Dim i As Integer
For i = 1 To 10
Application.VBE.ActiveVBProject.VBComponents.Remove _
   Application.VBE.ActiveVBProject.VBComponents.Item("UserForm" & i)
Next
End Sub
Hallo VBATartar,
warum weiß ich auch nicht so genau, aber:
Sub Anzeigen()
'nun geht es beim ersten Mal
On Error Resume Next
CreateUserForm
NowShow
End Sub
Sub NowShow()
UserForm1.Show
End Sub
Gruß der AlteDresdner
Danke AlterDresdner, es geht!


Dank deiner Hilfe würde ich jetzt aber nur noch die Prozedur CreateUserForm aufrufen:
Code:
Sub CreateUserForm()
Dim mynewform As Object
Set mynewform = Application.VBE.ActiveVBProject.VBComponents.Add(3)
With mynewform
.Properties("Height") = 246
.Properties("Width") = 616
.Name = "UserForm1"
.Properties("Caption") = "This is a test"
End With
NowShow
End Sub

Sub NowShow()
UserForm1.Show
End Sub
Das Ganze ist bisher nur ein "Versuchsballon". Andere dynamische Steuerelemente müssen ja ebenfalls noch eingebaut werden. Und bei jedem Aufruf sollte vorher die UserForm1 wieder zerstört werden. Siehe Code weiter oben. Aber die nächsten Fragen und Weiterentwicklung kommt bestimmt. Demnächst in diesem
schönen Forum!
Hallo,

mein Vorschlag wäre:
Sub CreateUserForm()
Dim strName As String
strName = "UserForm1"
With Application.VBE.ActiveVBProject.VBComponents.Add(3)
.Properties("Height") = 246
.Properties("Width") = 616
.name = strName
.Properties("Caption") = "Testlauf"
End With
VBA.UserForms.Add(strName).Show
End Sub

Siehe z.B. hier: http://www.online-excel.de/fom/fo_read.php?f=1&bzh=9324&h=9312

Gruß Uwe