Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Einfaches(?) If-Problem

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Einfaches(?) If-Problem (686 mal gelesen)
incredible_cHiller
Mitglied
Maschinenbau Student

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

Beiträge: 8
Registriert: 13.06.2006

erstellt am: 07. Jul. 2006 14: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


code.txt

 
Hallo!
Ich schreibe mir gerade ein Makro, um aus einer Parameterliste automatisch Bohrungen auf einem Bauteil erstellen zu lassen.
Das klappt soweit ganz gut, die Bohrungen werden wie sie sein sollen an den richtigen Ort gesetzt.
Jedoch hat leider jede Bohrung eine verschiedene Tiefe und die hängt "quasi" vom Durchmesser ab. Ich sage "quasi" weil kein direkter Zusammenhang über eine Funktion besteht. Die jeweilige Tiefe liest man über eine Tabelle ab. (30 verschiedene Durchmesser/Tiefen)

Testweise habe ich ein Makro für eine Bohrung erstellt, eine Schleife werde ich später noch hinzufügen.

Nun ist mein Problem recht einfach (glaub ich zumindest) jedoch finde ich den Fehler nicht.
Es geht um ein simple "If-Then-Funktion"
kurz:
Ich lasse den Durchmesser aus der Parameterliste auslesen und mir zur Kontrolle anzeigen. (Durchmesser = 62 kommt dann)
Dann kommt die Bedingung:
If Durchmesser = 62 Then Tiefe = 57 Else Tiefe = 47
Nun lass ich mir den "Tiefe"-Wert zur Kontrolle anzeigen und er ist immer 47!
(Vielleicht anbei den Quellcode anschauen, Problem im letzten drittel)

Womöglich ist es ein Problem mit den Einheiten?!?
Wenn ich den Durchmesser nicht auslese sonder = 62 setze, funktioniert alles.
Mein Parameter-Wert ist 6,2mm in der Tabelle, wenn ich ihn mir durch eine Msgbox anzeigen lasse ist er 0,62.
Da ich ein Problem mit den verschiedenen Trennzeichen vermute (Punkt/Komma) umgehe ich dieses in dem ich den Parameter Wert mit 100 multipliziere. (0,62 -> 62)
Jedoch habe ich es auch schon ohne oder mit anderen Faktoren testweise probiert.

Oh ja, fast vergessen: der Eintrag Tiefe = 20 über den ganzen If-Bedingungen ist nur damit das Programm nicht direkt abbricht.
Eigentlich müsste der Wert ja direkt überschrieben werden...

Sieht vielleicht jemand ein Problem was ich einfach nicht erkenne?
Über jede Hilfe wäre ich sehr dankbar,
Gruß Michael

[Diese Nachricht wurde von incredible_cHiller am 07. Jul. 2006 editiert.]

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


Ex-Mitglied

erstellt am: 10. Jul. 2006 17:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hallo,

ich bin zwar auch nicht der VBA Freak, aber müsste diene If anweisung nicht so aussehen:

If Durchmesser = 62 Then
Tiefe = 57
Else
Tiefe = 47
End if

MsgBox (Tiefe)

Da kann ich mich jetzt aber auch irren. Ich bin mir nicht sicher, ob man das alles so hintereinander schreiben darf. Denn der Code sieht soweit ja richtig aus. Aber du hast das End if am Ende deiner If Anweisung vergessen. Vielleicht liegt es daran.

mfg, heiner

VBSpawn
Mitglied
Programmierer


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

Beiträge: 514
Registriert: 23.08.2005

Sorgfältige Planung ersetzt niemals pures Glück.
--------------
SWX 2005/2006
SE 14-17
AIP 9-11
WinXP+ SP2
--------------

erstellt am: 11. Jul. 2006 08: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 incredible_cHiller 10 Unities + Antwort hilfreich

Hi Heiner,

Ein end if braucht man nicht wenn man alles in einer Zeile schreibt, aber bleib lieber bei dem end if (kann man besser lesen).

und @ Micha versuch mal:

Durchmesser = cLng((oParams.Item(7).Value * 100))

Gruß
Micha

------------------
http://classicvb.org/petition/

       

Zitat:
Interpunktion und Orthographie des Postings sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.

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

daywa1k3r
Moderator
Softwareentwickler




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

Beiträge: 3497
Registriert: 01.08.2002

Alienware m17x, Win7, Inventor2012

erstellt am: 11. Jul. 2006 11:10    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 incredible_cHiller 10 Unities + Antwort hilfreich

Hallo VBSpawn,

wenn du Recht hast, wo von ich ausgehe, und Long * 100 kein Long mehr ist und muss in Long wieder gecastet werden, dann ist das traurig genug. Aber welcher Typ entsteht denn dann draus, wenn

Code:

If Durchmesser = 62 Then Tiefe = 57 Else Tiefe = 47

nicht funktioniert? Denn egal was für numerischer Typ das wird, 62 = 62 muss auf jeden Fall Wahr sein. Oder wird vielleicht ein String draus 

Typsicherheit ist schon ein guter Grund in Richtung .NET zu schauen…

------------------
Grüße daywa1k3r

FX64 Software Solutions

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

VBSpawn
Mitglied
Programmierer


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

Beiträge: 514
Registriert: 23.08.2005

Sorgfältige Planung ersetzt niemals pures Glück.
--------------
SWX 2005/2006
SE 14-17
AIP 9-11
WinXP+ SP2
--------------

erstellt am: 11. Jul. 2006 13:09    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 incredible_cHiller 10 Unities + Antwort hilfreich

Hi ,
Ich denke mal das im double noch Nachkommastellen sind (62,000000005)...  und mit einem einfachen cLng werden diese weggemacht ...
(Ansonsten müsste es ja Funktionieren ... jedenfalls sehe ich keine sonstige Fehler Quellen)


<SCHERZ> Typsicherheit kann ein Fluch oder ein Segen sein .... ich verwende nur 2... Object oder Variant damit der Variant auch mal ein Object werden kann <SCHERZ>

Gruß
Micha


------------------
http://classicvb.org/petition/

       

Zitat:
Interpunktion und Orthographie des Postings sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.

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

daywa1k3r
Moderator
Softwareentwickler




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

Beiträge: 3497
Registriert: 01.08.2002

Alienware m17x, Win7, Inventor2012

erstellt am: 11. Jul. 2006 13:33    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 incredible_cHiller 10 Unities + Antwort hilfreich

Zitat:

Ich denke mal das im double noch Nachkommastellen sind (62,000000005)...  und mit einem einfachen cLng werden diese weggemacht ...

Würde dann die MsgBox nicht 0,62000000005 ausgeben? 

Zitat:

Mein Parameter-Wert ist 6,2mm in der Tabelle, wenn ich ihn mir durch eine Msgbox anzeigen lasse ist er 0,62.

<scherz>Oder wird das vielleicht automatisch gecastet um den Benutzer nicht mit den unnötigen Informationen zu verwirren?    </scherz>

------------------
Grüße daywa1k3r

FX64 Software Solutions

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

mranderson
Mitglied
Entwicklungsingenieur Robotik


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

Beiträge: 70
Registriert: 25.04.2006

IV: Autodesk Inventor 9
VB: Visual Basic 6.0
OS: Microsoft Windows 2000 Professional SP 4
CPU: Intel Xeon 1,7 GHz
Arbeitsspeicher: 1 GB

erstellt am: 11. Jul. 2006 14: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 incredible_cHiller 10 Unities + Antwort hilfreich

Ich hatte genau das gleiche Problem!!!

Ich habe auch über eine If-Schleife zwei Zahlen vergleichen, das eine war ein Double, das andere ein Long. Ich habe sogar ein Debug.Print beider Zahlen gemacht und waren laut dem Debugfenster, ich glaube, bis auf 14 stellen nach dem Komma identisch. Aber trotzdem ging er nicht in die Schleife hinein. Daraus schließe ich, dass aus irgendeinem Grund die 15. Nachkommastelle oder so nicht identisch ist, jedoch nicht mehr angezeigt wird.

Ich habe einfach den Datentyp von Double in Long gewechselt und es gab keinerlei Probleme mehr.

Grüße

MrAnderson alias René

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

VBSpawn
Mitglied
Programmierer


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

Beiträge: 514
Registriert: 23.08.2005

Sorgfältige Planung ersetzt niemals pures Glück.
--------------
SWX 2005/2006
SE 14-17
AIP 9-11
WinXP+ SP2
--------------

erstellt am: 11. Jul. 2006 14:22    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 incredible_cHiller 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von daywa1k3r:

Würde dann die MsgBox nicht 0,62000000005 ausgeben?

Sollte die MsgBox zumindest, allerdings lt ObjectExplorer erwartet die Box keinen bestimmten Prompt Parameter

(Function MsgBox(Prompt, [Buttons As VbMsgBoxStyle = vbOKOnly], [Title], [HelpFile], [Context]) As VbMsgBoxResult)

<kein Scherz> d.h. aber auch das die MsgBox Typeumwandeln kann !<kein Scherz>

ansonsten muss die 62 eine 62 sein (bei mir funzt sein bsp. code)

Ich glaube nur was anderes kommt als Ursache nicht in Betracht.

Gruß
Micha

------------------
http://classicvb.org/petition/

       

Zitat:
Interpunktion und Orthographie des Postings sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.

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


Ex-Mitglied

erstellt am: 11. Jul. 2006 17:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hallo VBSpawn,

ich muß da mal nachhaken, was deine Aussage betrifft.

Zitat:
Ein end if braucht man nicht wenn man alles in einer Zeile schreibt

Wenn ich bei ner If-Schleife alles hintereinander schreibe, dann gibt es mir sofort einen Fehler aus.

Wieso denn das?

mfg, Heiner

VBSpawn
Mitglied
Programmierer


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

Beiträge: 514
Registriert: 23.08.2005

Sorgfältige Planung ersetzt niemals pures Glück.
--------------
SWX 2005/2006
SE 14-17
AIP 9-11
WinXP+ SP2
--------------

erstellt am: 11. Jul. 2006 17:41    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 incredible_cHiller 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von CADHeiner:
Hallo VBSpawn,

ich muß da mal nachhaken, was deine Aussage betrifft.

Wenn ich bei ner If-Schleife alles hintereinander schreibe, dann gibt es mir sofort einen Fehler aus.

Wieso denn das? 

mfg, Heiner


Hallo Heiner,

Wenn der If Block mehr als einen Befehl beinhaltet muss man um bei einer Zeile zu bleiben die Befhle mit einem ':' Trennen z.b.:
If a = b Then Debug.Print "A=B": Debug.Print "FALL A" Else Debug.Print "A<>B": Debug.Print "FALL B"

ich nehme jetzt mal an das du mehrere Befehle hast und dort klappt das nur mit dem ':' ... aber mach es bitte so wie bisher ... damit es nicht allzu unübersichtlich wird...

If a = b Then Debug.Print "A=B": Debug.Print "FALL A" Else Debug.Print "A<>B": Debug.Print "FALL B"

If a = b then
  Debug.Print "A=B"
  Debug.Print "FALL A"
else
  Debug.Print "A<>B"
  Debug.Print "FALL B"
end if

Generell kannst du fast alles in einer Zeile Schreiben ....wenn der doppelpunkt dazwischen steht ...
kopiere das mal in eine sub und führe die mit F8 Schrittweise aus ..

Debug.Print e = 10: f = 20: g = e + f: aw = MsgBox("Hallo " & g, 4): If aw = vbYes Then MsgBox "ja" Else MsgBox "Nein"

------------------
http://classicvb.org/petition/

       

Zitat:
Interpunktion und Orthographie des Postings sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.

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


Ex-Mitglied

erstellt am: 11. Jul. 2006 20:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hallo,

das werde ich morgen gleich mal probieren.
Das wusste ich noch nicht.

Man lernt ja nie aus...10 Punkte für dich.

mfg, Heiner

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