Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Problem mit Wertebereich zwischen 0 und 360

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:  Problem mit Wertebereich zwischen 0 und 360 (1734 mal gelesen)
Christian.O
Mitglied
Konstrukteur


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

Beiträge: 1212
Registriert: 17.07.2009

erstellt am: 31. Mai. 2010 23:16    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


CAD.de.rar


Kompletter_Kreis_3D.jpg

 
Servus,

ich muss mich wieder mal mit einer sicherlich lächerlichen Frage an die Experten werden.
Anbei ein vba Project mit dem Ausschnitt aus einem etwas größeren Makro. Der Hintergrund des Makros ist jener, dass ich den Startwinkel des Ersten Buchstabens mittels einer ComboBox angeben will. Die Schriftgröße und den Durchmesser der Schrift hab ich soweit hinbekommen. Anbei noch ein Beispielbild was ich genau vor habe.

Nun steh ich aber an dem Problem an, dass ich mit dem Drücken des "Start" Button den Wert abfrage und ggf. ändere. Die Änderung von einem negativen Werte in einen positiven klappt auch noch. Nur wenn ich Werte wischen 37 und 99 eingebe, erhalte ich die Meldung, dass der Startwinkel nicht größer als 360° sein darf. Nur ist aber der angegebene Wertebereich deutlich unter 360°. Irgendwie steh ich total auf der Leitung und bitte deshalb um Hilfe.

Danke.

------------------
Mit freundlichen Grüßen aus Tirol
Christian Obholzer

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 01. Jun. 2010 06: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 Christian.O 10 Unities + Antwort hilfreich

Servus
leider kann ich die Datei nicht öffnen, vermute aber dass die Typkonvertierung der Inputvariable schief läuft. Konvertierst du den Inputstring in eine Zahl (zB Double mit CDbl)?

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

Christian.O
Mitglied
Konstrukteur


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

Beiträge: 1212
Registriert: 17.07.2009

erstellt am: 01. Jun. 2010 06: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


Code.txt

 
Servus Bernd,

anbei der Code als Textfile. Was muß ich machen, damit jeder dieses vba Project aufmachen kann?

------------------
Mit freundlichen Grüßen aus Tirol
Christian Obholzer

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

AndyMF
Mitglied
Betriebsmittelkonstrukteur


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

Beiträge: 90
Registriert: 16.09.2008

Windows Xp64 SP2
Catia V5 R16 Sp5 HF39 (Audi) 32bit und 64bit
Catia V5 R16 (DC) 32bit/64bit
Catia V5 R17 SP3 HF38 (BMW) 32bit/64bit
Catia V5 R19 (Audi)32bit/64bit

erstellt am: 01. Jun. 2010 08:15    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 Christian.O 10 Unities + Antwort hilfreich

Guten morgen
was ich als Problem sehe ist deine Abfrage der combobox3.value
setz sie mal in Val(me.combobox3.value) dann sollte das problem behoben sein.

Grüsse
Andy

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

Christian.O
Mitglied
Konstrukteur


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

Beiträge: 1212
Registriert: 17.07.2009

erstellt am: 01. Jun. 2010 08:32    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

Servus,

Danke für deine Antwort. Wenn ich hier ElseIf (Startwinkel = True) And Val(Me.ComboBox3.Value >= "360") eingebe bekomm ich zwar keine Fehlermeldung mehr wenn der Startwinkel 45° beträgt. Nur wenn ich eine Zahl die größer als 360 ist eingebe bekomm ich auch keine Meldung mehr.

Hab ich das überhaupt so umgesetzt wie du gemeint hast?

------------------
Mit freundlichen Grüßen aus Tirol
Christian Obholzer

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

AndyMF
Mitglied
Betriebsmittelkonstrukteur


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

Beiträge: 90
Registriert: 16.09.2008

Windows Xp64 SP2
Catia V5 R16 Sp5 HF39 (Audi) 32bit und 64bit
Catia V5 R16 (DC) 32bit/64bit
Catia V5 R17 SP3 HF38 (BMW) 32bit/64bit
Catia V5 R19 (Audi)32bit/64bit

erstellt am: 01. Jun. 2010 08:35    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 Christian.O 10 Unities + Antwort hilfreich

Servus,
nein ich meinte es  ElseIf (Startwinkel = True) And (Val(Me.ComboBox3.Value) >= "360") so. 
Das Problem ist das du Combobox oder auch Textfelder erst in Werte umwandeln musst und das geht am besten mit Val(textfeld.value) somit wird der String von einem Feld umgewandelt.

Grüsse
Andy

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 01. Jun. 2010 08: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 Christian.O 10 Unities + Antwort hilfreich

Servus
Müsse es dann nicht:
ElseIf (Startwinkel = True) And (Val(Me.ComboBox3.Value) >= 360 heißen? (Typ Double)

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

Christian.O
Mitglied
Konstrukteur


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

Beiträge: 1212
Registriert: 17.07.2009

erstellt am: 01. Jun. 2010 08: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

Servus Andy,

DANKE. Es funktioniert.

------------------
Mit freundlichen Grüßen aus Tirol
Christian Obholzer

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

AndyMF
Mitglied
Betriebsmittelkonstrukteur


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

Beiträge: 90
Registriert: 16.09.2008

Windows Xp64 SP2
Catia V5 R16 Sp5 HF39 (Audi) 32bit und 64bit
Catia V5 R16 (DC) 32bit/64bit
Catia V5 R17 SP3 HF38 (BMW) 32bit/64bit
Catia V5 R19 (Audi)32bit/64bit

erstellt am: 01. Jun. 2010 08: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 Christian.O 10 Unities + Antwort hilfreich

Servus
sry fehler von mir die " bei 360 müssen dann natürlich weg !

Grüsse aus Ingolstadt
Andy

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: 01. Jun. 2010 09:44    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 Christian.O 10 Unities + Antwort hilfreich


CAD.de.rar

 
Hallo Christian  ,

ich habe die ganze Sache mal ein wenig umgeschrieben und strukturiert. Jetzt kommt die Erklärung dazu  :

ALLGEMEIN

Zitat:
anbei der Code als Textfile. Was muß ich machen, damit jeder dieses vba Project aufmachen kann?

Wähle die Form bzw. das Modul (respektive das Klassenmodul) aus und klicke auf File -> Export. VBA sichert jetzt nur das Objekt selber und nicht dein ganzes CATvba Projekt. Innerhalb des Projekt sind nämlich mehr Daten gespeichert als nur die Objekte. Hier finden sich z.B. die Verweise (machten in deinem Fall Probleme weil du auf einer 64bit Installation arbeitest...diese werden von einer 32bit Version nicht erkannt => MISSING REFERENCES (müssen explizit deaktiviert werden erst dann läuft das Makro auch bei anderen Leuten)). Sicherst du hingegen nur das/die Objekt/Objekte müssen die anderen Anwender ein eigenes Projekt anlegen in das die Objekte einzufügen werden können. Beim Anlegen von eigenen Projekten können natürlich keine Referenzen fehlen.

CODE


  • Die globalen (Private) Deklarationen solltest du wenn es geht löschen. Wird eine Variable global deklariert, existiert sie im HEAP (Arbeitsspeicher) während der kompletten Laufzeit des Makros. Dies ist natürlich nicht sehr performant vor allem wenn man die Variable nur einmal braucht, der Platz im Arbeitsspeicher aber reserviert ist. Die globalen Variablen kannst du auch alle an die entsprechenden Routinen und Funktionen übergeben. Endet die Routine bzw. die Funktion ist auch die Gültigkeit der Variable zu Ende. Der Garbage Collector löscht diese dann aus dem Arbeitsspeicher
  • Variablen sollten immer auch bei der Deklaration mit dem Datentyp deklariert werden (z.B. Dim Box as vbMsgBoxResult). Sonst nimmt VBA immer den größt möglichen Datentyp (schlechte Performance) und es kommt aufgrund von nicht eindeutig definierten Datentypen zu schwer debuggbaren Fehlern.
  • Lange If...ElseIf...then-Schleifen sind nicht performant. Hier ist es sinnvoller eine Select...Case Anweisung zu setzen da diese nach Eintreffen eines Falls automatisch endet.
  • Du solltest nicht alles in eine Routine reinpacken. Übersichtlicher ist es wenn du das Ganze mit Funktionen aufbaust. Diese kannst du beliebig oft aus deiner Hauptroutine aufrufen (mit variablen Übergabewerten).
  • Du solltest dir ein paar Namenskonventionen für deine Variablen überlegen. Eine Variable "Startwinkel" die noch dazu ohne Datentyp deklariert ist wird zur absoluten Verwirrung führen wenn das Makro größer wird. Zu den Namenskonventionen sage ich nach der Liste noch etwas.

NAMENSKONVENTIONEN FÜR VARIABLEN
Variablen sollten in der CamelCase-Schreibweise erstellt werden (z.B. StartValue). Des Weiteren sollte vor jeder Variablen der Gültigkeitsbereich festgelegt werden (z.B. intStartValue = intern (also nur in Routine oder nur in Funktion) verwendete Variable, gloStartValue = globale (in allen Routinen und Funktionen) verwendete Variable, uebStartValue = Variable für Übergabe an Funktion (d.h. der Wert der Variablen wird aus einer anderen Routine bzw. Funktion an die aktuelle weitergegeben)). Der letzte Bestandteil eines Variablennamens besteht aus dem Datentyp (z.B. intStartValueDbl = interne Variable mit dem Datentyp Double). Hierbei sollten die Suffixe der TypeConversation Liste folgen (z.B. Int = Integer, Dbl = Double, Str = String, Sbg = Single, Obj = Object, usw.)

UND WARUM DAS ALLES?
Makro´s, Software, etc. sollte immer so programmiert werden das die Routinen und Funktionen auch in anderen Projekten eingesetzt werden können. Schreibt man jetzt alles durcheinander (Namenskonventionen) oder definiert man keine Datentypen so ist dies nur schwer möglich. Des Weiteren kann man die Projekte auch noch nach Jahren ändern da man sich eine eindeutige Struktur anlegt. Das selbe gilt ja auch für die CATIA Methoden.

Ich hoffe das hilft hier ein bisschen. Anbei noch der Code in dem die oben genannten Sachen umgesetzt wurden. Das Ganze liegt als exportierte Form vor. im *.rar File sind zwei Dateien. In der einen wird der eigentliche Quellcode gespeichert und in der anderen die UserForm selber (Eigenschaften, etc.) Zum Importieren der Form einfach auf File -> Import -> UserForm1.frm klicken. Die *.frx muss nicht ausgewählt werden 

------------------
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

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: 01. Jun. 2010 10: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 Christian.O 10 Unities + Antwort hilfreich

Hallo Daniel,

wie so oft merkt man, dass du schon ganz schön Erfahrung hast, allerdings kann ich Dir diesmal nicht in allen Punkten zustimmen.

Deine Namenskonvention finde ich sehr interessant (gut), möchte allerdings auch anmerken, dass es auch andere gibt, dazu möchte ich mal ein paar von meinen anreißen:

Gültigkeitsbereich als erstes finde ich gut, bei mir pub_<Variable> und priv_<Variable>, da ich sie ja als Public oder Private definiere. Nach dem _ folgt bei mir direkt die ungarische Notation priv_int<Variable> ist die Variable nur lokal gültig, so entfällt die Gültigkeit, also int<Variable>. Werden die Variablen übergeben, so steht vorran, was mit ihnen geschieht i_ (Input) o_ (Output), io_ (beides) (io_intMeineVariable). Dadurch kann ich direkt beim Funktionsaufruf sehen, was mit diesen Variablen geschehen wird und welche ich zurück bekomme, ich nutze also nicht das ueb. Dies hat auch einen weiteren Vorteil: Dassault macht dies ähnlich im CAA, wenn auch leider nicht genau so.
Bei Single hast Du Dich sicher nur vertippt.  

Edit: Worauf ich eigentlich hinaus wollte: Ich habe Angst, dass es durch das int (für Intern bei Daniel) und dem int (für Integer bei mir) zu Verwechselungen kommen könnte, wenn andere Programmierer dran arbeiten, zudem teile ich gern meine Erfahrung. 

------------------
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

[Diese Nachricht wurde von HoBLila am 01. Jun. 2010 editiert.]

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: 01. Jun. 2010 10:24    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 Christian.O 10 Unities + Antwort hilfreich

Hallo Henry,

ich Stimme dir natürlich vollkommen zu. Eine Namenskonvention ist IMHO nur unter Absprache gültig da es ja nur eine Konvention nicht eine DIN, ISO, etc. ist. Somit sehe ich die Wahrscheinlichkeit das einer das int für internal mit dem int für Integer verwechselt als ziemlich gering. Sie sind zwar von der Buchstabenreihenfolge gleich dennoch ist das eine ein Präfix und das andere ein Suffix.

Namenskonventionen sollten allgemein von jedem Programmieren selber entwickelt und ausgetauscht (eventuell als Kommentar weitergegeben) werden. Ich finde deine Namenskonvention jedoch interessant vor allem weil sie so auch im CAA eingesetzt wird (das wusste ich nicht da ich keinen Zugrang diesbezüglich hab  )

------------------
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

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