Ralf hat in diesem
Beitrag gezeigt, dass eine UserForm als neue Instanz der entsprechenden Klasse aufgerufen werden sollte.
Nun habe ich versucht das umzusetzen (bestehendes Makro), bin dabei auf ein Problem gestoßen, das ich nicht verstehe.
Ich habe in einem Modul ein Sub das die Form aufruft. Im gleichen Modul liegt auch ein Sub x(), das Elemente der Form manipuliert. Ich rufe x() einmal auf, im ersten Sub, das danach die Form zeigt mit .Show. Außerdem rufe ich x() auch bei bestimmten Events auf der Form aus. Genau bei diesem Aufruf aus dem Code der UserForm heraus kommt es zu einem Fehler, weil wohl die Datentypen nicht passen. Das Sub x nicht die Instanz von UF als Parameter, aber eben Fehler wenn ich 'Me' übergebe. Sollte das nicht genau die Instanz sein?
Folgend ein Beispiel, das mein Problem zeigen soll. Oben schrieb ich Sub "x", unten heißt es "testSubModul". Der Code im Modul1:
Code:
Sub Test_Userform() Dim myForm As New UF
'Set myForm = New UF 'ist mE nicht nötig
Load myForm
Call testSubModul(myForm)
myForm.Show
'Hide und Unload erfolgt im Code von UserForm1
End Sub
Sub testSubModul(oUF As UF) 'funktioniert beim Aufruf aus dem Sub oben, NICHT aber aus UF mit Me als Parameter (Typen unverträglich)
'Sub testSubModul(oUF As Object) 'funktioniert beim Aufruf aus dem Sub oben, NICHT aber aus UF mit ME als Parameter (oUF ist dann vom Typ Object/Controls ?!?)
Dim s As String
s = "ha!"
With oUF.CommandButton1 'im Fall oUF as Object hier dann der Fehler "Objekt unterstützt Eigenschaft/Methode nicht"
If Not s = .Caption Then
.Caption = s
Else
.Caption = s & s
End If
End With
End Sub
Im Code-Bereich der Form "UF":
Code:
Private Sub CommandButton1_Click()
Modul1.testSubModul (Me)
End Sub
[Edit: Anhang hinzu; das zitierte Beispiel]
------------------
Gruß KraBBy
[Diese Nachricht wurde von KraBBy am 13. Jan. 2021 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP