| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Sub aus Modul aufrufen? (3107 mal gelesen)
|
axi92 Mitglied Konstrukteur
Beiträge: 685 Registriert: 20.02.2010
|
erstellt am: 10. Jul. 2012 14:08 <-- editieren / zitieren --> Unities abgeben:
Ich habe mir meine Subs wie auch in VBA in Module geschrieben. So sieht das aus: Public Sub DWG(ByVal ThisApplication As Inventor.Application)
Wenn ich das Sub jetzt bei einem Klick auf einen Button aufrufen will funktioniert das nicht wie geplant, es fehlt ihm die Übergabe von dem in den (). Das habe ich versucht:
Makros.DWG() 'Versuch1 Call Makros.DWG() 'Versuch2 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 10. Jul. 2012 18:38 <-- editieren / zitieren --> Unities abgeben: Nur für axi92
|
axi92 Mitglied Konstrukteur
Beiträge: 685 Registriert: 20.02.2010
|
erstellt am: 11. Jul. 2012 07:12 <-- editieren / zitieren --> Unities abgeben:
Gut jetzt weiß allgemein was dort übergeben wird danke! Jedoch in meinem Fall verstehe ich es noch nicht da, wenn ich es richtig vermute. Es nur eine "umdeklarierung" ist was in der klammer steht damit man ThisApplication verwenden kann oder? Aber was muss ich dann mitübergeben??? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 11. Jul. 2012 09:05 <-- editieren / zitieren --> Unities abgeben: Nur für axi92
Moin Einfach ausgedrückt kannst du über das in den Klammern Objekte von einer aufrufenden Sub an die aufgerufene Sub übergeben. Beispiel: Du hast ein PartDocument offen und startest eine Sub, die eine Extrusion erstellen soll. Aus dieser Sub Extrusion rufst du die Sub "SkizzeErstellen" auf. Jetzt wär's ja praktisch wenn in dem Aufruf auch gleich das Dokument mit übergeben wird in dem die Skizze erstellt werden soll oder? Also ruft man Sub "SkizzeErstellen (oPartDoc)" auf und beginnt Sub Skizze erstellen mit Private Sub SkizzeErstellen(ByVal PartDoc as PartDocument). Jetzt hast du in Sub SkizzeErstellen eine Variable PartDoc, die dein PartDocument enthält. Dann könnstest du z.B. gleich mal prüfen, ob PartDoc nicht zufällig Nothing ist (könnte ja sein) und sofort wieder aussteigen oder den drohenden Fehler abfangen. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axi92 Mitglied Konstrukteur
Beiträge: 685 Registriert: 20.02.2010
|
erstellt am: 11. Jul. 2012 10:13 <-- editieren / zitieren --> Unities abgeben:
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 11. Jul. 2012 11:03 <-- editieren / zitieren --> Unities abgeben: Nur für axi92
Hallo Es ist eine optionale Möglichkeit. Niemand zwingt dich dort etwas zu übergeben. Es muß nur identisch auf beiden Seiten sein. Im Klartext, rufst du deine Sub mit "Makros.DWG()" auf, muß es auch "Private Sub DWG()" heißen, sonst erwartet die Sub DWG das du ihr das was in Klammern steht auch übergibst. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axi92 Mitglied Konstrukteur
Beiträge: 685 Registriert: 20.02.2010
|
erstellt am: 11. Jul. 2012 12:30 <-- editieren / zitieren --> Unities abgeben:
Ok wenn ich das aber so mache will er das nicht. Und das ByVal definiert ja das alle ThisApplication als Inventor.Application verwendet werden müssen oder? Weil ThisApplication gibt es ja in VB.NET gar nicht. Ja und hier mein Screen von den Fehlern:
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 11. Jul. 2012 13:09 <-- editieren / zitieren --> Unities abgeben: Nur für axi92
Hallo Nööö, das geht so nich. Ich kann mich irren, meine aber die Subs im Modul müssen Public sein. in deinem Modul sollte es so aussehen: Code: Module Test Public Sub DWG() MsgBox("test") End Sub End Module
und in deiner Form so: Code: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click DWG() End Sub
Außer du willst wirklich Variablen übergeben, dann müssen die in die Klammern. Aber beidseitig (s. mein letzes Post). Und schau dir nochmal an, was ByVal und ByRef bedeutet. Das hat nur mit der Art zu tun, wie übergebene Variablen behandelt werden. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axi92 Mitglied Konstrukteur
Beiträge: 685 Registriert: 20.02.2010
|
erstellt am: 11. Jul. 2012 13:39 <-- editieren / zitieren --> Unities abgeben:
Ja eh^^ Das ist im Modul:
Module Makros Public Sub DWG(ByVal ThisApplication As Inventor.Application) MsgBox("Test") End Sub End Module Und das in der Form1:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Makros.DWG(ByVal ThisApplication As Inventor.Application) 'Versuch1 End Sub
So funktioniert es aber nicht? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 11. Jul. 2012 18:26 <-- editieren / zitieren --> Unities abgeben: Nur für axi92
Hallo Nö, tut es auch nicht. Wie lautet denn der Name deiner Variable InventorApplication? Nehmen wir mal an du hast in deiner Activate-Sub ein Code:
Public Sub Activate(ByVal oAddInSiteObject As Inventor.ApplicationAddInSite, ByVal bFirstTime As Boolean) Implements Inventor.ApplicationAddInServer.Activate'hier könnte noch ein bißchen anderer Code bei dir stehen Dim MyInventor as InventorApplication MyInventor=oAddInSiteObject.Application
stehen. Dann ist MyInventor die Variable deiner InventorApplication. Um die in deine Sub DWG zu übergeben: Code: Module Test Public Sub DWG(ByVal oInventor as Inventor.Application) 'hier sollte aber auch Code kommen, der die Variable nutzt MsgBox("test") End Sub End Module
Und der Aufruf in der Form: Code: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click DWG(MyInventor) End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axi92 Mitglied Konstrukteur
Beiträge: 685 Registriert: 20.02.2010
|
erstellt am: 12. Jul. 2012 07:04 <-- editieren / zitieren --> Unities abgeben:
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 13. Jul. 2012 18:41 <-- editieren / zitieren --> Unities abgeben: Nur für axi92
Hallo Sag mal, liest du nur jedes siebente Wort oder wie kann es sein das man meine Anleitung so beanwortet? Ihc habe gefragt wie die Variable für die Inventor Application in deiner StandardAddIn heißt? In meinem letzten Beitrag steht haarklein drin was du wo hinschreiben sollst. Und dann ersetze bitte in deiner Sub "ThisApplication" mit "oInventor" und dann läuft das auch. Du hast hier ein Verständnisproblem. ThisApplication, bekannt aus VBA gibt es in vb nicht. Von daher rate ich auch immer von der Verwendung von Variablennamen, die Verwechslungsgefahr mit vb/vba-eigenen bietet, dringend ab. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |