Autor
|
Thema: If Bedingung = true, aber Then wird nicht ausgeführt (2734 mal gelesen)
|
FabeSD Mitglied Student
Beiträge: 4 Registriert: 10.11.2009
|
erstellt am: 10. Nov. 2009 15:07 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 177 Registriert: 17.02.2006 V5,R19,SP9
|
erstellt am: 10. Nov. 2009 15:21 <-- editieren / zitieren --> Unities abgeben: Nur für FabeSD
|
FabeSD Mitglied Student
Beiträge: 4 Registriert: 10.11.2009
|
erstellt am: 10. Nov. 2009 15:34 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 177 Registriert: 17.02.2006 V5,R19,SP9
|
erstellt am: 10. Nov. 2009 16:20 <-- editieren / zitieren --> Unities abgeben: Nur für FabeSD
|
pittyplatsh Mitglied
Beiträge: 62 Registriert: 27.12.2008 CATIA V5 R16 SP3
|
erstellt am: 10. Nov. 2009 18:33 <-- editieren / zitieren --> Unities abgeben: Nur für FabeSD
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
Beiträge: 4 Registriert: 10.11.2009
|
erstellt am: 11. Nov. 2009 08:43 <-- editieren / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben: Nur für FabeSD
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
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 / zitieren --> Unities abgeben: Nur für FabeSD
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
Beiträge: 177 Registriert: 17.02.2006 V5,R19,SP9
|
erstellt am: 11. Nov. 2009 10:39 <-- editieren / zitieren --> Unities abgeben: Nur für FabeSD
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 >>)
|