Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Aufruf einer UserForm ohne Auto-Instantiating und Übergabe einer Instanz an ein Sub

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   Aufruf einer UserForm ohne Auto-Instantiating und Übergabe einer Instanz an ein Sub (80 mal gelesen)
KraBBy
Mitglied
Maschinenbau-Ingenieur


Sehen Sie sich das Profil von KraBBy an!   Senden Sie eine Private Message an KraBBy  Schreiben Sie einen Gästebucheintrag für KraBBy

Beiträge: 374
Registriert: 19.09.2007

Inventor Professional 2016
Win7

erstellt am: 13. Jan. 2021 17:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


20210113_TestProjekt.ivb.txt

 
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

KraBBy
Mitglied
Maschinenbau-Ingenieur


Sehen Sie sich das Profil von KraBBy an!   Senden Sie eine Private Message an KraBBy  Schreiben Sie einen Gästebucheintrag für KraBBy

Beiträge: 374
Registriert: 19.09.2007

Inventor Professional 2016
Win7

erstellt am: 13. Jan. 2021 17:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Meine Form heißt "UF"(im Beispiel). Bisher hatte ich Auto-Instantiating verwendet, das heißt ich hatte keine Variable deklariert, die eine Instanz von UF setzt. Im Modul:
Code:
Sub Aufruf_UF()
    Load UF
    UF.TextBoxB.Value = "blub"
    UF.LabelC.Visible = False
    Call x
    ' [...]
    UF.Show
End Sub

Sub x()
   
    If UF.TextBoxB.Value = "" Then
        UF.LabelC.Visible = True
    Else
        UF.LabelC.Visible = False
    End If
End Sub
'alles nur Beispiel hier frei getippt



Im Code von der Form "UF" wurde auch das Sub x aufgerufen. Das funktioniert.

------------------
Gruß KraBBy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik


Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 1705
Registriert: 15.11.2006

Windows 10 x64, AIP 2021

erstellt am: 13. Jan. 2021 22:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KraBBy 10 Unities + Antwort hilfreich

Hallo

Rufst du eine Sub oder Function ohne Call auf, dürfen Argumente nicht in Klammern stehen. Oder eben mit Call aufrufen, dann sind die Klammern Pflicht.

Code:

Private Sub CommandButton1_Click()
    Modul1.testSubModul Me
End Sub

oder halt

Code:

Private Sub CommandButton1_Click()
    Call Modul1.testSubModul (Me)
End Sub


------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KraBBy
Mitglied
Maschinenbau-Ingenieur


Sehen Sie sich das Profil von KraBBy an!   Senden Sie eine Private Message an KraBBy  Schreiben Sie einen Gästebucheintrag für KraBBy

Beiträge: 374
Registriert: 19.09.2007

Inventor Professional 2016
Win7

erstellt am: 14. Jan. 2021 12:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

oh Mann, oh Mann 
so einfach. Vielen Dank, Ralf!

Im Prinzip kenne ich das auch. So lange hingeschaut, Beispiel gebastelt, etc. Trotzdem nicht gesehen.

Über so eine Auswirkung bin ich dabei noch nicht gestolpert. Wenn dann kommt (zur "Design time") gleich ein Syntaxfehler hoch. Kannst Du mir noch erklären, was hier die Klammern aus dem Me machen (da es ja scheinbar korrekte Syntax ist)?

------------------
Gruß KraBBy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik


Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 1705
Registriert: 15.11.2006

Windows 10 x64, AIP 2021

erstellt am: 15. Jan. 2021 17:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KraBBy 10 Unities + Antwort hilfreich

Hallo

Die Klammer macht aus Me nichts. Es ist einfach eine Syntaxvorschrift, das bei Call die Klammern zu setzen sind und ohne Call nicht. Beides sind korrekte Schreibweisen. Ich bevorzuge die Call-Variante, da sie besser lesbar für mich ist und die logischen Bezüge durch die klammer deutlicher dargestellt werden. Das ist aber Geschmackssache.

------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2021 CAD.de | Impressum | Datenschutz