Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Codeumwandlung in Word
zurück: Automatisch Dateien suchen und drucken weiter: Drucken mit VBA... Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Bitte Status wählen ! Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
holgpadd
Im Profil kannst Du frei den Rang ändern


Verfasst am:
14. Okt 2005, 10:23
Rufname:

Codeumwandlung in Word - Codeumwandlung in Word

Nach oben
       

Gruß an alle VBA-Kenner.

Ich hab ein (Kleines) Problem mit der Erstellung eines Makros.

Ich will Daten, die in Beta-Code kodiert sind in eine Uni-Code-Schriftart umwandeln. Das ist an sich kein Problem. Allerdings gibt es einige Zeichen, die sich aus mehreren Einzel-Cods zusammensetzen (Zum Beispiel ein Buchstabe mit einem Unterpunkt). Wandel ich diese Zeichen um (ich hab ein Makro für Suchen und Ersetzen geschrieben) so ist die Darstellung falsch.

Gehe ich hinter dieses Zeichen und klicke <Alt> + C, so wird mir der Unicode des letzten Zeichen dargestellt. Ein erneuten drücken von <Alt>+C ergibt dann eine korrekte Darstellung.
Ich glaube somit, dass ich eigentlich bei der Umwandlung richtig gemacht habe.
Das Makro für ein Zeichen sieht bei mir folgendermaßen aus:

Sub UmwandlungBetaUni()

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "#1000"
.Replacement.Text = ChrW(55296) & ChrW(56700)
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll

Ich würde gern wissen, ob es möglich ist diesem Makro zu "erklären", dass nach dem Ersetzen eines Zeichens hinter dem neuen Zeichen 2x <Alt>+C geklickt werden soll. Dann müßte mein Problem zu beseitigen sein.
Ich arbeite mit Word2002

Ich hoffe mir kann jemand helfen.

Schon mal vielen Dank

holgpadd

Zusatz:
Ich habe inzwischen einen Befehl gefunden der
Selection.ToggleCharacterCode
heißt. Hat jemand eine Ahnung, ob mir damit weitergeholfen werden kann und wie ich ihn in mein Makro integrieren muß, damit es funktioniert.
Es sollen Zeichen gefunden werden, ersetzt werden und dirket hinter dem ersetzten Zeichen soll in dem Unicode un zurück gewandelt werden (bei mir geschieht das mit <Alt>+C.

Nochmals Danke

holgpadd
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
15. Nov 2005, 21:15
Rufname:
Wohnort: Leipzig


AW: Codeumwandlung in Word - AW: Codeumwandlung in Word

Nach oben
       

Hallo Holgpad,

da du den Befehl ja schon hast, müsste es etwa so gehen:
Code:
Sub UmwandlungBetaUni()

With Selection.Find
   .ClearFormatting
   .Replacement.ClearFormatting
   .Text = "#1000"
   .Replacement.Text = ChrW(55296) & ChrW(56700)
   .Forward = True
   .Wrap = wdFindAsk
   .Format = False
   .MatchCase = False
   .MatchWholeWord = False
   .MatchWildcards = False
   .MatchSoundsLike = False
   .MatchAllWordForms = False
End With
Selection.Find.Execute
   
If Selection.Find.Found Then
   Selection.Find.Execute Replace:=wdReplaceAll
   Selection.ToggleCharacterCode
End If
End Sub

_________________
Sei doch so nett und gib eine Rückmeldung, ob es klappt!
Gruß, Lisa

Guter Rat ist teuer!
holgpadd
Im Profil kannst Du frei den Rang ändern


Verfasst am:
17. Nov 2005, 07:30
Rufname:

AW: Codeumwandlung in Word - AW: Codeumwandlung in Word

Nach oben
       

Hallo Lisa,

vielen Dank für den Versuch.
Leider funktioniert das Ganze nicht.
Bekommen eine Fehlermeldung.
Sie lautet Laufzeitfehler '4198': Befehl misslungen. Beim Debuggen wird der Befehl zum, Codeumwandeln angezeigt
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
17. Nov 2005, 18:36
Rufname:
Wohnort: Leipzig

AW: Codeumwandlung in Word - AW: Codeumwandlung in Word

Nach oben
       

Hallo Holger,

offenbar liegt es daran, dass ich noch nicht so gut verstanden habe, was du da machst. Ich habe gerade diesen Code nochmal probiert:
Code:
Sub UmwandlungBetaUni()

With Selection.Find
   .ClearFormatting
   .Replacement.ClearFormatting
   .Text = "1000"
   .Replacement.Text = "1EB1"
   .Forward = True
   .Wrap = wdFindStop
   .Format = False
   .MatchCase = False
   .MatchWholeWord = False
   .MatchWildcards = False
   .MatchSoundsLike = False
   .MatchAllWordForms = False
End With
Selection.Find.Execute
   
If Selection.Find.Found Then
   Selection.Find.Execute Replace:=wdReplaceAll
   Selection.ToggleCharacterCode
End If
End Sub

Da ich nicht weiß, was du da für Zeichen hattest, habe ich jetzt nach "1000" gesucht und sie durch 1EB1 ersetzt und dieses dann durch seinen Unicode. Der Code läuft durch und 1EB1 wird durch a mit Brevis und Gravis ersetzt, Ergebnis: . Ich hoffe, man kann es hier halbwegs erkennen. Das heißt, der Befehl wandelt Unicode in seine Darstellung um. Der Fehler muss also vorher schon liegen, evtl. bei dem .Replacement.Text. Bist du sicher, dass das so richtig ist? Sind das die Unicodes, die danach umgesetzt werden müssen? Ich habe diese ChrW(55296) und ChrW(56700) versucht, bei mir kommen leere Felder heraus.

_________________
Sei doch so nett und gib eine Rückmeldung, ob es klappt!
Gruß, Lisa

Guter Rat ist teuer!
holgpadd
Im Profil kannst Du frei den Rang ändern


Verfasst am:
18. Nov 2005, 12:20
Rufname:


AW: Codeumwandlung in Word - AW: Codeumwandlung in Word

Nach oben
       

Sorry, hatte vergessen mich anzumelden:

Vielen Dank, dass du dir so viel Mühe gibst.

Vielleicht erkläre ich das Problem nochmals etwas genauer.

Ich arbeite z.Z mit einer Daten-CD, die altgriechische Inschriften enthält. Diese sind in Beta-Code gespeichert. Es gibt einige Programme, die diesen Code auslesen und in Uni-Code-Buchstaben umwandeln (z.B. Diogenes). Leider gibtv es in Inschriften einige griechische Sonderzeichen, die von diesem Programm nicht umgewandelt werden können. (Ich glaube, weil einfach eine Schriftart verwendet wird, die diese Uni-Codeblöcke nicht enthält). Diese Zeichen werden in der Ausgabe als Beta-Code ausgegeben. Ich habe für Word eine Schrift, die die Zeichen Darstellemn kann, muß also nur den Beta-Code mittels Makro in ein Uni-Kodezeichen umwandeln. Das geht soweit einwandtfrei.
Allerdings haben Inschriften-Editionen den Nachteil, das zeichen, die nicht mer eindeutig zu lesen sind, durch einen Punkt unter dem Zeichen markiert werden. Für meine Arbeit ist es wichtig, dass dieser Punkt dargestellt wird. Bei Makros scheint der Befehl "ChrW(803)" den Unterpunkt zu codieren.
Beispiel: der Betacode #1000? (? = Unterpunktcodoerung) müßte im Makro als "ChrW(55296) & ChrW(56700) & ChrW(803)" erscheinen.
Leider stellt word aber dieses korrekt koderite Zeichen nicht dar (es erscheint nur der Unterpunkt). Wenn ich aber hinter das Zeichen gehe und 2 mal "Altc +C" klicke, d.h. zwischen Zeichen und Code 2 mal umschalte, habe ich das richtige Zeichen. Da ich aber mit ca. 20000 Inschriften zu arbeiten habe (über kurz oder lang) ist es etwas muhsam dies immer per Hand zu machen. Also hatte ich die Hoffnung diesen Befehl in ein Makro einzubauen. Bisher aber ohne erfolg.
Es scheint, als ob dieses Forum meine letzte Hoffnung ist.

Somit wäre mein Primärziel, es zu schaffen, das die Zeichenfolge #1000? in erfolgreich in den oben beschriebenen Makrocode umgewandelt wird und auch korrekt angezeigt (Ergebnis = "~" + Unterpunkt)

Vielleicht kannst du mir ja helfen. Ich wäre sehr froh darüber.

Man muss eine Schrift namens "Cardo" verwenden. Dort sind alle (für mich wichtigen) Zeichen kodert. Dann solte es auch keine leeren Felder geben.
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
18. Nov 2005, 17:46
Rufname:
Wohnort: Leipzig

AW: Codeumwandlung in Word - AW: Codeumwandlung in Word

Nach oben
       

Hallo Holger,

leider habe ich die Schrift Cardo nicht, wenn ich die Codes einzeln eingebe, sehe ich die ersten beiden Zeichen nicht, nur den Unterpunkt. Trotzdem funktioniert dieser Code bei mir:
Code:
Sub UmwandlungBetaUni()

With Selection.Find
   .ClearFormatting
   .Replacement.ClearFormatting
   .Text = "#1000?"
   .Forward = True
   .Wrap = wdFindStop
   .Format = False
   .MatchCase = False
   .MatchWholeWord = False
   .MatchWildcards = False
   .MatchSoundsLike = False
   .MatchAllWordForms = False
End With
Selection.Find.Execute
   
If Selection.Find.Found Then
   Selection.TypeText ChrW(55296) & ChrW(56700) & ChrW(803)
End If
End Sub

Also im Falle des Findens von "#1000?" wird der String getippt, danach müsste Alt C eigtl. nicht mehr nötig sein, ich kann es aber schlecht ausprobieren.
Was jedoch auch funktioniert im Ersetzensfall, ist das hier:
Code:
    With Selection
        .TypeText "007E"
        .ToggleCharacterCode
        .TypeText "0323"
        .ToggleCharacterCode
    End With

Es werden die Unicodes eingegeben, die man in der Windows-Zeichentabelle ablesen kann, und danach umgewandelt. Bei mir erscheint dann ~ mit Unterpunkt. Hier sieht man es natürlich nicht.

Gerade habe ich noch das hier gefunden, aber noch nicht ganz durchgelesen:

Unicode

_________________
Sei doch so nett und gib eine Rückmeldung, ob es klappt!
Gruß, Lisa

Guter Rat ist teuer!
holgpadd
Im Profil kannst Du frei den Rang ändern


Verfasst am:
18. Nov 2005, 18:03
Rufname:

AW: Codeumwandlung in Word - AW: Codeumwandlung in Word

Nach oben
       

Der letzte Makroteil (mit Unicode eingabe) sieht sehr vielversprechend aus. Mir konnte bisher niemand verraten, wie man das macht.
Könntest du mir noch sagen, wie ich den zweiten Codeteil mit dem ersten (Suche und ersetzten) verknüpfe. Bin nämlich ein ziemlicher Laie (was du sicher schon gemerkt hast) bei VBA-Programmierung. Alles was ich weiß hab ich in ein par Büchern zusammengeflickt, aber verstehen tu ich noch nicht so viel.
Dann kann ich mich hinsetzten und am Wochenende ein Makro schreiben.
Vielleicht als Beispiel:
Suchen nach #1000?
Unicode ersetzen: 1017C + 0323

Wenn das funktioniert müßte ich mit den anderen Zeichen klarkommen.

Vielen Dank für deine Hilfe
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
18. Nov 2005, 19:20
Rufname:
Wohnort: Leipzig

AW: Codeumwandlung in Word - AW: Codeumwandlung in Word

Nach oben
       

Hallo Holger,

so, ich habe jetzt mal eine Schleife geschrieben, die den Hauptteil des Dokuments durchsucht, also ohne Kopf- und Fußzeilen. Es dürfen auch noch keine Abschnittswechsel im Dokument vorhanden sein. Man müsste das Ganze sonst noch erweitern. Aber ich denke, damit hast du eine Grundlage. Ich habe die Stellen mit Kommentar gekennzeichnet, an denen du die Such- und Ersetzzeichen einsetzen musst:
Code:
Sub UmwandlungBetaUni()
    'wandelt ein bestimmtes Zeichen in zwei Unicode-Zeichen um

    'prüft ob Leerzeichenausgleich eingeschaltet, schaltet notfalls aus
    If Options.PasteSmartCutPaste = True Then
        Options.PasteSmartCutPaste = False
    End If
   
    'sorgt dafür, dass ganzes Dokument durchsucht wird,
    'nur Hauptteil ohne Kopf- und Fußzeilen
    With Selection
        .HomeKey wdStory
        .Find.ClearFormatting
        .Find.Replacement.ClearFormatting
    End With
   
    Do
        With Selection.Find
            .Text = "#1000?"    'Hier immer den Suchbegriff eingeben!
            .Forward = True
            .Wrap = wdFindStop
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute
   
        If Selection.Find.Found Then
            With Selection
                .Delete
                    'prüft, ob links vom gefundenen Text ein Leerzeichen steht,
                    'falls nicht, wird eins eingefügt
                .MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
                If .Text <> " " Then
                   .Collapse wdCollapseEnd
                   .TypeText " "
                End If
                .Collapse wdCollapseEnd
                .TypeText "007E"   'Hier immer das Ersatzzeichen eingeben!
                .ToggleCharacterCode
                .TypeText "0323"    'Hier das zweite Ersatzzeichen eingeben!
                .ToggleCharacterCode
            End With
        Else
            Exit Do
        End If
    Loop Until Not Selection.Find.Found

End Sub

_________________
Sei doch so nett und gib eine Rückmeldung, ob es klappt!
Gruß, Lisa

Guter Rat ist teuer!
holgpadd
Im Profil kannst Du frei den Rang ändern


Verfasst am:
18. Nov 2005, 20:18
Rufname:

AW: Codeumwandlung in Word - AW: Codeumwandlung in Word

Nach oben
       

Razz Razz Razz
Hi Lisa,

es scheint zu funktionieren. Razz
Du glaubst gar nich wie lange ich schon nach einer Lösung für das Problem gesucht habe.
Jetzt kann ich mich ja hinsetzen und ein schönes langes Makro schreiben um alle Zeichen zu ersetzten.
Herzlichen Dank.
Ich meld mich, wenn das gesamt-Makro läuft. (Dann hab ich mein Problem entgültig gelöst.

Nochmals herzlichen Dank.
Versteh ich das richtig, das beim aktuellen Makro links vor jedem ersetzten Zeichen ein Leerzeichen eingefügt wird?
Wenn ich das nicht möchte (oftmals gibt es Codefolgen #1000?#1000?, die ohne Lehrzeichen (~~) dargestellt werden sollen) muß ich doch nur folgenden Codebereich weglassen, oder?:

.Delete
'prüft, ob links vom gefundenen Text ein Leerzeichen steht,
'falls nicht, wird eins eingefügt
.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
If .Text <> " " Then
.Collapse wdCollapseEnd
.TypeText " "
End If

Auf jeden Fall hab ich was am Wochenende zu tun.
Herzlichen Dank für die Mühe und den Erfolg.
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
18. Nov 2005, 20:53
Rufname:
Wohnort: Leipzig


AW: Codeumwandlung in Word - AW: Codeumwandlung in Word

Nach oben
       

Hallo Holger,

das Leerzeichen habe ich deswegen eingebaut, weil es nicht funktioniert hat, wenn davor kein Leerzeichen war. Du kannst das aber noch ändern, wenn dir noch was gescheiteres dazu einfällt.
.Delete darfst du nicht weglassen, denn der gesuchte Ausdruck muss gelöscht werden, ehe die anderen Zeichen eingefügt werden.
Du kannst ja mal probieren, wie das Makro läuft, wenn du diesen Part weglässt:
Code:
.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    If .Text <> " " Then
        .Collapse wdCollapseEnd
        .TypeText " "
    End If
.Collapse wdCollapseEnd

Bei mir hat es dann nicht zuverlässig funktioniert. Aber sicher kann man die Routine noch ändern, das war nur so meine erste Idee.
Falls jetzt durch die Prozedur doppelte Leerzeichen entstehen, kann man die ja einfach am Schluss der Prozedur mit Suchen/Ersetzen (2 Leerzeichen durch 1) entfernen, das geht schnell.
Wenn jetzt durch den obigen Code-Schnipsel ein ungewolltes Leerzeichen hineinkommt, muss man es mittels einer If-Schleife eben danach wieder entfernen. Das musst du mal noch im Einzelfall ausprobieren.

Ach so: Wenn du da noch gute Ideen hast und eine elegante (oder auch einfach eine brauchbare) Lösung findest, den Code zum Schluss hier auch einstellen. Sicher gibt es später noch andere User, die etwa ähnliche Probleme haben und dann davon gut profitieren können.

Dann wünsche ich dir mal ein frohes Arbeits-Wochenende. Mr. Green
(Mir natürlich auch - ich will wieder ein weiteres Kapitel VBA lernen Mr. Green)

Gruß, Lisa
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Excel Tipps