Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  If Bedingung = true, aber Then wird nicht ausgeführt

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:  If Bedingung = true, aber Then wird nicht ausgeführt (2734 mal gelesen)
FabeSD
Mitglied
Student

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

Beiträge: 4
Registriert: 10.11.2009

erstellt am: 10. Nov. 2009 15:07    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

Hallo,

ich habe ein Problem mit folgenden Zeilen in meinem Programm:

Dim aOffsetValueParts() As String

For K = 1 To UBound(aOffsetValueParts) + 1

bOffsetDirection = aArrayWithOffsets(i - 1).OffsetDirection

If bOffsetDirection = True Or bOffsetDirection = 1 Then
  aOffsetValueParts(K - 1) = "+" & aOffsetValueParts(K - 1)
ElseIf bOffsetDirection = False Or bOffsetDirection = 0 Then
  aOffsetValueParts(K - 1) = "-" & aOffsetValueParts(K - 1)
End If

Der Wert von bOffsetDirection wird als "True" angezeigt, die If Bedingung ist also erfüllt, aber die zugehörige Then Anweisung wird übersprungen und auch bei "Select Case"-Abfrage wird die Anweisung übersprungen.
Die Anweisung an sich funktioniert ohne die If-Abfrage, ich habe aber auch schon "einfachere" Anweisungen ausprobiert.
Der Fehler muss wohl bei "bOffsetDirection" liegen, aber der ist ja vom Typ Boolean, kann also nur "true" oder "false" annehmen.

Falls jemand ne Idee hat, wo der Fehler liegen könnte, wäre ich für Anregungen dankbar.
Danke für eure Mühe.

Grüße,

FabeSD

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

CAMiCADse
Mitglied



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

Beiträge: 177
Registriert: 17.02.2006

V5,R19,SP9

erstellt am: 10. Nov. 2009 15:21    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 FabeSD 10 Unities + Antwort hilfreich

Hallo FabeSD,
versuch mal

Code:
If bOffsetDirection Then

Gruß
CAMiCADse

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

FabeSD
Mitglied
Student

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

Beiträge: 4
Registriert: 10.11.2009

erstellt am: 10. Nov. 2009 15:34    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

Hi,

okay, das funktioniert...dann führt er die Anweisung aus, aber macht er jetzt überhaupt noch eine Fallentscheidung?
Also schreibt er dann ein "+" davor, wenn bOffsetDirektion true ist und ein "-", wenn false?

Danke für die schnelle Hilfe,

FabeSD

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

CAMiCADse
Mitglied



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

Beiträge: 177
Registriert: 17.02.2006

V5,R19,SP9

erstellt am: 10. Nov. 2009 16:20    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 FabeSD 10 Unities + Antwort hilfreich

Probier es doch einfach aus...

Ganz Allgemein:
"If x Then" prüft den Ausdruck x auf True, ist also nix anderes als "If x=True Then",
ausser, dass es funktioniert


Gruß
CAMiCADse

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

pittyplatsh
Mitglied



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

Beiträge: 62
Registriert: 27.12.2008

CATIA V5 R16 SP3

erstellt am: 10. Nov. 2009 18: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 FabeSD 10 Unities + Antwort hilfreich

Eine If (Bedingung) Then prüft immer die Bedingung auf True   If Not (Bedinung) Then würde die Bedingung auf False prüfen.

If (Bedingung = True) Then würde also prüfen, ob der Wert der Bedingung gleich True ist, was er nicht sein wird (ist ja ein Double). If wird also False zurückgeben und da beide If-Bedinungen nur die Anweisungen ausführen, wenn True ausgegeben wird, wird gar nichts gemacht.

Code:
If bOffsetDirection = True Or bOffsetDirection = 1 Then
MsgBox("bOffsetDirection = True Or bOffsetDirection = 1")
  aOffsetValueParts(K - 1) = "+" & aOffsetValueParts(K - 1)
ElseIf bOffsetDirection = False Or bOffsetDirection = 0 Then
MsgBox("bOffsetDirection = False Or bOffsetDirection = 0")
  aOffsetValueParts(K - 1) = "-" & aOffsetValueParts(K - 1)
Else
MsgBox("Der Wert von bOffsetDirection war weder True oder False, noch 1 oder 0")
End If

Hier solltest du immer den letzten Text erhalten als Message.

Liebe Grüße,
pitty

Edit: sehe grade dass ich mich verlesen habe^^ OffsetDirection ist ja ein Objekt vom Typ Bool. Dann kann ich mir das nur so erklären, dass ein boolscher Wert nicht auf einen boolschen Wert geprüft werden kann. Warum... gute Frage, es ist einfach nicht nötig da der Wert selber schon vom Typ Bool ist.

[Diese Nachricht wurde von pittyplatsh am 10. Nov. 2009 editiert.]

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

FabeSD
Mitglied
Student

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

Beiträge: 4
Registriert: 10.11.2009

erstellt am: 11. Nov. 2009 08:43    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

Hi,

vielen Dank, mit

If bOffsetDirection

Else

funktioniert es. Komischerweise klappt die Abfrage bei anderen Bools "If Bool = true" 
Naja, die Erklärung macht jedenfalls Sinn 

Danke, kann geschlossen werden.

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

Tstone
Mitglied
Werkzeugkonstrukteur


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

Beiträge: 163
Registriert: 04.06.2003

Dell Precision 470
Intel Xeon CPU 3,00GHz
2GB Ram
Microsoft Windows XP
Catia V5 R18 SP6
VB2005

erstellt am: 11. Nov. 2009 09:21    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 FabeSD 10 Unities + Antwort hilfreich

Hallo Fabe SD
in VBA ist der Integerwert zu True -1
das löst zwar nicht dein Problem aber kann mal hilfreich sein.

------------------
Grüße TStone
   "Respektiere die Macht der Worte, wähle sie mit Bedacht!"

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

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



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

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 11. Nov. 2009 09: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 FabeSD 10 Unities + Antwort hilfreich

Hallo FabeSD,
in meinen Augen ist nicht klar erkenntlich, wie die Variable deklariert ist. Im Normalfall wird eine If Then Anweisung mit einem True Ergebnis durchgeführt. Wenn also eine Variable den Wert True hat, dann brauch man nicht mehr über VariableA = True (was true ergeben würde, wenn der Wert true ist) darauf abfragen. Wenn die Variable allerdings als String, der auch ein True beinhalten könnte, deklariert ist, dann müsste die If Then Anweisung allerdings so "If VariableA = "True" then" aussehen. Das "True" ist nämlich nicht dasselbe wie das True. Vom Prinzip her geht jedoch bei einer Boolschen Variable beides, wenn man nach True abfragen möchte.

------------------
MFG
Rick Schulz
      Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

Konfuzius sprach: "Wer sich das Alte noch einmal vor Augen führt, um das Neue zu verstehen, der kann anderen ein Lehrer sein."

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

CAMiCADse
Mitglied



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

Beiträge: 177
Registriert: 17.02.2006

V5,R19,SP9

erstellt am: 11. Nov. 2009 10:39    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 FabeSD 10 Unities + Antwort hilfreich

Hallo,

es handelt sich um eine CATVBA spezifisches Problem.
Um sämtliche Klarheiten zu beseitigen hier der Auszug aus der V5-Automation   :

Zitat:
Support of boolean type in CATVBA
There is a known limitation concerning the usage of the Boolean type in the V5 Automation methods invoked from VBA. In V5 applications, the Boolean type
is defined as an 'unsigned char' where the VBA definition is a short. When a V5 method returns True, the returned integer value is 1, though VBA is expecting -1. Because of this difference, the following VBA code will not work as expected (the method boolMethod returns True) :

If myObj.boolMethod() = True Then // This test will fail
...
End If

to correct this limitation, you have to write some code like this :

If myObj.boolMethod() Then End If

or

If myObj.boolMethod() != False Then
...
End If

For the same reason, the 'Not' operator cannot be applied directly on the returned value of such method:

Not(myObj.boolMethod())

will return True instead of returning False. To use correctly the 'Not' operator you have to use a variable to store the boolean value before applying the operator :

Dim myBool
myBool = myObj.boolMethod()
Not(myBool)

will correctly return False


Note that this limitation is specific to VBA and is not concerning VBScript.


Gruß
CAMiCADse

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