| |  | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: Zeichenumwandlung (532 mal gelesen)
|
Ex-Mitglied

|
erstellt am: 05. Feb. 2005 16:25 <-- editieren / zitieren -->
Hallo zusanmmen, im Rahmen eines Makros zur Umwandlung von Zeichen bin ich auf eines gestossen, das sich so anscheinend nicht umwandeln läßt. Dabei scheint es sich um ein Unicode-Zeichen zu handeln. Mein Code:
Code:
Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = ChrW(8804) .Replacement.Text = "max." .Forward = True .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With
Irgendwo ist noch ein Fehler hier drin. Kann mir jemand einen tipp geben, wo er liegt? Viele Grüße, CEROG
------------------ Inoffizielle Linux-Hilfeseite http://linux.cad.de |
startrek Mitglied Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 05. Feb. 2005 22:19 <-- editieren / zitieren --> Unities abgeben:         
Abend Roland, ich geh' mal einfach davon aus, du spricht von einem word-makro ;-) Hab' das mal so nachgebastelt, funktioniert eigentlich, Einstellungen waren dieselben, bei meiner Makroaufzeichnung stand zwar das Execute am Ende, nicht am Anfang - wie bei Dir - ging aber trotzdem. Sowohl innerhalb ganzer Wörter als auch als solitärzeichen. Ich weiss, is keine große Hilfe, aber wenns nich beim ersten mal klappt, versuchs nochmal mit dem Cursor an andrer Stelle oder so ... ... ansonsten wüsst ich nicht wo der Hase hier im Pfeffer liegen könnte;-) lg Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied

|
erstellt am: 06. Feb. 2005 10:52 <-- editieren / zitieren -->
Hallo Nancy, es geht tatsächlich um ein Word-Makro, wie du richtig erkannt hast. Nachdem ich die Zeile Code: Selection.Find.Execute Replace:=wdReplaceAll
unter meinen Block schreibe, funktioniert es einwandfrei. Ich hab hier eine längere Liste mit Ersetzungen, die ich abarbeiten muß. Die Zeile, die in meinem ersten Posting über meinem with-Block steht, gehört zu der Umwandlung vorher.  Ich muß mal sehen, wie ich den ganzen Kram vereinfache. Danke für deine Hilfe. Viele Grüße und viel Spaß beim Karneval, Fasching, Fasnet, Fasent oder wie es bei euch heißt, CEROG PS: Kannst du nicht für VB-Legastheniker wie mich eine "Inoffizielle VB-Hilfeseite" erstellen? PS2: Langsam schulde ich dir was... ------------------ Inoffizielle Linux-Hilfeseite [Diese Nachricht wurde von CEROG am 06. Feb. 2005 editiert.] |
startrek Mitglied Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 06. Feb. 2005 19:02 <-- editieren / zitieren --> Unities abgeben:         
Abend Roland, hmm, ehrlichgesagt kannste mich mit Word jagen ..., aber okay, vereinfachen könnte man das vielleicht so in der Art:
Code:
Sub aaa() With Selection.Find 'eins .Text = ChrW(8804) .Replacement.Text = "max." .Execute Replace:=wdReplaceAll 'zwei .Text = "Ø" .Replacement.Text = "Durchmesser" .Execute Replace:=wdReplaceAll 'drei .Text = "Microsoft" .Replacement.Text = "M$" .Execute Replace:=wdReplaceAll 'usw usf ... End With End Sub
Inwiefern man jedesmal den ganzen andren 'Rattenschwanz' braucht, weiss ich nicht, keine Ahnung. Wichtig ist aber jedesmal die zeile: .Execute Replace:=wdReplaceAll, sonst führt er nur die letzte Replace-Anweisung innerhalb des 'With' aus. Alternativ vielleicht noch mit Regex, kommt aber drauf an - nur wenn Du nach bestimmten Mustern suchst - wenn Du aber jeweils immer nur ein Sonderzeichen durch ein Wort ersetzen willst, lohnt es sich sicherlich nicht. Willste aber zB mehrere Sonderzeichen auf einmal durch "irgendwas" ersetzen, könntes intressant sein. Allerdings musste Dir dazu dann nen Verweis auf die M$ VBScript Regular Expressions 5.5 Bibliothek setzen. 'Inoffizielle VB-Hilfeseite' - ... ich ... erstellen?!? Neenee, Spass beiseite, weiss ja nichmal wie man ordentlich mit API's umgeht ausserdem gibts da IMHO derer schon soviel wie Sand am Meer von Foren ganz zu schweigen ;-))) lg Nancy --
Code:
Sub justForFun() Dim re As New regexp re.IgnoreCase = False re.Global = True With Selection 'eins, normalerweise müsste auch ein \u8804 gehen, geht aber nich, i don't know ... re.Pattern = ChrW(8804) .Text = re.Replace(.Text, "max.") 'zwei re.Pattern = "Ø" .Text = re.Replace(.Text, "Durchmesser") 'drei, ersetzt zb alle '+' '&' durch 'und' re.Pattern = "[+&]" .Text = re.Replace(.Text, "und") End With End Sub
[Diese Nachricht wurde von startrek am 06. Feb. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied

|
erstellt am: 06. Feb. 2005 19:20 <-- editieren / zitieren -->
Hallo Nancy, den ganzen Sermon habe ich durch das Mitschreiben eines Austauschs erhalten. Jetzt schreibe ich ihn immer mit, aus Angst es könnte Probleme geben. Ich überlege, daß ganze mit einer Art Schleife zu machen oder einer case-Anweisung, falls es sowas bei Word-VBA gibt. Mein zweites Problem dabei ist, daß es eigentlich nicht mein Job ist, den ich dabei mache. Aber sonst ist ja niemand da... Viele Grüße, CEROG ------------------ Inoffizielle Linux-Hilfeseite |
startrek Mitglied Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 06. Feb. 2005 19:53 <-- editieren / zitieren --> Unities abgeben:         
Hmm, ich kenn' ja deine Texte/ersetzungen nicht, aber über 'ne Schleife? Geht sicher, aber irgendwoher muss er ja eine Art Suchen/Ersetzen Info bekommen. Theoretisch das ganze Palaver in nem Array oder nem externen File speichern, so als eine Art 'Übersetzungstabelle'. Sinngemäss: Code:
dim arr(1 to 10, 1 to 2) arr(1,1)="1" : arr(1,2)="eins" arr(2,1)="2" : arr(2,2)="zwei" arr(3,1)="3" : arr(3,2)="drei" arr(4,1)="4" : arr(4,2)="vier"
Dann kannste den ganzen Kram mit for lbound(arr) to ubound(arr) - next drüberbügeln. Jedenfalls, so in etwa könnte ichs mir zumindest vorstellen ... dazu brauchts aber irgendwo/irgendwie erstmal ne hinterlegte Definition: was ist 'Suchen_nach' : was ist 'Ersetze_durch'(könnte IMHO  auch ein Textfile sein, mit Delimiter zb ':', m.e. dann irgendsowas 1:eins 2:zwei 3:drei dann gehts sicher auch mit Schleife;-) lg Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied

|
erstellt am: 06. Feb. 2005 20:08 <-- editieren / zitieren -->
Hallo nancy, das mit einem Array könnte gehen. das ist dann bei einer Erweiterung wahrscheinlich weniger fehlerträchtig als im Augenblick... Muß mich mir mal genauer anschauen. Viele Grüße, CEROG ------------------ Inoffizielle Linux-Hilfeseite |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |