Autor
|
Thema: Deklaration von Variablen (5867 mal gelesen)
|
BettinaRauch Mitglied BA-Studentin, Fahrzeug-System-Engineering
Beiträge: 65 Registriert: 06.07.2009 Catia V5 R19
|
erstellt am: 17. Aug. 2009 08:31 <-- editieren / zitieren --> Unities abgeben:
Hallo, hab immer noch ein Problem mit der Deklaration von meinen Variablen. Will die global deklarieren, damit sie auch in meinen Funktionen noch gültig sind. Ich hab inzwischen im Internet gelesen, dass man die dann nicht mit 'Dim' sondern mit 'Private' deklarieren muss. Allerdings ist mir die Stelle im Code noch nicht wirklich klar. Wenn ich sie vor das Sub CATMAin() schreib, kommt die erste Fehlermeldung Wenn ich sie ins Sub CATMain () schreib, kommt die zweite Fehlermeldung (da mag er das Wort 'Private' nicht) und Wenn ich sie vor eine function schreib, kommt die dritte Fehlermeldung... Gruß Betty Kann mir jemand einen Tipp geben? Hab echt schon ne Weile im Internet gesucht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tberger Mitglied Application Manager CATIA V5 / V6
Beiträge: 1385 Registriert: 13.01.2007 WIN 7 64bit V5R21SP3HF49 3DX/V6 R2016x
|
erstellt am: 17. Aug. 2009 08:50 <-- editieren / zitieren --> Unities abgeben: Nur für BettinaRauch
Die Private oder Public Deklarationen setzt du vor dem Code, der mit dem Eintrittspunkt "Sub CATMain() beginnt Bsp: Public STRINGFILE As String Private NEWSHEET As Boolean Sub CATMain ()
.... [hier dein Code]
End Sub
------------------ Grüße aus dem Rheinland Thomas +++++++++++++++++++++++++++++++++ CATIA - eine Laune der Natur ... "Phase 2 in CATIA V5" - www.tobeplus.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BettinaRauch Mitglied BA-Studentin, Fahrzeug-System-Engineering
Beiträge: 65 Registriert: 06.07.2009 Catia V5 R19
|
erstellt am: 17. Aug. 2009 08:53 <-- editieren / zitieren --> Unities abgeben:
Hab es inzwischen rausbekommen: Die Deklaration der Variablen kommt vor das Sub (wie oben schon geschrieben), die Wert-Zuweisung - da muss man erstmal draufkommen - steht trotzdem immer im Sub. Das klingt jetzt für die richtigen Programmierer wahrscheinlich recht logisch. Für die Einsteiger ist es das (anscheinend) nicht. Also entschuldigt die Frage... Gruß Betty Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 17. Aug. 2009 08:58 <-- editieren / zitieren --> Unities abgeben: Nur für BettinaRauch
Hallo Bettina, also kurz zu den Deklarationen: Dim deklariert eine Variable innerhalb einer Prozedur z.B. innerhalb der CATMain) Private deklariert eine Variable global für diese Library (z.B. in CATvba innerhalb eines Moduls. Zugriff von allen Prozeduren des Moduls) Public deklariert eine Variable für die gesamte Library (z.B. in CATvba innerhalb eines Projekts (Library). Zugriff von allen Prozeduren aller Module der Library) Jetzt zu deinem Problem. Hier mal ein kurzes Beispielscript wo welche Deklaration zu stehen hat Code:
Public myPublicVar as String Private myPrivateVar as StringSub CATMain() Dim myInternVar as String myInternVar = "interne Variable...nur in CATMain verfügbar" myPublicVar = "globale Variable...in allen Prozeduren verfügbar" myPrivateVar = "globale Variable...in allen Prozeduren verfügbar" Test() End Sub Sub Test() 'Funktioniert nicht (sobald du außerhalb der CATMain kommst wird der Inhalt der Variablen gelöscht btzw. ist nicht verfügbar) If myInternVar = "" then '... End If 'Funktioniert da die Variable zwar in der CATMain "gefüllt" wurde aber in allen Prozeduren verfügbar ist If myPublicVar = "" then '... End If 'Funktioniert da die Variable zwar in der CATMain "gefüllt" wurde aber in allen Prozeduren verfügbar ist If myPrivateVar = "" then '... End If End Sub
Kopiere mal den ganzen Code in den VB-Editor und lass alle drei Variablen überwachen. Jetzt machst du ein Step-byStep debugging und schaust was mit den Variablen passiert. => Innerhalb der CATMain werden alle Variablen "gefüllt". Sobald du aber aus der CATMain in die Prozedur "Test" springst wird der Inhalt der Variable (myInternVar) nicht mehr Verfügbar sein. Sie ist also leer und du kannst sie nicht vergleichen. Der Inhalt der beiden anderen Varaibeln hingegen bleibst verfügbar weil sie in allen Prozeduren mit dem selben Inhalt existieren. [EDIT] Puh viel zu spät dran...aber immer noch schneller wie Ruebe [/EDIT] ------------------ MFG Daniel Die KATJA ist halt doch nur ne zickige Französin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Ehrenmitglied V.I.P. h.c. Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 Drauß vom Walde komm ich her, verlaufen hab ich mich gar sehr ;-)
|
erstellt am: 17. Aug. 2009 08:59 <-- editieren / zitieren --> Unities abgeben: Nur für BettinaRauch
Moin, auch wenn ACAD-VBA drübersteht, die basics sind für uns alle gleich. Schau also hier mal rein KLICK. So ziemlich in der Mitte ist der Part mit den Variablen, deren Deklariation, Gültigkeitsbereich, Lebenszeit und die Sache mit Static, Const, Option explicit usw. HTH PS: ok, bißchen spät dran gewesen, sorry, vielleicht hilft's aber trotzdem mit dem Tutorial, ich laß die AW also stehen. ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... System-Info | Excel -Suche | RuA-Suche | FAQ-ACAD | CAD.de-Hilfe | Sei eine Antilope Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CabinMaster Mitglied Diplomingenieur L&R
Beiträge: 19 Registriert: 31.07.2009 Windows XP Catia V5 R18 [und nein: Katja mag nur einen Prozessor zur Zeit benutzen] Makro mit CATVBS
|
erstellt am: 05. Nov. 2009 12:13 <-- editieren / zitieren --> Unities abgeben: Nur für BettinaRauch
Eine Frage zu globalen Variablen. Ich benutze veschiedene Skripte, welche von einer Funktion nacheinander aufgerufen werden. Sieht etwa so aus: Sub CATmain () Params(0) = ProgramHome Params(1) = InputMain Params(2) = OutputMain Params(3) = Matlab E = CATIA.SystemService.ExecuteScript (ProgramHome, catScriptLibraryTypeDirectory, "CabCAT_Shell.catvbs" , "CATmain", Params) E = CATIA.SystemService.ExecuteScript (ProgramHome, catScriptLibraryTypeDirectory, "CabCAT_OHS.catvbs" , "CATmain", Params) E = CATIA.SystemService.ExecuteScript (ProgramHome, catScriptLibraryTypeDirectory, "CabCAT_MakeSplit.catvbs" , "CATmain", Params) 'E = CATIA.SystemService.ExecuteScript (ProgramHome, catScriptLibraryTypeDirectory, "CabCAT_PC_Window.catvbs" , "CATmain", Params) 'E = CATIA.SystemService.ExecuteScript (ProgramHome, catScriptLibraryTypeDirectory, "CabCAT_Parameter.catvbs" , "CATmain", Params) End Sub Ich kann nun mit dem Befehl "Public" leider keine globalen Variablen setzen, jedenfalls gelingt es mir nicht. Gibt es eine Möglichkeit eine Information außer durch die Übergabevariable "Params" zu transportieren? Danke für Tipps, weitere Fragen zum Programm gerne an mich. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 05. Nov. 2009 18:03 <-- editieren / zitieren --> Unities abgeben: Nur für BettinaRauch
Hallo, wenn die genannte Skripte nicht unbedingt in einzelne Dateien sein sollen, dann kannst du die Datenübergabe auch über globale Variablen machen. Daten an externe Skripte kann man nur über die Art wie du es geschrieben hast übergeben. Es ist aber keine schöne Art der Programmierung, da man so leicht Fehler machen kann, die sehr schwer zu finden ist (eine globale Variable wird irgendwo gesetzt, wo es nicht sein sollte und auch nicht erwartet wird). Geschickter ist die Übergabe als Argumente. Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 06. Nov. 2009 05:58 <-- editieren / zitieren --> Unities abgeben: Nur für BettinaRauch
|
CabinMaster Mitglied Diplomingenieur L&R
Beiträge: 19 Registriert: 31.07.2009 Windows XP Catia V5 R18 [und nein: Katja mag nur einen Prozessor zur Zeit benutzen] Makro mit CATVBS
|
erstellt am: 09. Nov. 2009 15:02 <-- editieren / zitieren --> Unities abgeben: Nur für BettinaRauch
Danke. Ich habe es über die Übergabe-Parameter gemacht. Das ist in der Tat der sauberste Weg. Die Skripte müssen aus Gründen der Übersichtlichkeit in verschiedene Dateien, sonst hat man fix 1000 Zeilen Code und scrollt sich die Fingerkuppen blutig. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
matzehahn Mitglied Student
Beiträge: 19 Registriert: 11.08.2010 CATIAV5 R19 SP03
|
erstellt am: 15. Okt. 2010 15:52 <-- editieren / zitieren --> Unities abgeben: Nur für BettinaRauch
Kann man manche Klasse nicht "Public" deklarieren? Ich möchte im Module Klassen deklarieren da ich sie in mehreren Forms und Subs nutze. Mit der Selection habe ich allerdings ein Problem. Vom Module aus starte ich meine erste UserForm in der die Selection noch deklariert ist. Starte ich von der UserForm meine nächste ist die Selection nicht mehr deklariert. Code: Public Bauteil As Part Public USel As Selection Public Test As IntegerSub CATMain() Set Bauteil = CATIA.ActiveDocument.Part Set USel = CATIA.ActiveDocument.Selection Test = 2 UserForm1.Show End Sub Private Sub CommandButton_Click()
'Code Beispiele MsgBox Test 'geht Set Wzk3D = Bauteil.HybridShapeFactory 'geht USel.Clear 'geht UserForm1.Hide UserForm2.Show End Sub Private Sub CommandButton_Click()
MsgBox Test 'geht Set Wzk3D = Bauteil.HybridShapeFactory 'geht USel.Clear 'geht nicht End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 15. Okt. 2010 16:26 <-- editieren / zitieren --> Unities abgeben: Nur für BettinaRauch
Keine Variablen und schon gar nicht Public im Forumlar definieren. ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |