Autor
|
Thema: Umlaute in einer Zeichnung erstezen (5546 mal gelesen)
|
hansi69 Mitglied
Beiträge: 10 Registriert: 07.10.2010 WIN Vista Catia V5 R18
|
erstellt am: 08. Okt. 2010 20:28 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, Wieder habe ich ein Problem mit meinen importierten Zeichnungen. Ich will alle Umlaute (ä,ö,ü,ß) in den Texten der Zeichnung finden und durch ae, oe, ue, ss ersetzen. (Mit der Makro Syntax stehe ich irgendwie auf Kriegsfuß und aufzeichnen mit dem Recorder bringt nicht die Lösung) Search "ä, ö, ü, ß" in allen Texten ---> ersetzen durch "ae, oe, ue, ss" Über Antworten, Lösungen würde ich mich sehr freuen. Vielen Dank im voraus für die Unterstützung Grüße Hans Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 08. Okt. 2010 21:12 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Servus Sollte mit de Befehl "Replace" gehen. Anbei der Code ungetestet, ist eine Modifikation aus deinem anderen Thema: Code: Sub CATMain()Dim MyDrawing As DrawingDocument Dim MySelection As Selection Dim MyViews As DrawingViews Dim MyView As DrawingView Dim MySheets As DrawingSheets Dim MySheet As DrawingSheet Dim MyTexts As DrawingTexts Dim MyText As DrawingText Dim MyString as String Dim i As Integer Set MyDrawing = CATIA.ActiveDocument Set MySheets = MyDrawing.Sheets 'Schleife über alle Sheets For Each MySheet In MySheets Set MyViews = MySheet.Views 'Schleife über alle Views For Each MyView In MyViews Set MyTexts = MyView.Texts 'Schleife über alle Texte For i = 1 To MyTexts.Count Set MyText = MyTexts.Item(i) MyString = MyText.Text MyString = replace(MyString, "ä", "ae") MyString = replace(MyString, "ö", "oe") MyString = replace(MyString, "ü", "ue") MyString = replace(MyString, "ß", "ss") MyText.Text = MyString Next Next Next End Sub
Gruß Bernd------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hansi69 Mitglied
Beiträge: 10 Registriert: 07.10.2010 WIN Vista Catia V5 R18
|
erstellt am: 08. Okt. 2010 21:33 <-- editieren / zitieren --> Unities abgeben:
|
hansi69 Mitglied
Beiträge: 10 Registriert: 07.10.2010 WIN Vista Catia V5 R18
|
erstellt am: 13. Okt. 2010 12:37 <-- editieren / zitieren --> Unities abgeben:
Hallo, ansich funktioniert das mit den Umlauten ersetzen sehr gut. ABER es werden auch alle Durchmesser Zeichen, Grad Zeichen, Form und Lage Toleranzen ( die Symbole z.B. Rundheit ) durch einen Unterstrich ersetzt. ???? Gibt es da evtl. Abhilfe ?? Vielen Dank für die Unterstützung. Hans Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
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: 13. Okt. 2010 17:14 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Dürfte eigentlich nicht passieren. Ich hatte aber mal den Fall, dass ich alle Durchmesserzeichen auf Durchmesserzeichen setzen musste. - Warum kann ich Dir allerdings nicht sagen. Also versuch einfach einmal im Replace noch die anderen Zeichen hinzuzufügen und gegen sich selbst zu ersetzen. ------------------ 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 |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 605 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 14. Okt. 2010 10:58 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Hallo, ich würde den Code so nicht einsetzten, da jeder Text geändert wird, auch wenn es nichts zu ändern gibt. In diesem Fall wird er dann durch den eigenen Wert (String) ersetzt. Und u.U. tritt dann so was wie dein Proble auf. Bau in die Schleife einfach zuerst mal eine Abfrage ein, ob im Text die Strings die du ersetzten möchtest überhaupt enthalten sind. Dafür gibst die Method Instr, die ein True oder False zurück gibt. Also z.B. If Instr(1, sString, "ä", 1) then sString = Replace(sString, "ä", "ae") End Gruß ------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hansi69 Mitglied
Beiträge: 10 Registriert: 07.10.2010 WIN Vista Catia V5 R18
|
erstellt am: 14. Okt. 2010 12:12 <-- editieren / zitieren --> Unities abgeben:
|
hansi69 Mitglied
Beiträge: 10 Registriert: 07.10.2010 WIN Vista Catia V5 R18
|
erstellt am: 14. Okt. 2010 12:46 <-- editieren / zitieren --> Unities abgeben:
Hallo, irgend etwas stimmt doch hier nicht ???!??? Ich komme der Syntax nicht klar. Das Makro läuft durch ohne Fehlermeldung, aber meine ä´s sind noch da ?? Hat jemand die Lösung was ich falsch in meinem Makro habe ? Vielen Dank für die Hilfe ! Hans Language="VBSCRIPT"
Sub catmain() '-------------------------------------UMLAUTE UMSTELLEN Dim MyDrawing As DrawingDocument Dim MySelection As Selection Dim MyViews As DrawingViews Dim MyView As DrawingView Dim MySheets As DrawingSheets Dim MySheet As DrawingSheet Dim MyTexts As DrawingTexts Dim MyText As DrawingText Dim i As Integer Dim MyString As String Set MyDrawing = CATIA.ActiveDocument Set MySheets = MyDrawing.Sheets '----------------alle Sheets For Each MySheet In MySheets Set MyViews = MySheet.Views '----------------alle Views For Each MyView In MyViews Set MyTexts = MyView.Texts '----------------alle Texte For i = 1 To MyTexts.Count Set MyText = MyTexts.Item(i) MyString = MyText.Text '----------------Abfrage über alle Texte If Instr(1, MyString, "ä", 1) then MyString = Replace(MyString, "ä", "ae") End If next next next End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Ehrenmitglied V.I.P. h.c. Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 NX 10 Win 7
|
erstellt am: 14. Okt. 2010 12:48 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
|
hansi69 Mitglied
Beiträge: 10 Registriert: 07.10.2010 WIN Vista Catia V5 R18
|
erstellt am: 14. Okt. 2010 12:57 <-- editieren / zitieren --> Unities abgeben:
DANKE ! Zwei Augen sind scheinbar manchmal zu wenig. Anbei der komplette Code. ( falls jemand mal ä´s ersetzen will ) Nochmal vielen Dank für Eure Hilfe. Language="VBSCRIPT" Sub catmain() '-------------------------------------UMLAUTE UMSTELLEN Dim MyDrawing As DrawingDocument Dim MySelection As Selection Dim MyViews As DrawingViews Dim MyView As DrawingView Dim MySheets As DrawingSheets Dim MySheet As DrawingSheet Dim MyTexts As DrawingTexts Dim MyText As DrawingText Dim i As Integer Dim MyString As String Set MyDrawing = CATIA.ActiveDocument Set MySheets = MyDrawing.Sheets '----------------alle Sheets For Each MySheet In MySheets Set MyViews = MySheet.Views '----------------alle Views For Each MyView In MyViews Set MyTexts = MyView.Texts '----------------alle Texte For i = 1 To MyTexts.Count Set MyText = MyTexts.Item(i) MyString = MyText.Text '----------------Abfrage über alle Texte If Instr(1, MyString, "ä", 1) then MyString = Replace(MyString, "ä", "ae") MyText.Text = MyString End If next next next End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
roccat Mitglied Konstrukteur
Beiträge: 172 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 14. Okt. 2010 14:06 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Hallo hansi69, mal noch ne Frage: Geht das auch noch wenn hinter einem Sonderzeichen ein Umlaut steht also: Sonder zeichen zb: Durchmesser und dahinder ein Text mit enthaltenen ä,ö oder ü? nur so ne Vermutung, selbst wenn du ein Text mit einem Sonderzeichen durch sich selbst ersetzt also: MyText.Text=MyText.Text ist, so glaube ich, das Sonderzeichen weg. Die Variante funktioniert nur, so lange es nicht zur Kompination beider Sachen in einen String kommt. mfG Mario Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hansi69 Mitglied
Beiträge: 10 Registriert: 07.10.2010 WIN Vista Catia V5 R18
|
erstellt am: 14. Okt. 2010 14:17 <-- editieren / zitieren --> Unities abgeben:
Hi, Ja tatsaechlich !! Ich habe es mit "Øärgerlich" getestet. Nach dem Makro war das Ø Zeichen weg und das ä nicht ausgetauscht. Das es sowas gibt, da kommt doch keiner drauf. Kann man das evtl. noch abstellen ???? Grüße Hans Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
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: 14. Okt. 2010 15:50 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Läuft bei mir unter V5 R19 SP3 ohne Probleme und macht auch genau das was es soll. also Øärgerlich --> Øaergerlich ------------------ 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 |
roccat Mitglied Konstrukteur
Beiträge: 172 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 14. Okt. 2010 16:19 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Hallo Henry, Durchmesserzeichen ist nicht gleich Durchmesserzeichen. Wenn das Durchmesserzeichen mit dem ASCII-Code (216) also mit VBA.Chr(216)erzeugt wurde, ist das alles überhaupt kein Problem. Sollte das Durchmesser Zeichen über die Symbolleiste von Catia hinzugefügt sein wird´s bissl Schwierig. Der String kommt schon gar nicht richtig in VB an. Aus dem Durchmesserzeichen wird ein "?" und ein " ". Was mir den ASCII-Code 63 und 13 Ausgibt. Das ergibt aber Rückwerts nicht mehr das Durchmesserzeichen. Die Frage ist also was ist das für ein Zeichen? Man kann dieses Zeichen auch in Word kopieren bekommt dort aber auch nur den ASCII und Unicode vom Fragezeichen. sehr komisch... mfG Mario [Diese Nachricht wurde von roccat am 14. Okt. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
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: 14. Okt. 2010 16:30 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Ist doch kein Problem, wie ich eingangs gesagt habe: Nach dem CATIA-Durchmesserzeichen suchen und es gegen ein richtiges ersetzen. ------------------ 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 |
roccat Mitglied Konstrukteur
Beiträge: 172 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 14. Okt. 2010 16:32 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
|
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
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: 14. Okt. 2010 16:56 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
ASCII-Wert des Zeichens ausgeben lassen. Also deinen Text-String mit nem Durchmesser füllen und dann diesen im Code in einen Char oder Byte umwandeln, dann hat man den ASCII-Code und diesen dann in's Replace stecken. ------------------ 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 |
roccat Mitglied Konstrukteur
Beiträge: 172 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 14. Okt. 2010 17:04 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Wie oben schon beschrieben bekomme ich damit nur das normale Windows Durchmesserzeichen also die 216, das ist nicht das Problem. Ich brauche aber das Catia durchmesserzeichen und das kommt wie schon gesagt nur als "?" und " " in vba an. Ich kann zwar nach "?" und " " suchen das durch chr(216) ersetzen das würden wahrscheinlich auch funktionieren ersetzt mir aber auch gewollte "?" und " ". Kann es sein das es bei dir im CAA funktioniert und wiedermal in vb nicht? Zusammengefasst ASCII: Windowsdurchmesser = 216 Catiadurchmesser = 63 und 13 ("?" und " ") Das ergibt aber bei der Ausgabe (egal ob String oder ASCII) kein Catiadurchmesser. mfG Mario
[Diese Nachricht wurde von roccat am 14. Okt. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 605 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 15. Okt. 2010 07:43 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Hallo, probier' mal folgendes aus: selektiere deinen Text mit dem CATIA-Sonderzeichen und kopiere ihn (Rechte Maus Taste) und füge ihn in einen neuen Text ein. Durchmesser ist weg. Bei mir werden alle CATIA-Sonderzeichen nur noch als Underline dargestellt. Daraus würde ich mal schlussfolgern, dass die CATIA-Sonderzeichen, die mit "Insert Symbol" in einen Text zugefügt werden keine "normalen" Strings sind und dein Unterfangen Hoffnungslos ist. Vielleich hilf dir aber folgender Ansatz noch ein bischen weiter: Über die oben angesprochene Abfrage mittels des ASCII-Codes kannst du zumindest prüfen, ob in einem Text nur "normale Zeichen" (a-z, A-Z), nationale Sonderzeichen (ä, ü, etc.), Zahlen (0-9) und Freizeichen o.ä. enthalten sind und nur in diesem Fall ein Replace durchführen, d.h. sobald ein nicht identifizierbares Zeichen in dem String auftaucht (und dazu gehören dann die CATIA-Sonderzeichen) wird der Text nicht geändert. Gruß ------------------ tomtom1972 [Diese Nachricht wurde von tomtom1972 am 15. Okt. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
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. Okt. 2010 14:16 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Habe die Ursache. Dieses eingefühte Zeichen wird in einer anderen Schriftart dargstellt. Vermutlich einer CATIA-Strokefont, wie die SSS-Schriften. Edit: Ich korrigiere: Ich vermute SYM2, also bestimmte Zeichen filtern und denen SYM2 zuweisen. Edit2:
Code:
If InStr(1, MyString, "ä", 1) Then MyString = Replace(MyString, "ä", "ae") Dim varSplit As Variant Dim iSplit As Integer Dim iLen As Integer varSplit = Split(MyString, ChrW(8960)) MyText.Text = MyString iLen = Len(varSplit(0)) + 1 For iSplit = 1 To UBound(varSplit) Call MyText.SetFontName(iLen, 1, "SYM2") iLen = iLen + Len(varSplit(iSplit)) + 1 Next iSplit End If
Allgemein wird man immer filtern müssen, welche Schriftart welches Zeichen hat und diese dann wieder setzen.Edit3: Und ja, die Stringverarbeitung im CAA ist um Welten besser. ------------------ 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 15. Okt. 2010 editiert.] [Diese Nachricht wurde von HoBLila am 15. Okt. 2010 editiert.] [Diese Nachricht wurde von HoBLila am 15. Okt. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
roccat Mitglied Konstrukteur
Beiträge: 172 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 19. Okt. 2010 14:40 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Hallo Henry, sorry das ich erst jetzt schreib! Echt stark genau das ist es, die Info mit der Schriftart war schonmal gut aber das Zeichen mit Unicode 8960 war in VB(A) nicht raus zubekommen da es dort als 63 angezeigt wird. Hast du das in CAA als 8960 raus geben können, oder wie bist du auf den Zeichencode gekommen? Nochmal Danke, wieder was dazu gelernt. mfG Mario
[Diese Nachricht wurde von roccat am 19. Okt. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
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: 19. Okt. 2010 16:55 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Hab's nur mit VBA gemacht. Es gibt von den meisten Windows-API's mehrere Versionen. Ich denke mal M$ macht das um uns zu verwirren. Habe da manchmal tierische Probleme mit, zumal ein ServicePack dann den Standard ändern kann. Bei String-Operationen gibt es fast immer die Funktion mit einem A, B und/oder W hinten dran. Z.B. (glaube ich) ChrA() und ChrW(). Das W gilt dabei fast immer für Unicode. Auf Standard ist normalerweise Ascii geschaltet, daher arbeitet Chr() mit ASCII, da es gleich ChrA() ist. - steht auch alles in der MSDN. Ich habe daher das Zeichen in AscW() geschoben um den Unicode davon zu bekommen und dachte mir, als aller ersten Versuch, ich verarbeite mal alles im Unicode, was leider nicht zur Lösung führte, bis mir einfiel, dass ich ja jedem Zeichen einen anderen Font geben kann. Also schaute ich mir das Durchmesserzeichen genauer an und sah, dass es kein TrueType sein konnte sondern eine Stroke-Font war. Da CATIA kaum Strokes unterstützt war die Auswahl recht klein und ich verglich einfach das Aussehen. Also alles kein Hexenwerk, man muss halt nur manchmal quer denken, aber genau das macht ja unseren Job so interessant. Freue mich aber, wenn ich helfen kann. Den Code müsst ihr natürlich noch etwas variabler gestalten, aber ich denke mal der Stein ist in's Rollen gekommen. ------------------ 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 |
carambols Mitglied Konstrukteur
Beiträge: 39 Registriert: 14.02.2015
|
erstellt am: 05. Nov. 2016 15:27 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Ich hab noch eine Frage dazu. Ihr habt den Code geschrieben für ä, steht da die 1 für ä oder für alle Veränderungen die man machen will? _____________________________________________________________ If InStr(1, MyString, "ä", 1) Then MyString = Replace(MyString, "ä", "ae") _____________________________________________________________ Wie ist es richtig? _____________________________________________________________ If InStr(1, MyString, "ä", 1) Then MyString = Replace(MyString, "ä", "ae") MyString = Replace(MyString, "ü", "ue")
_____________________________________________________________ ???
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 05. Nov. 2016 15:37 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Servus Dann wird aber nur wenn in einem Text ein "ä" vorkommt auch das "ü" ersetzt. Besser pro Umlaut die If-Bedingung mit jeweiliger Ersetzung des Umlauts. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
carambols Mitglied Konstrukteur
Beiträge: 39 Registriert: 14.02.2015
|
erstellt am: 05. Nov. 2016 16:05 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Hallo Bernd, du bist da ja fit __________________________________________________________ '---Abfrage über alle Texte If InStr(1, MyString, "ä", 1) Then MyString = Replace(MyString, "ä", "ae") If InStr(1, MyString, "ö", 1) Then MyString = replace(MyString, "ö", "oe") If InStr(1, MyString, "ü", 1) Then MyString = replace(MyString, "ü", "ue") If InStr(1, MyString, "Ä", 1) Then MyString = Replace(MyString, "Ä", "Ae") If InStr(1, MyString, "Ö", 1) Then MyString = replace(MyString, "Ö", "Oe") If InStr(1, MyString, "Ü", 1) Then MyString = replace(MyString, "Ü", "Ue") If InStr(1, MyString, "ß", 1) Then MyString = replace(MyString, "ß", "sz") Dim varSplit As Variant Dim iSplit As Integer Dim iLen As Integer varSplit = Split(MyString, ChrW(8960)) MyText.Text = MyString iLen = Len(varSplit(0)) + 1 For iSplit = 1 To UBound(varSplit) Call MyText.SetFontName(iLen, 1, "SYM2") iLen = iLen + Len(varSplit(iSplit)) + 1 Next iSplit MsgBox "Alles wurde umbenannt!" End If __________________________________________________________ Spielt überhaupt Groß- und Kleinschreibung eine Rolle? Wäre ein "End if" richtig udn der Einbau der Message?
Danke dir! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
carambols Mitglied Konstrukteur
Beiträge: 39 Registriert: 14.02.2015
|
erstellt am: 07. Nov. 2016 09:51 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Hallöchen allerseits, also der Code läuft soweit durch. Nur in den Tabellen auf dem Catia-Blatt wird nix verändert. Habt ihr eine Idee das noch einzubauen? ________________________________________________ Sub Umlaute_umbennen() '---UMLAUTE UMSTELLEN Dim MyDrawing As DrawingDocument Dim MySelection As Selection Dim MyViews As DrawingViews Dim MyView As DrawingView Dim MySheets As DrawingSheets Dim MySheet As DrawingSheet Dim MyTexts As DrawingTexts Dim MyText As DrawingText Dim i As Integer Dim MyString As String Set MyDrawing = CATIA.ActiveDocument Set MySheets = MyDrawing.Sheets '---alle Sheets For Each MySheet In MySheets Set MyViews = MySheet.Views '---alle Views For Each MyView In MyViews Set MyTexts = MyView.Texts '---alle Texte For i = 1 To MyTexts.Count Set MyText = MyTexts.Item(i) MyString = MyText.Text '---Abfrage über alle Texte If InStr(1, MyString, "ä", 1) Then MyString = Replace(MyString, "ä", "ae") Dim varSplit As Variant Dim iSplit As Integer Dim iLen As Integer varSplit = Split(MyString, ChrW(8960)) MyText.Text = MyString iLen = Len(varSplit(0)) + 1 For iSplit = 1 To UBound(varSplit) Call MyText.SetFontName(iLen, 1, "SYM2") iLen = iLen + Len(varSplit(iSplit)) + 1 Next iSplit End If If InStr(1, MyString, "ö", 1) Then MyString = Replace(MyString, "ö", "oe") varSplit = Split(MyString, ChrW(8960)) MyText.Text = MyString iLen = Len(varSplit(0)) + 1 For iSplit = 1 To UBound(varSplit) Call MyText.SetFontName(iLen, 1, "SYM2") iLen = iLen + Len(varSplit(iSplit)) + 1 Next iSplit End If If InStr(1, MyString, "ü", 1) Then MyString = Replace(MyString, "ü", "ue") varSplit = Split(MyString, ChrW(8960)) MyText.Text = MyString iLen = Len(varSplit(0)) + 1 For iSplit = 1 To UBound(varSplit) Call MyText.SetFontName(iLen, 1, "SYM2") iLen = iLen + Len(varSplit(iSplit)) + 1 Next iSplit End If If InStr(1, MyString, "Ä", 1) Then MyString = Replace(MyString, "Ä", "Ae") varSplit = Split(MyString, ChrW(8960)) MyText.Text = MyString iLen = Len(varSplit(0)) + 1 For iSplit = 1 To UBound(varSplit) Call MyText.SetFontName(iLen, 1, "SYM2") iLen = iLen + Len(varSplit(iSplit)) + 1 Next iSplit End If If InStr(1, MyString, "Ö", 1) Then MyString = Replace(MyString, "Ö", "Oe") varSplit = Split(MyString, ChrW(8960)) MyText.Text = MyString iLen = Len(varSplit(0)) + 1 For iSplit = 1 To UBound(varSplit) Call MyText.SetFontName(iLen, 1, "SYM2") iLen = iLen + Len(varSplit(iSplit)) + 1 Next iSplit End If If InStr(1, MyString, "Ü", 1) Then MyString = Replace(MyString, "Ü", "Ue") varSplit = Split(MyString, ChrW(8960)) MyText.Text = MyString iLen = Len(varSplit(0)) + 1 For iSplit = 1 To UBound(varSplit) Call MyText.SetFontName(iLen, 1, "SYM2") iLen = iLen + Len(varSplit(iSplit)) + 1 Next iSplit End If If InStr(1, MyString, "ß", 1) Then MyString = Replace(MyString, "ß", "sz") varSplit = Split(MyString, ChrW(8960)) MyText.Text = MyString iLen = Len(varSplit(0)) + 1 For iSplit = 1 To UBound(varSplit) Call MyText.SetFontName(iLen, 1, "SYM2") iLen = iLen + Len(varSplit(iSplit)) + 1 Next iSplit MsgBox "Alles wurde umbenannt!" End If Next Next Next End Sub ________________________________________________ [Diese Nachricht wurde von carambols am 07. Nov. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 07. Nov. 2016 10:19 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Servus Du müsstest nur zusätzlich zur Schleife über alle Textfelder noch eine Schleife über alle Tabellen laufen lassen. Pro Tabelle dann per Schleife über alle Spalten und Zeilen die Zellen davon ansprechen. Da eigentliche Ersetzen könntest du auch in eine Funktion auslagern, an die dann du die "Textfelder" sowie die "Zelleninhalte" übergibst (Code wird kürzer und übersichtlicher). Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
carambols Mitglied Konstrukteur
Beiträge: 39 Registriert: 14.02.2015
|
erstellt am: 07. Nov. 2016 10:31 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 07. Nov. 2016 15:45 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Servus Hier ein kurzes Beispiel wie man auf die Zellen zugreift: Code: 'Schleife über alle Tabellen if MyView.DrawingTables.Count > 0 then for i = 1 to MyView.Tables.Count Set MyDrawingTable = MyView.Tables.item(i) for iRow = 1 to MyDrawingTable.NumberOfRows for iColum = 1 to MyDrawingTable.NumberOfColumns Set MyText = MyDrawingTable.GetCellObject(iRow, iColum) 'hier das Ersetzen der Umlaute aufrufen bzw einbauen next next next end if
Gruß Bernd EDIT: im Code DrawingTables durch Tables ersetzt. ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
carambols Mitglied Konstrukteur
Beiträge: 39 Registriert: 14.02.2015
|
erstellt am: 08. Nov. 2016 07:31 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Guten Morgen Bernd, vielen Dank für deine Mühe, so lies sich das leider nicht integrieren. In der Zeile Count kommt eine Fehlermeldung. Wäre das bessern? For Count = 1 To MyView.Tables.Count Und ein End If fehlt glaube, aber egal wo ich es einbaue kommt eine Fehlermeldung. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 08. Nov. 2016 08:34 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Servus Ersetze mal das noch verbliebene DrawingTables in Tables. Ob "End if" oder "next" fehlen sieht man gute wenn man den Code entsprechend einrückt. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
carambols Mitglied Konstrukteur
Beiträge: 39 Registriert: 14.02.2015
|
erstellt am: 08. Nov. 2016 10:16 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Zitat: Original erstellt von bgrittmann:
for i = 1 to MyView.Tables.Count
Diese Zeile bringt nach wie vor eine Fehlermeldung Es hat leider nix geändert. Müsste ich nicht ein Set zum Dim einsetzen? _____________________________________ Dim MyTable As DrawingTable Dim MyTables As DrawingTables _____________________________________ Da eigentliche Ersetzen könntest du auch in eine Funktion auslagern, an die dann du die "Textfelder" sowie die "Zelleninhalte" übergibst (Code wird kürzer und übersichtlicher). [/QUOTE] Diesne Einwand habe ich versucht zu verstehen, aber leider nicht hinbekommen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 08. Nov. 2016 10:24 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Servus Wie lautet die Fehlermeldung? Schon mal versucht die Fehlermeldung zu verstehen/analysieren? Gibt es überhaupt eine Tabelle in der Ansicht? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
carambols Mitglied Konstrukteur
Beiträge: 39 Registriert: 14.02.2015
|
erstellt am: 08. Nov. 2016 11:55 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Natürlich hab ich das versucht Ich werde aber nicht schlau draus. Es wird angeboten for i in for count zu benennen. Die Tabellen liegen meist auf dem Blatthintergrund, nicht in einer Ansicht. Viele liebe Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 08. Nov. 2016 12:07 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Servus Warum rufst du innerhalb deiner Schleife der Textfelder gleich noch die Schleife mit den Tabellen auf? Welche Texte sollen dann behandelt werden? Die der Zellen oder die der Textfelder? Mach dir mal Gedanken zur Struktur/Verschachtelung. Gruß Bernd
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
carambols Mitglied Konstrukteur
Beiträge: 39 Registriert: 14.02.2015
|
erstellt am: 08. Nov. 2016 12:38 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
|
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: 08. Nov. 2016 12:47 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Hallo zusammen, BTW ich würde nicht einfach blind alle Texte wieder ersetzen, sondern nur, wenn sich etwas geändert hat. Dürfte AFAIK deutlich schneller verarbeitet werden. Außerdem würde ich den Text erst schreiben, wenn alle Änderungen vorgenommen wurden, sprich zum Schluss. Code:
statt... MyText.Text = MyString einfach... if MyText.Text <> MyString then MyText.Text = MyString endif
...und ich würde statt den Code ständig zu wiederholen eine Unterroutine erstellen, bei der der String mit den beiden Werten fürs Ersetzen übergeben wird. Lässt sich deutlich einfacher lesen und nachträglich erweitern.
------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
carambols Mitglied Konstrukteur
Beiträge: 39 Registriert: 14.02.2015
|
erstellt am: 08. Nov. 2016 12:59 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Danke Rick, leider weiß ich nicht wie es geht, hatte ja Bernd auch schon vorgeschlagen. Der Einbau der Codezeile hat zum löschen aller Texte geführt, kommplett alles einfach alles wurde gelöscht. [Diese Nachricht wurde von carambols am 08. Nov. 2016 editiert.] 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: 08. Nov. 2016 13:15 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Ich bin das mal eben durchgegangen. Schau mal hier... Code:
Sub Umlaute_umbennen()'---UMLAUTE UMSTELLEN Dim MyDrawing As DrawingDocument Dim MySelection As Selection Dim MyViews As DrawingViews Dim MyView As DrawingView Dim MySheets As DrawingSheets Dim MySheet As DrawingSheet Dim MyTexts As DrawingTexts Dim MyText As DrawingText Dim i As Integer Dim MyString As String Set MyDrawing = CATIA.ActiveDocument Set MySheets = MyDrawing.Sheets '---alle Sheets For Each MySheet In MySheets Set MyViews = MySheet.Views '---alle Views For Each MyView In MyViews Set MyTexts = MyView.Texts '---alle Texte For i = 1 To MyTexts.Count Set MyText = MyTexts.Item(i) MyString = MyText.Text If MyString <> "" Then MyString = Replace_Chars(MyString) End If 'ersetzen wenn geändert If MyText.Text <> MyString Then MyText.Text = MyString End If Next 'Schleife über alle Tabellen If MyView.Tables.Count > 0 Then For i = 1 To MyView.Tables.Count Set MyDrawingTable = MyView.Tables.Item(i) For iRow = 1 To MyDrawingTable.NumberOfRows For iColum = 1 To MyDrawingTable.NumberOfColumns Set MyText = MyDrawingTable.GetCellObject(iRow, iColum) MyString = MyText.Text If MyString <> "" Then MyString = Replace_Chars(MyString) End If 'ersetzen wenn geändert If MyText.Text <> MyString Then MyText.Text = MyString End If Next Next Next End If Next Next MsgBox "Bin fertig!" End Sub Function Replace_Chars(MyString As String) As String Dim varSplit() As String Dim iSplit As Integer Dim iLen As Integer '---Abfrage über alle Texte If InStr(1, MyString, "ä", 1) Then MyString = Replace(MyString, "ä", "ae") End If If InStr(1, MyString, "ö", 1) Then MyString = Replace(MyString, "ö", "oe") End If If InStr(1, MyString, "ü", 1) Then MyString = Replace(MyString, "ü", "ue") End If If InStr(1, MyString, "Ä", 1) Then MyString = Replace(MyString, "Ä", "Ae") End If If InStr(1, MyString, "Ö", 1) Then MyString = Replace(MyString, "Ö", "Oe") End If If InStr(1, MyString, "Ü", 1) Then MyString = Replace(MyString, "Ü", "Ue") End If If InStr(1, MyString, "ß", 1) Then MyString = Replace(MyString, "ß", "sz") End If varSplit = Split(MyString, ChrW(8960)) iLen = Len(varSplit(0)) + 1 For iSplit = 1 To UBound(varSplit) Call MyText.SetFontName(iLen, 1, "SYM2") iLen = iLen + Len(varSplit(iSplit)) + 1 Next iSplit Replace_Chars = MyString End Function
------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 08. Nov. 2016 13:16 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Servus Ich weiß dass du alle Umlaute ersetzen willst. Du musst das auch im Code so umsetzen. Meine Frage hab ich gestellt, damit du deinen Code mal näher betrachtest/hinterfragst und verstehst. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
carambols Mitglied Konstrukteur
Beiträge: 39 Registriert: 14.02.2015
|
erstellt am: 08. Nov. 2016 13:49 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Wow Rick, vielen Dank, an eine Funktion hatte ich wahrlich nicht gedacht. Ich werde darauß lernen. Hab schon einige Male festgestellt das Befehle bzw. Codes einem erstmal einfallen müssen Danke ! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 08. Nov. 2016 14:53 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
|
carambols Mitglied Konstrukteur
Beiträge: 39 Registriert: 14.02.2015
|
erstellt am: 08. Nov. 2016 15:04 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
|
carambols Mitglied Konstrukteur
Beiträge: 39 Registriert: 14.02.2015
|
erstellt am: 13. Nov. 2016 12:13 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 13. Nov. 2016 13:00 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
|
carambols Mitglied Konstrukteur
Beiträge: 39 Registriert: 14.02.2015
|
erstellt am: 13. Nov. 2016 13:11 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 13. Nov. 2016 13:23 <-- editieren / zitieren --> Unities abgeben: Nur für hansi69
Servus Dann packe doch den Code einfach in ein CATScript (mit Umbennenung der Sub). Oder benenne die Sub in VBA um (CATMain). Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |