Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Deklaration von Variablen

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:  Deklaration von Variablen (5867 mal gelesen)
BettinaRauch
Mitglied
BA-Studentin, Fahrzeug-System-Engineering


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

Beiträge: 65
Registriert: 06.07.2009

Catia V5 R19

erstellt am: 17. Aug. 2009 08:31    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


Dokument1.pdf

 
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


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

Beiträge: 1385
Registriert: 13.01.2007

WIN 7 64bit
V5R21SP3HF49
3DX/V6 R2016x

erstellt am: 17. Aug. 2009 08: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 Nur für BettinaRauch 10 Unities + Antwort hilfreich

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


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

Beiträge: 65
Registriert: 06.07.2009

Catia V5 R19

erstellt am: 17. Aug. 2009 08:53    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

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


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

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 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 BettinaRauch 10 Unities + Antwort hilfreich

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 String

Sub 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



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

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 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 BettinaRauch 10 Unities + Antwort hilfreich

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


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

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 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 BettinaRauch 10 Unities + Antwort hilfreich

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



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

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 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 BettinaRauch 10 Unities + Antwort hilfreich

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


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

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 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 BettinaRauch 10 Unities + Antwort hilfreich

Hallo,


IMHO geb ich Zoltan da vollkommen recht. Manchmal lässt es sich einfach nicht vermeiden bzw. ist sogar dienlich für de Übersichtkeit wenn man eine globale Variable setzt aber in den meisten Fällen sind Übergabeargumente wesentlich sinnvoller (die Fehler werden einfach schneller gefunden und es ist IMHO logischer aufgebaut, da die Variable in der Übergabe selber deklariert wird (hier wird sie ja auch benötigt und nicht irgendwo im Script))

------------------
MFG Daniel

Systeminformation | Inoffizielle CATIA Hilfeseite | CATIA FAQ | Suche | TraceParts (Normteile...) | 3D Content Central (noch mehr Normteile...)

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

CabinMaster
Mitglied
Diplomingenieur L&R


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

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 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 BettinaRauch 10 Unities + Antwort hilfreich

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


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

Beiträge: 19
Registriert: 11.08.2010

CATIAV5 R19 SP03

erstellt am: 15. Okt. 2010 15:52    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 BettinaRauch 10 Unities + Antwort hilfreich

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 Integer

Sub 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


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

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 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 BettinaRauch 10 Unities + Antwort hilfreich

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

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)2023 CAD.de | Impressum | Datenschutz