Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  In VBA - Not auf Catia-Befehle nicht möglich

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:  In VBA - Not auf Catia-Befehle nicht möglich (4041 mal gelesen)
gladly
Mitglied



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

Beiträge: 56
Registriert: 02.11.2007

Catia V5R19SP9HF40 64Bit
Windows XP Pro x64

erstellt am: 03. Mrz. 2010 13: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

Guten Tag allesamt.

Vorab - Ich habe die Suche genutzt (und nichts gefunden), über konkrete links würde ich mich aber auch freuen.

Informationen zum System:
PC mit Windows XP x64 SP2
Catia-Version wo der fehler auftrat: Catia V5 R19 HotFix 4 (aber auch R16 und R18 fehlerhaft getestet!)
Lizenz: HD2 - Lizenzpaket

Problemstellung:
Es ist mir nicht möglich in einem VBA-Projekt (in CatScript/CatVBA noch nicht probiert) möglich Catia-Befehle verneint zu prüfen. Beispiel: (b = ein Part-Body)

Code:

If b.InBooleanOperation Then 'geht
If not b.InBooleanOperation Then 'geht nicht -> immer Wahr
if If b.InBooleanOperation = true Then 'geht nicht (immer wahr) -> Wahrscheinlich unterschiedliche konstante von VB und C(++)
if If b.InBooleanOperation = true Then 'geht nicht (immer wahr) -> siehe oben

Derzeit habe ich deshalb solche Konstrukte, was nicht gerade schön ist!

Code:

If b.InBooleanOperation Then
Else
  b.name = b.Parent.Parent.name
End If

Probleme bestehen eben bei allen Catia-Funktion mit Boolean-Rückgabe.

Code:

if CATIA.FileSystem.FileExists("PfadZuDatei") 'geht
if not CATIA.FileSystem.FileExists("PfadZuDatei") 'geht nicht -> wie oben immer wahr, egal ob datei existiert oder nicht...

Vielen Dank schon einmal im Voraus.

gladly

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

tomtom1972
Mitglied
dipl ing maschinenbau


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

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 03. Mrz. 2010 14:05    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 gladly 10 Unities + Antwort hilfreich

Hallo,

probiers mal so:

bFileEx = CATIA.FileSystem.FileExists("PfadZuDatei")
If Not bFileEx Then

dann dürftest du keine Probleme mehr haben.

Gruß

------------------
tomtom1972

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

gladly
Mitglied



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

Beiträge: 56
Registriert: 02.11.2007

Catia V5R19SP9HF40 64Bit
Windows XP Pro x64

erstellt am: 03. Mrz. 2010 14:51    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,
vielen dank für die schnelle antwort.

Die Idee hatte ich noch nicht (zumal ja auch mehr als normal...)

Leider hat aber auch dies nicht zum gewünschten erfolg geführt.

Code:

Sub NotTest()
Dim b As Boolean
b = CATIA.FileSystem.FileExists("C:\perl123.pl") 'Geht
MsgBox b 'True wenn datei da - False wenn nicht
b = Not b
MsgBox b 'IMMER TRUE
End Sub

Ich dachte schon fast der not operator hat nen tick, aber hier ein test, das das widerlegt. Einfach selsam... Ist dieses Verhalten irgendjemandem bekannnt.

Code:

Sub NotTest2()
Dim b As Boolean
b = False
MsgBox b 'Richtig ->False
b = Not b
MsgBox b 'Richtig -> True und auch False wenn oben True
End Sub

Vielen dank nochmals im Voraus.

gladly

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

tomtom1972
Mitglied
dipl ing maschinenbau


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

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 03. Mrz. 2010 15:29    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 gladly 10 Unities + Antwort hilfreich

Hallo,

deinen Code verstehe ich nun gar nicht.
Not ist nicht für eine Zuweisung gedacht, sodern für eine Negation, d.h.
b = Not b geht sowieso nie.
b ist False, wenn die Datei nicht existiert, und dann tritt ssomit die If-Abfrage
If Not b Then
End if
ein, die ja nur eine verkürzte Schreibweise von
If Not b = True Then
End if
ist, und das ist wiederum das gleiche wie
If b = false Then
End if
Bei mir funktioniert das.
Wie gesagt, willst du eine Zuweisung, dann heisst es:
b = False

Gruß

------------------
tomtom1972

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

gladly
Mitglied



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

Beiträge: 56
Registriert: 02.11.2007

Catia V5R19SP9HF40 64Bit
Windows XP Pro x64

erstellt am: 03. Mrz. 2010 15:55    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

Wenn nicht angegeben wird immer auf True geprüft - Ja. Jedoch wird gerade bei Sprachübergreifenden Zugriffen erwähnt, das man nicht direkt "= True" prüfen soll, da es nur eine Konstante ist. Sind diese Konstanten unterschiedlich (Bit 10000 oder 11111) würde es nicht hinhauen. Jedoch würde er bei implizierter Umwandlung 10000 auch als True interpretieren. somit wäre wieder true = true.
Das ist der grund warum ich die verkürzte schreibweise nutze (abgesehen von der faulheit... schuldige)

Zu dem Not: Ich weise einfach mit hilfe des not-Operators die Negation zu. Es wird ja erst die rechte seite ausgewertet und dann zugewiesen. Es funktioniert sehr gut und wird oft von mir eingesetzt. (z.B. Checkbox zum ausschalten von etwas -> etwas.visible = not checkbox.value -- oder halt der testcode von oben. Der geht!!)

Code:

dim b as boolean
b = True
dim a as boolean
a = not b 'immer das gegenteil von b
'umständlich wäre es so:
if b = True then a = false else a = true 'bzw als IIF noch möglich...

Es ist durchaus legitimer code, welcher auch funktioniert... Nur nicht bei Catia-Funktionen. Nicht einmal wie wir ja gerade getestet haben, wenn man das Ergebnis der Funktion erst zwischenspeichert.

Es wäre nett, wenn Sie den unteren Code (test der datei) einmal nutzen könnten. Zudem wäre interessant, welche Platform und Archtektur Sie nutzen (wie gesagt ich nutze Windows XP x64)

Code:

Dim datei As String
datei = "C:\perl1.pl" 'Hier richten Pfad
Dim fake As String
fake = "C:\perl123.pl" 'Hier falscher Pfad
MsgBox Not CATIA.FileSystem.FileExists(datei)
MsgBox Not CATIA.FileSystem.FileExists(fake)
MsgBox CATIA.FileSystem.FileExists(datei)
MsgBox CATIA.FileSystem.FileExists(fake)

Trozdem Danke, wenigstens ist hier jemand, der sich dafür Zeit nimmt!

gladly


Das soll jetzt bitte nicht negativ aufgenommen werden, aber hier ist ein link zum Not-Operator, welcher sehr wohl zur zuweisung und nicht nur prüfung ist:
Link zu MSDN-Not-Operator

[Diese Nachricht wurde von gladly am 03. Mrz. 2010 editiert.]

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

gladly
Mitglied



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

Beiträge: 56
Registriert: 02.11.2007

Catia V5R19SP9HF40 64Bit
Windows XP Pro x64

erstellt am: 03. Mrz. 2010 16: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

Schuldigt bitte das Doppelposting, jedoch wäre es ansonsten zu unübersichtlich geworden, wie ich finde...

Also ich habe neue erkenntnisse. Wenn ich folgenden Code ablaufen lasse:

Zitat:

Dim b As Boolean
b = CATIA.FileSystem.FileExists("C:\perl1.pl")
b = Not b

1) Funktioniert wie immer nicht
2) Wenn ich die Vokabel b manuell (im Locals-View) ändere, gehen die negationen wieder beliebig! Habe die Zeile der Negation mehrmals ausgeführt.
            -Vor manueller Änderung keine Änderung
            -Nach manueller Änderung wieder alles in Ordnung.

Also da muss Catia wohl irgendwas mit der Boolean-Variable machen...

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: 03. Mrz. 2010 16:28    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 gladly 10 Unities + Antwort hilfreich

Das Problem kenne ich sogar. 

Passiert leider manchmal in manchen VB Konstrukten.

Ich vermute der Fehler liegt an den unterschiedlichen Interpreter/Übersetzungs-Funktionen.

Problem ist hier, dass true/false manchmal übersetzt werden auf wahr und unwahr.
Hinzu kommt, dass deren Integerwerte sich unterscheiden können.

Es gibt nämlich mehrere Kombinationsmöglichkeiten:
false kann 0 oder -1 sein und true kann 0 oder 1 sein.

Daher würde ich einfach mal pauschal empfehlen mit

b.InBooleanOperation = False

zu prüfen.

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

gladly
Mitglied



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

Beiträge: 56
Registriert: 02.11.2007

Catia V5R19SP9HF40 64Bit
Windows XP Pro x64

erstellt am: 15. Mrz. 2010 11:17    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

Guten Tag,

entschuldigt bitte meine etwas längere Abwesenheit.

Also wie ich schon weiter oben erklärt hatte ist die Prüfung auf False leider auch nicht möglich! Aber schön zu wissen, dass ich mit diesem Problem nicht alleine bin.

Als Schlusswort sei somit angemerkt, dass ich bei dem folgenden Konstrukt (notgedrungen) bleiben werde:

Code:

If b.InBooleanOperation then
    'dummy fals nicht benötigt
else
    'z.B. Für eine Anweisung bei NICHT einhalten
    '-> InBooleanOperation = False
    b.name = "Test123"
end if

Vielen Dank für alle Beiträge. Es scheint einfach ein Fehler in Catia oder dem VBA-Interpreter zu sein. Was solls   

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. Mrz. 2010 15: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 gladly 10 Unities + Antwort hilfreich

Eine Idee hätte ich noch:

Ein TypeCast auf Integer.

Code:

If CInt(b.InBooleanOperation) < 1 then

End If


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

gladly
Mitglied



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

Beiträge: 56
Registriert: 02.11.2007

Catia V5R19SP9HF40 64Bit
Windows XP Pro x64

erstellt am: 22. Mrz. 2010 11: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

Guten Tag,

ICH DANKE DIR VIELMALS. Wie schon weiter oben erwähnt kommt man nie auf die einfachsten Varianten.

Also

Code:

Sub TestNotBoolV3()
    Dim b1 As Boolean
    Dim b2 As Boolean
    Dim i1 As Integer
    i1 = CInt(True) '-1 = True
    i1 = CInt(False) '0 = False
    i1 = CInt(CATIA.FileSystem.FileExists("C:\test.bat")) '1 = True
    i1 = CInt(CATIA.FileSystem.FileExists("C:\test2.bat")) '0 = False


    b1 = CInt(CATIA.FileSystem.FileExists("C:\test.bat")) = 1 'Somit Prüfung auf True
    b2 = CInt(CATIA.FileSystem.FileExists("C:\test.bat")) = 0 'und auf False...
End Sub


Vb prüft so
0 = False
alles andere = True (ob -1, 1 oder 5 usw...)

Somit ist not True auch True (wie witzig) da Not 1 = -2 ist, also alles ungleich 0.

Nun ist es komisch da die Fals-Konstante ja die selbe ist... Also habe ich nochmals bei FileExist geprüft und folgendes Funktioniert:

Code:

    b2 = CATIA.FileSystem.FileExists("C:\test2.bat") = False 'True da Datei nicht existiert
    b2 = Not b2 'nun false...
    'Oder Direkt
    b2 = Not ( CATIA.FileSystem.FileExists("C:\test.bat") = False )


Nunja wir haben nun also Zwei Lösungen gefunden. Nochmals vielen dank an alle beteiligten und insbesondere an Henry Schneider für seinen erfolgreichen Vorschlag zur Lösung des Problems. Der auch die Prüfung auf False vorschlug... Nur schien mir da ein fehler unterlaufen zu sein... (Schuldige  )

[Diese Nachricht wurde von gladly am 22. Mrz. 2010 editiert.]

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

Merlin2001
Mitglied
Sr. Software Engineer


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

Beiträge: 24
Registriert: 13.05.2011

erstellt am: 30. Okt. 2012 17: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 gladly 10 Unities + Antwort hilfreich

Ein großes Dankeschön an euch!
Ich dachte gerade schon, ich muss meine geistigen Fähigkeiten anzweifeln und bin dann zum Glück auf diesen Post gestoßen!

Unities sind schon verteilt 

Viele Grüße
Marcus

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

MarkusK
Mitglied



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

Beiträge: 130
Registriert: 09.08.2002

Dell Precision T5500
Intel Xenon X5560 4x 2,8 GHz
12 GB Ram
NVIDIA Quadro FX 3800
Win XP
Catia V5R19 SP3

erstellt am: 30. Okt. 2012 19: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 gladly 10 Unities + Antwort hilfreich

Hallo,

interesanter weise liefert die Funktion "FileExists" nur eine einfache 1 zurück, bei einem Boolean (2 Byte) ist das dann 0000 0000 0000 0001.
Wenn man ein Boolean in VBA auf True setzt werden alle Bits auf 1 gesetzt, also 1111 1111 1111 1111

Wenn man 0000 0000 0000 0001 nun negiert (not) dann wird daraus 1111 1111 1111 1110 was ja immer noch true ist, da <>0.


getestet mit der Funktion

Code:

Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" (dest As Any, source As Any, _
ByVal bytes As Long)

Public Sub t()
Dim ba(1) As Byte
Dim bb(1) As Byte

Dim a As Boolean
Dim b As Boolean
a = True
b = CATIA.FileSystem.FileExists("C:\eine Datei")
CopyMemory ByVal VarPtr(ba(0)), ByVal VarPtr(a), Len(a)
CopyMemory ByVal VarPtr(bb(0)), ByVal VarPtr(b), Len(b)

b = Not b
CopyMemory ByVal VarPtr(bb(0)), ByVal VarPtr(b), Len(b)
End Sub



im Überwachungsfenster dann die Byte-Arrays "ba" und "bb" anschauen

------------------
Gruss Markus

[Diese Nachricht wurde von MarkusK am 30. Okt. 2012 editiert.]

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

Randle
Mitglied
CAD/PLM Consultant


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

Beiträge: 695
Registriert: 12.04.2003

Win10 x64
CATIA V5 R18, R19, R21, R27-29

erstellt am: 06. Nov. 2012 09: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 Nur für gladly 10 Unities + Antwort hilfreich

Hallo,

auch wenn hier wohl schon eine Lösung existiert. Ich kenne das Problem im Zusammenhang mit der Abfrage IsDetail bei dem Objekt DrawingSheet.
Hier habe ich mir immmer mit einer kleinen Funktion geholfen.

Private Function IsMySheetADetail(t_oSheet As DrawingSheet) As Boolean

  If t_oSheet.IsDetail Then
      IsMySheetADetail = True
  Else
      IsMySheetADetail = False
  End If

End Function

Der Aufruf sieht dann wie folgt aus.

For i = 1 To oDrwDoc.Sheets.Count
        oDrwDoc.Sheets.Item(i).Activate
        If IsMySheetADetail(oDrwDoc.Sheets.Item(i)) = True Then
          .....
        Else ...

Vielleicht ist das ja für den einen oder anderen ein gangbarer Weg.

------------------
MfG
Randle

! It's not a bug, it's a feature !

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

Merlin2001
Mitglied
Sr. Software Engineer


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

Beiträge: 24
Registriert: 13.05.2011

erstellt am: 23. Nov. 2012 14:46    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 gladly 10 Unities + Antwort hilfreich

Eben bin ich in der CATIA V5 Visual Basic Hilfe genau auf dieses Thema gestoßen. Im Kapitel About VB, VBA, Debug and Portability steht dort unter der Überschrift Support of boolean type in CATVBA:

Zitat:
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) :

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

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

Code:
If myObj.boolMethod() Then End If

or

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

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

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

will correctly return False


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


Es scheint, dass die Überprüfung auf != False die einzig sichere Methode ist, die immer funktioniert 

Viele Grüße
Marcus

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