Makros für Unicode in Word

Transcription

Makros für Unicode in Word
Hanna-Chris Gast
Word-Makros fürUnicode,
Analyse von Schrift- und Sonderzeichen,
Ersatz von Symbol- und Wingdingszeichen durch Unicode
sowie ein verbessertes Inhalt-Einfügen
Inhalt
Seite
Vorwort................................................................................................................................. 4
1 Die Dokumentvorlage mit Makros................................................................................ 6
1.1 Die Titelseite der Dokumentvorlage für die Makros ...........................................................6
Bild 1.1: Screenshot der Dokumentvorlage mit dem Analysemakro ........................................6
1.2 Die Symbolleiste mit den Icons für die Makros ..................................................................7
Bild 1.2: Symbolleiste mit Icons für die Makros der Dokumentvorlage "UnicodeMakros-kompakt.dot" .....................................................................................................7
1.3 Infotext in der Zip-Datei (Erklaerung_und_Installation.txt) ...............................................7
2
Grundlagen der Codierung von Schriftzeichen im Computer.................................. 10
2.1 Ältere Zeichencodierungen ................................................................................................ 10
2.2 Das Unicode-System .......................................................................................................... 10
Tabelle 2.1: Übersicht der Unicode-Ebenen 0 und 1 mit einer Auswahl an Blöcken ............ 12
2.3 Zum Prinzip der Surrogate ................................................................................................. 13
Tabelle 2.2: Die Unicode-Blöcke der Surrogate .................................................................... 13
2.4 Probleme bei Word 2000 mit Zeichen höherer Unicode-Ebenen ................................... 14
2.5 UTF-Codierung .................................................................................................................... 14
2.6 Abkürzungen (UCS und UTF) ............................................................................................ 14
3
UTF8 im Internet .......................................................................................................... 15
3.1
3.2
3.3
3.4
Codierung UTF-8 ................................................................................................................. 15
Häufigkeit der verschiedenen Codierungen bei Griechischen Seiten .......................... 15
Codierung von Nicht-ASCII-Zeichen in Domain-Namen mittels Punycode .................. 16
Codierung von griechischen Buchstaben usw. in Unterseiten einer Domain
mittels UTF-8 ....................................................................................................................... 17
Bild 3.1: Screenshot einer Adresszeile (Browser = Firefox) .................................................. 17
3.5 Probleme durch die Einführung von IDN-Domains ......................................................... 18
Bild 3.2: Screenshot der Analyse der Epsilons mit dem Analysemakro ............................... 19
3.6 Einige UTF-8-Codes und deren Berechnung ................................................................... 19
Tabelle 3.1: Konvertierung von Unicode (UCS-4) in UTF-8 .................................................. 19
Tabelle 3.2: Deutsche und französische "Sonderzeichen" ................................................... 20
4
5
Schriftarten (Fonts) für Unicode-Zeichen .................................................................. 21
Makro zum Erzeugen von Schriftzeichen aus dem hexadezimalen Unicode,
auch für höhere Unicode-Ebenen (UCS > FFFFhex) ................................................... 23
5.1 Aufgabenstellung ................................................................................................................ 23
Tabelle 5.1: Codierung nach ISO/IEC 10646:2003, Anhang C ............................................ 23
Tabelle 5.2: Für das Makro wichtige Unicode-Werte, umgerechnet in Dezimalwerte .......... 23
5.2 Makro zur Erzeugung eines Schriftzeichens aus dem hexadezimalen Code
(nur für Word 2000 nötig) ................................................................................................... 24
Sub Hexcode_in_Schriftzeichen_umwandeln() .................................................................... 24
5.3 Makro zur Erzeugung eines Zeichens aus dem dezimalen Code .................................. 27
Sub Dezimalcode_in_Schriftzeichen_umwandeln() .............................................................. 27
6
Makro zur Analyse von Schriftzeichen, auch von Zeichen höherer UnicodeEbenen und Sonderzeichen ....................................................................................... 30
6.1 Die einzelnen Probleme und Lösungen ............................................................................ 30
6.1.1 Unicode-Zeichen höherer Ebenen .............................................................................. 30
6.1.2 Probleme mit hohen Zahlen beim VBA-Datentyp "Integer" ........................................ 31
6.1.3 Erkennen von kombinierenden diakritischen Zeichen ................................................ 31
6.1.4 Sonderzeichen in der Messagebox ............................................................................. 32
Seite
Bild 6.1: Screenshot des Ergebnisses des Analyse-Makros in einer erweiterten
Messagebox und in einer "separate Datei" ................................................................. 32
6.1.5 Probleme mit den Windows-Sonderschriftarten .......................................................... 33
6.1.6 Probleme mit Steuerzeichen für Feldfunktionen und für Tabellen .............................. 33
Tabelle 6.1: Beispiele für Feldfunktionen .............................................................................. 34
6.1.7 Ermittlung der (englischen) Namen der Unicode-Schriftzeichen ................................ 35
6.1.8 Weitere Steuerzeichen von Word ............................................................................... 36
6.1.9 Grafiken, Textfelder, Zeichnungen und ähnliches im Tex .......................................... 36
6.1.10 Problem des Öffnens einer Datei mit Makros per Makro (letzte Änderung des
Makros im Mai 2015) ................................................................................................... 37
6.2 Funktionsablauf des Analyse-Makro ................................................................................ 38
6.3 Das fertige Makro zur Analyse von Schrift- und Sonderzeichen, auch von
Windows-Sonderzeichen, von höheren Unicode-Ebenen und von
Schriftzeichen mit kombinierenden diakritischen Zeichen ............................................ 39
Sub Hexcode_und_Name_ermitteln() ................................................................................... 39
Private Sub Ueberschriften_fett() .......................................................................................... 58
Private Function EnglischName(Z1 As String) As String ...................................................... 58
Private Function Symbolname(Z1 As String) As String ........................................................ 60
Private Function Wingdingsname(Z1 As String) As String.................................................... 66
Private Function Fkt_OMML_zählen() As Integer ................................................................. 74
Private Function Fkt_Kompatibitaet() .................................................................................... 74
Private Sub SpeichernX(xxx As String, i As Integer) ............................................................ 74
6.4 Zusatzfunktion: Ausgabe der Zeichenformatierung bei Einzelzeichen ........................ 75
Private Function Fkt_Schriftattribute_ausgeben() As String ................................................. 76
Private Function Fkt_FarbIndex_Farbe() .............................................................................. 77
7
Ersatz der Schriftarten Symbol und Wingdings durch Cambria.............................. 79
7.1 Problemstellung und Kurzbeschreibung .......................................................................... 79
7.2 Ersatz ("Mapping") von Symbol-Zeichen durch Unicode-Zeichen ................................ 79
Tabelle 7.1: Alle Zeichen der Schriftart Symbol mit Unicode-Entsprechungen .................... 80
7.2.1 Auswertung der geeigneten Ersatz-Schriftarten für "Symbol" .................................... 89
7.2.2 Unicode-Ersatzschriftarten ohne Cambria (Stand 2011) ............................................ 89
7.3 Ersatz ("Mapping") für die Wingdings-Zeichen durch Cambria ..................................... 90
Tabelle 7.2: Alle Zeichen der Schriftart Wingdings mit Unicode-Entsprechungen ............... 90
7.3.1 Auswertung der geeigneten Ersatz-Schriftarten für "Wingdings" ............................... 99
7.4 Einige gelöste Probleme .................................................................................................. 100
7.4.1 Erzeugung von Zeichen einer höherer Unicode-Ebene ............................................ 100
Tabelle 7.3: Einige Unicode-Bereiche ................................................................................. 100
7.4.2 Fehlende Freiheit zur Wahl der Schriftart bei einigen Zeichen seit der
Installation des Kompatibilitäts-Pack......................................................................... 100
Bild 7.1: Auszug aus Tabellen 7.2: "NEGATIVE CIRCLED DIGIT ZERO" ......................... 101
Bild 7.2: Screenshot von Buchstaben, die mit Feldfunktion geschützt sind ........................ 101
7.4.3 Dokumentvorlage mit fertigen Makros und Buttons .................................................. 102
Bild 7.3: Screenshot der Dokumentvorlage "Unicode-Makros-kompakt.dot" ...................... 102
7.5 Problem bei fehlender Schriftart "Symbola" .................................................................. 102
7.6 Das fertige Makro zum Ersatz der Windows-Sonderschriftarten "Symbol" und
"Wingdings" durch Unicode-Zeichen ............................................................................. 103
Sub Symbol_Wingdings_in_Unicode_im_gesamten_Dokument() ..................................... 103
Sub Symbol_Wingdings_in_Unicode_nur_Markierten_Text() ............................................ 105
Private Sub Symbol_Wingdings_in_Cambria(Rng1) .......................................................... 105
Private Sub Symbol_U(ys) .................................................................................................. 107
Private Sub Wingdings_U(ys) ............................................................................................. 124
Private Sub Wingdings_Segoe(ys) ...................................................................................... 134
Private Sub Wingdings_Symbola(ys) .................................................................................. 137
Private Function ChrXXL(Code2) As String ........................................................................ 144
Private Sub Markiertes_mit_Feldfunktion_schuetzen() ....................................................... 144
Private Function Fkt_FontIsInstalled(FontName As String) As Boolean ............................ 144
8
Makro zum verbesserten Einfügen von "Nur Text" ................................................ 146
8.1 Kurzbeschreibung für den Anwender von "Inhalt_einfügen" ...................................... 146
8.2 Makros "Inhalt_einfügen_korrigiert" mit Tastenkürzel Strg + i .............................. 147
Sub Inhalt_einfügen_korrigiert() .......................................................................................... 147
2
Seite
8.3 Makro "Inhalt_einfügen_erweitert" mit Strg + Shift + i ...................................... 153
Sub Inhalt_einfügen_erweitert() .......................................................................................... 153
Private Sub c0_hoeher_tiefer_3_Punkt_ersetzen() ............................................................ 164
Private Sub c1_hoeher_tiefer_in_hochtief_Animation() ...................................................... 165
Private Function Fkt_UTF8_decodieren() As String ........................................................... 168
Private Function Fkt_zweiByte_Sequenz(strCode As String) As Integer ........................... 170
Private Function Fkt_dreiByte_Sequenz(strCode As String) As Integer ............................. 170
Private Function Fkt_vierByte_Sequenz(strCode As String) As Long ................................ 171
Private Function ChrXXL(Code2) As String ........................................................................ 171
Private Sub Shapes_beseitigen() ........................................................................................ 172
8.4 Makro "Bereinigt_Einfügen" mit AltGr + j ................................................................... 173
Sub Bereinigt_einfügen() ..................................................................................................... 173
Private Sub c25_höher_tiefer_Animation_für_Word_2000() .............................................. 181
Private Sub Shapes_beseitigen() ........................................................................................ 185
Anhang A Weitere Verbesserungen für Word 2000 ...................................................... 186
A.1 Beseitigen der bei Word 2000 lästigen Symbol-Leiste "Web" ..................................... 186
A.2 Tastenkürzel anpassen in Word 2000 ............................................................................. 186
A.3 Tabellen auch in Word 2000 in "Raster 5" formatieren ................................................. 187
Sub Tabelle_formatieren_wie_Raster_5()........................................................................... 187
A.4 Befehl "Edit Field" auch für Word 2000 .......................................................................... 188
Sub Feld_Dialog_halbgefüllt_öffnen_Word_2000() ............................................................ 188
A.5 Lösung zu dem Problem mit "Gehe zu Seite" in Word 2000 ....................................... 190
Sub GoTo_Eingabefeld() ..................................................................................................... 190
A.6 Suche nach Text mit Farbschattierung in Word 2000 ................................................... 191
Sub Farbe_in_Text_suchen() .............................................................................................. 191
Sub hellrosa_Schattierung_suchen() .................................................................................. 191
A.7 Alle Bilder eines Ordners gleichzeitig in eine Datei einfügen ...................................... 192
Sub a1_alle_Bilder_eines_Dateityps_einfügen_aus_wählbarem_Verzeichnis() ................ 192
Anhang B Die Rechenformel zum Umrechnen von UTF8-Code in normale Zeichen.. 194
B.1 Auszug aus: ISO/IEC 10646:2003, D.5 " Mapping from UTF-8 form to UCS-4
form" ................................................................................................................................... 194
B.2 Zwei fertige Makros für die Umwandlung von Internet-Adressen mit UTF8 in
normalen Text .................................................................................................................... 195
Sub UTF8_im_Text_decodieren() ....................................................................................... 195
Sub UTF8_Decodierung_nur_als_MsgBox_ausgeben() .................................................... 197
Private Function Fkt_zweiByte_Sequenz(strCode As String) As Integer ........................... 200
Private Function Fkt_dreiByte_Sequenz(strCode As String) As Integer ............................. 200
Private Function Fkt_vierByte_Sequenz(strCode As String) As Long ................................ 200
Private Function ChrXXL(Code2) As String ........................................................................ 201
Anhang C Abstract in English ........................................................................................ 202
Fig. C.1 Screenshot of the analysis ..................................................................................... 202
Fig. C.2: Screenshots for the analysis of unknown characters ........................................... 203
Fig. C.3: Screenshot of the analysis of a small letter Alpha with acute .............................. 203
Fig. C.4: Two Hieroglyphs as a sample for a higher Unicode plane ................................... 204
Fig. C.5: A Hebrew letter with Latin letters in the same line................................................ 204
Fig. C.6: Special marks ....................................................................................................... 205
Literaturhinweise............................................................................................................. 206
Impressum ....................................................................................................................... 208
3
Vorwort
Dieser Aufsatz ist eine Zusammenfassung der Aufsätze:
"Erweiterung von Word 2000 zur Erzeugung von Schriftzeichen höherer Unicode-Ebenen sowie
Erstellung eines Makros für Word 2000 bis Word 2010 zur Analyse von Schrift- und Sonderzeichen mit
Ausgabe des Schriftzeichen-Namens nach ISO/IEC 10646", siehe [26].
sowie:
"Word-Makro zur Umcodierung von Symbol- und Wingdingszeichen in Unicode Zeichen",
siehe [27].
Neu gegenüber den beiden ursprünglichen Aufsätzen sind die Makros in Abschnitt 8. In den beiden
Makros "Inhalt_einfügen_erweitert" und "Bereinigt_einfügen" bleiben Exponenten und Indizes als
solche erhalten.
Dieses Dokument enthält auch alles über UTF8 aus dem Aufsatz über Griechische Schrift, siehe [4],
mit einem neu-ergänzten Makro zur Decodierung von UTF8, siehe 8.3.
Die Makros aus diesem Aufsatz biete ich in einer fertigen (verzippten) Dokumentvorlage an, in der
die Makros der Abschnitte 5, 6, 7 und 8 mit Tastenkürzeln bereits fertig installiert sind, sowie die Liste
der Namen sämtlicher Unicode-Zeichen (Stand 2015). Download siehe [2] und Impressum.
Vorwort zur Synthese und Analyse von Unicode-Zeichen
Ursprünglich sollte diese Arbeit nur ein Kapitel für mein Buch über die Griechische Schrift [4]
werden, weil ich dazu per Makros mein Word 2000 für Unicode tauglich machen musste. Da diese
Arbeit aber zu umfangreich geworden ist und die Makros außerdem auch für andere Schriften wie
kyrillische, hebräische, arabische bis hin zu chinesischen Schriftzeichen anwendbar sind,
veröffentlichte ich sie im Sommer 2010 als separaten Aufsatz.
Die beiden hier beschriebenen Word-Makros für die Synthese von Schriftzeichen aus einem
eingegebenen Code (siehe Abschnitte 5.2 und 5.3) können sämtliche zulässigen Schrift- und
Sonderzeichen erzeugen, aber auch Steuerzeichen. Die beiden Synthese-Makros erweitern die
Funktionen von Word 2000, entsprechen ansonsten der Funktion in Word 2003 bis Word 2010. Seit
der Einführung von Cambria und Cambria Math ist die Suche nach einer geeigneten Schriftart (Font)
nicht mehr so schwierig wie früher. Einige Fonts liste ich in Abschnitt 4 auf.
Bei der Analyse von vorhandenen Schriftzeichen in einem Word-Text kann das in dieser Arbeit
entwickelte Analyse-Makro (siehe Abschnitt 6.3) sämtliche normgerechten Schriftzeichen (Unicode)
analysieren und (außer bei chinesischen, japanischen und koreanischen Silbenzeichen) deren
englischen Namen nach ISO/IEC 10646 ausgeben, einschließlich von Schriftzeichen höherer UnicodeEbenen. Daneben kann das Analyse-Makro aber auch die Codes von nicht-normgerechten
Sonderschriftarten ermitteln sowie bei den Schriftarten "Symbol" und "Wingdings" die Bedeutungen
und, soweit vorhanden, die entsprechenden Unicode-Schriftzeichen angeben.
Das Analyse-Makro bietet die Möglichkeit, über 100 Zeichen einer Zeichenkette gleichzeitig zu
analysieren. Damit können auch Schriftzeichen mit mehreren diakritischen Zeichen gut analysiert
werden, die sonst nur umständlich zu analysieren sind, oder etwa eine Kombination von
Schriftzeichen aus Schriftsystemen, die von rechts nach links geschrieben werden, mit Schriftzeichen,
die von links nach rechts geschrieben werden. Dies würde sich mit dem Befehl "Alt + C" in Word (ab
Word 2003) nicht analysieren lassen. Das Analyse-Makro funktioniert auch dann, wenn im Text
mangels Fonts nur Platzhalter ("leere Kästchen") zu sehen sind. Das Analyse-Makro erweitert nicht
nur die vorhandenen Funktionen von Word 2000, sondern bietet auch Vorteile für Word 2003 bis
Word 2010!
Inzwischen funktioniert das Analysemakro auch bei komplizierteren Feldfunktionen, Tabellenfeldern,
Shapes und OMML-Formeln. Es werden die vorhandenen Textmarken aufgelistet (seit 2012).
4
In Anhang A ergänzte ich weitere für Word 2000 nützliche Makros.
Vorwort zum Ersatz von Symbol- und Wingdingszeichen
Im Zeitalter von Unicode sind Sonderschriftarten wie "Symbol" und "Wingdings" veraltet. Zwar ist
"Symbol" in jedem Postscriptdrucker als eine der Adobeschriften enthalten und wird fehlerfrei
gedruckt, aber im Internet besteht die Gefahr, dass der Leser/Internetnutzer statt eines griechischen
Alpha ein lateinisches "a", statt Beta ein "b" usw. zu sehen bekommt, da die Sonderschriftarten nicht
nach den für das Internet üblichen Normen codiert sind (für Unicode siehe die Internationale Norm
ISO/IEC 10646 oder unter [1]).
Mit dem hier entwickelten Makro werden die Zeichen dieser beiden Sonderschriftarten weitgehend
durch Unicode-Zeichen ersetzt. Das fertige Makro funktioniert von Word 2000 bis Word 2010. Es gibt
in Abschnitt 7.6 zwei Rahmenmakros, eines für den Ersatz der Symbol- und Wingdingszeichen im
gesamten Dokument, und eines für den Ersatz nur an der markierten Stelle.
Zur Installation von Makros in der Normal.dot bzw. in der Normal.dotm siehe [6].
Wird einem Zeichen die Schriftart "Symbol" zugeordnet, werden nur die letzten zwei Hexzeichen des
Codes berücksichtig. Aus dem Ohmzeichen "Ω" (Unicode hex.2126) wird dann fälschlich "&". Ob der
hexadezimale Code nun "0026", "26", "1026", "1226," "EE26" oder (richtig) "F026" lautet, das
Zeichen wird bei Schriftart "Symbol" optisch immer zum "Ampersand"! Das Symbol-Zeichen, das
korrekt über Einfügen → Symbole → Schriftart 'Symbol' erzeugt wird, hat den Hexcode "F026." Das
Makro in diesem Aufsatz berücksichtigt nur die richtigen Codes. Vielleicht sollte hier noch eine
Fehlermeldung eingebaut werden.
Mit den neuen Fonts "Cambria" und "Cambria Math" entfällt weitgehend die Suche nach passenden
Fonts.
Aufgrund der Erweiterung von Unicode ("Unicode 7") im Frühjahr 2014 [1] und der ent-sprechenden
Erweiterung der Schriftart "Symbola" [10] lassen sich jetzt alle oder zumindest fast alle
Wingdingszeichen durch Unicode-Zeichen ersetzen. Über passende Ergänzungs-Hinweise für die noch
fehlenden 22 Wingdingszeichen wäre ich sehr dankbar.
Die Schriftart "Cambria" war mir zu Beginn noch unbekannt bzw. existierte noch nicht, als ich 2009
das Makro zuerst entwickelte. Ich ordnete jetzt soweit möglich den Unicode-Zeichen die Schriftart
Cambria bzw. Cambria Math zu. Ich habe in Tabelle 3.2 alle Zeichen in roter Farbe dargestellt, für die
eine zusätzliche Schriftart (Font) aus dem Internet downgeloaded werden muss (ich empfehle
"Symbola").
Da seit Installation des Kompatibilitäts-Packs für einige Zeichen die Schriftart nicht mehr frei wählbar
ist, musste ich sie durch Feldfunktion schützen, siehe Abschnitt 7.4.2.
Hanna-Chris Gast, Oktober 2015
5
1 Die Dokumentvorlage mit Makros
Bezugsquelle und Download-Adresse siehe Impressum.
1.1 Die Titelseite der Dokumentvorlage für die Makros
Bild 1.1: Screenshot der Dokumentvorlage mit dem Analysemakro
6
1.2 Die Symbolleiste mit den Icons für die Makros
Die Icons der Symbolleisten für Word bis Word 2003 sind auch in Word 2010 benutzbar, und
zwar im Menüband (Ribbon) unter "Add-Ins", siehe folgenden Screenshot.
Bild 1.2: Symbolleiste mit Icons für die Makros der Dokumentvorlage
"Unicode-Makros-kompakt.dot"
1.3 Infotext in der Zip-Datei (Erklaerung_und_Installation.txt)
Dipl.-Ing. Hanna-Chris Gast;
Berlin, Stand 9. November 2016
-----------------------------* Erklärung und Installation *
-----------------------------Diese Dokumentvorlage mit den Makros ist am besten im "Word\STARTUP-Order" für Word
unterzubringen, damit die darin enthaltenen Makros automatisch genutzt werden
können (dabei Dateiname nicht ändern!).
Pfad zum StartUp-Order unter Windows XP:
C:\Dokumente und Einstellungen\...\Anwendungsdaten\Microsoft\Word\StartUp
Pfad zum StartUp-Order unter Windows 7:
C:\users\...\appdata\roaming\microsoft\word\STARTUP
***
Den wichtigsten Makros sind bereits Tastenkürzel zugeordnet:
Sub Hexcode_und_Name_ermitteln()
AltGr + C
Sub Inhalt_einfügen_korrigiert()
Sub Inhalt_einfügen_verbessert()
Sub Bereinigt_einfügen()
Strg + i
Strg + Shift + i
AltGr + j
Sub Dezimalcode_in_Schriftzeichen_umwandeln()
Alt + K
Sub Hexcode_in_Schriftzeichen_umwandeln()
' <!nur für das alte Word 2000 nötig>
Sub Symbol_Wingdings_in_Unicode_im_gesamten_Dokument()
Sub Symbol_Wingdings_in_Unicode_nur_Markierten_Text()
Das Makro "Sub Hexcode_in_Schriftzeichen_umwandeln()" ist nur für Word 2000 nötig
und entspricht dem Befehl "Alt + C" ab Word 2003.
***
Die Makros für die Umwandlung von Symbol- und Wingdingszeichen in Unicodekompatible Zeichen wandelt alle Zeichen
7
um, soweit sie mit Cambria darstellbar sind, und weitere Zeichen nur, wenn die
Schriftart "Symbola" vorhanden ist.
Nicht umwandelbare Zeichen werden rosa markiert.
***
Die Makros für "Inhalt_einfügen" korrigieren den Fehler in Word, dass Feste
Leerzeichen beim "Einfügen-nur Text" verschwinden und dass in Word 2010 Bedingte
Trennstriche teilweise in Sonderzeichen "¬" umgewandelt werden.
Es werden von den beiden Makros für "Inhalt_einfügen" die Festen Bindestriche in
normale Bindestriche umgewandelt
und Bedingte Trennstriche ersatzlos gelöscht.
Das Makro "Sub Inhalt_einfügen_erweitert()" ruft zusätzlich das Makro zur
Umwandlung von Symbol- und Wingdingszeichen
in Unicode-Zeichen auf. Symbol- und Wingdings-Zeichen werden weitgehend in
Unicodezeichen umgewandelt
(der Rest wird rosa markiert).
Ferner bleiben hier Exponenten und Indizes erhalten, damit aus "10 hoch 3" nicht
"103" wird.
Bei diesem Makro werden auch UTF8-codes von Internet-Adressen decodiert und es wird
als Kommentar angezeigt,
wo im Text Fußnoten, Bilder oder Shapes gewesen waren.
Bei dem Makro "Bereinigt_einfügen" bleiben neben "fett", "kursiv" und
"unterstrichen" auch einige Absatz-Formatvorlagen erhalten. Ebenso bleiben Bilder,
Felder und Fußnoten erhalten. Es werden auch hier Symbol- und Wingdings-Zeichen in
Unicode-Zeichen konvertiert.
Textfelder ("Textbox") werden in normalen Text konvertiert, frei positionierte
Bilder in normal positionierte Bilder umgewandelt.
Bei den übrigen Shapes wird in grüner Farbe auf das Löschen hingewiesen.
***
Das Analyse-Makro "Sub Hexcode_und_Name_ermitteln()" kann sämtliche normgerechten
Schriftzeichen (Unicode) analysieren
und (außer bei chinesischen, japanischen und koreanischen Silbenzeichen) deren
englischen Namen nach ISO/IEC 10646 ausgeben.
Daneben kann das Analyse-Makro aber auch die Codes von nicht-normgerechten
Sonderschriftarten ermitteln
sowie bei den Schriftarten "Symbol" und "Wingdings" die Bedeutungen der Zeichen
angeben.
Das Analyse-Makro bietet die Möglichkeit, mehrere Zeichen einer Zeichenkette
gleichzeitig zu analysieren.
Damit können auch Schriftzeichen mit (diakritischen) Akzentzeichen gut analysiert
werden,
die sonst nur umständlich zu analysieren sind, oder etwa einen Text mit einer
Kombination von Schriftzeichen aus Schriftsystemen,
die von rechts nach links geschrieben werden, mit Schriftzeichen, die von links
nach rechts geschrieben werden.
Das Analyse-Makro funktioniert auch dann, wenn im Text nur "leere Kästchen" zu
sehen sind,
weil die nötige Sonderschriftart (Font) fehlt.
Solange im Namen der Dokumentvorlage mit dem Analyse-Makro das Wort "kompakt"
enthalten ist,
wird für die (englischen) Namen der Zeichen die Unicode-Liste in dieser
Dokumentvorlage (ab Seite 2) verwendet,
ansonsten wird nach der Datei "UnicodeData.txt" gesucht, notfalls sogar im
Internet.
Das Analyse-Makro kann in Word 2010 die Zeichen aus Formeln mit dem neuen
Formeleditor "OMML" analysieren,
jedoch nicht gleichzeitig mit Verknüpfungspfaden von Bildverknüpfungen.
Im Kompatibilitätsmodus werden diese OMML-Formeln jedoch zu Grafiken.
--------------------------------------------------------© Dipl.-Ing. Hanna-Chris Gast, 2010, 2011, 2014, 2015, 2016.
E-Mail:
hcgast "ät" siebener-kurier.de
(dabei "ät" durch "@" ersetzen).
Beschreibungen im Internet:
8
http://www.siebener-kurier.de/chris-aufsaetze
--------------------------------------------------------Download der Makros:
http://www.siebener-kurier.de/chris-aufsaetze/Unicode-Makros.zip.
Die zur Analyse verwendete Unicodeliste findet sich unter:
http://www.unicode.org/Public/UNIDATA/UnicodeData.txt
Die hier enthaltenen Makros wurden weitgehend veröffentlicht als Beilagen zum
Siebener-Kurier,
ISSN 0948-6089. Abdruck und Zitate nur mit Quellenangabe!
---------------------------------------------------------
9
2 Grundlagen der Codierung von Schriftzeichen im Computer
Die verbreiteteste Codierung für Schriftzeichen ist heutzutage neben den Normen der Reihe
ISO/IEC 8859 bzw. den davon abgeleiteten Windows-Codes das Unicode-System (UCS)
nach ISO/IEC 10646. Alle anderen Systeme, wie etwa spezielle Schriftfonts, sind heutzutage
veraltet.
2.1 Ältere Zeichencodierungen
ASCII 1 ist ein inzwischen veralteter 7-Bit-Zeichensatz (128 Codes), die ersten 32 Zeichen
sind (heute noch) Steuerzeichen. Das reichte für amerikanische Fernschreiber völlig aus.
Durch Einführung der Personal Computer (PC) wurde der ASCII-Zeichensatz um 1 Bit auf
8 Bit erweitert (8 Bit = 1 Byte = 256 Codes = zwei Hex-Zahlen). Während ASCII weltweit
einheitlich benutzt wurde, gab es je nach Land oder Ländergruppe unterschiedliche Varianten
mit 256 Codes (DOS-Codepages und später die Normen der Reihe ISO/IEC 8859). Auch bei
den jetzigen Windows-Codes gibt es immer noch Unterschiede. Der bekannteste ist das in
Westeuropa und in den USA verwendete Windows 1252 (CP1252, "Westeuropäisch").
Letzteres wird fälschlich auch "ANSI"-Code genannt. Windows 1252 unterscheidet sich von
ISO/IEC 8859-1 2 durch zusätzliche Buchstaben im Bereich dez. 128 bis dez. 159 (hex.80 bis
hex. 9F), wo die ISO/IEC-Norm zusätzliche unter Windows nicht verwendete Steuerzeichen
hat.
2.2 Das Unicode-System
Die verbreitetste Schriftzeichen-Codierung für Computer ist heutzutage Unicode (UCS 3).
Diese ist in ISO/IEC 10646 und beim Unicode-Consortium [1] festgelegt. In Unicode sind
heutzutage die Schriftzeichen oder Textelemente aller bekannten Schriftkulturen und
Zeichensysteme in Form eines digitalen Codes enthalten, der hexadezimal oder dezimal
angegeben werden kann (zum Beispiel beim Eingeben mit der Alt -Taste in Word).
In Unicode wird nur der jeweilige Buchstabe (oder Sonderzeichen) festgelegt, nicht aber seine
konkrete Gestalt auf dem Papier. Dafür sind die Schriftarten (Fonts) zuständig. Die
Bedeutung und Aussprache eines Buchstaben hängt von der jeweiligen Sprache ab. Das
Unicode-System benennt Buchstaben deshalb möglichst Anwendungs-unabhängig.
Unicode ist untergliedert in Ebenen (englisch "planes"). Am wichtigsten ist die unterste
Ebene, die Ebene 0 mit dem grundlegenden mehrsprachigen Codebereich (BMP, englisch:
"Basic Multilingual Plane"). In dieser Ebene liegen die Zeichen mit den Unicodes
(engl. "Codepoints") von hexadezimal 0000 bis FFFF bzw. dezimal von 0 bis 65535 4. Dies
reicht für alle heutigen europäischen Sprachen aus, aber auch für Altgriechisch und
Altkirchenslawisch .
Darauf folgt die Ebene 1 mit dem ergänzenden mehrsprachigen Bereich, (SMP, englisch:
"Supplementary Multilingual Plane", SMP, auch als Plane 1 bezeichnet). Sie enthält vor
1
2
3
4
10
ASCII = American Standard Code for Information Interchange.
In ISO 8859-1 fehlt noch das Eurozeichen. Dieses befindet sich in ISO 8859-15.
englisch: Universal Character Set.
0 bis 65 535 ergeben (inklusive der Null) zwei hoch sechzehn theoretisch mögliche Zeichen.
allem historische Schriftsysteme bis hin zu Hieroglyphen und weitere chinesisch/
japanisch/koreanische Zeichen, aber auch größere Ansammlungen an Zeichen, die selten in
Gebrauch sind, zum Beispiel Musiknotenzeichen. Weitere Ebenen sind für Europäische
Sprachen noch nicht relevant.
Die Unicode-Ebenen werden ihrerseits in Blöcke (englisch "blocks") unterteilt, die jeweils
einzelne Schriftsysteme wie Lateinisch, Griechisch usw. enthalten. Die ersten beiden Blöcke
von hexadezimal 0000 bis 00FF (dezimal 0 bis 255) enthalten lateinische Schriftzeichen und
entsprechen der ISO/IEC 8859-1. Ist ein Block voll, müssen spätere Ergänzungen in anderen
Blocks untergebracht werden, da kein festgelegtes Unicode-Zeichen wieder gestrichen
werden darf. Dies führt teilweise zu einer gewissen Zerstückelung des Systems.
Die folgende Tabelle 2.1 gibt eine kurze Übersicht über die Unicode-Ebenen 0 (BMP)
und 1 (SMP) mit einer Auswahl an Blöcken. Neben den wichtigsten Blöcken mit lateinischen
Buchstaben, den Surrogaten und der Private-Use-Area (PUA) enthält sie zum Beispiel die
Unicode-Blöcke für Griechisch.
"Kombinierende diakritische Zeichen" ("Combining Diacritical Marks") überlagern sich dem
Zeichen davor, sie kombinieren sich mit dem jeweiligen zugehörigen Buchstaben.
11
Tabelle 2.1: Übersicht der Unicode-Ebenen 0 und 1 mit einer Auswahl an Blöcken
(1 von 2)
Unicode-Blöcke
EbeEnglische
ne
Deutsche Bezeichnung 5
Bezeichnung 6
Unicodes (Codepoints)
Französische
6
Bezeichnung
(hexadezimal) (dezimal)
Unicode-Ebene 0
Basic Multilingual Plane
(BMP)
Plan multilingue
de base (PMB)
00 00 bis
FF FF
0 bis 65 535
Basis-Lateinisch
Basic Latin
(ASCII)
Latin de base
0000 bis 007F
0 bis 0127
Lateinisch-1, Ergänzung
Latin-1 supplement Supplément latin-1
0080 bis 00FF
0128 bis 0255
Kombinierende diakritische
Zeichen
Combining
Diacritical Marks
Diacritiques
03 00 bis 03 6F 768 bis 879
Griechisch und Koptisch
Greek and Coptic
Grec et copte
03 70 bis 03 FF 880 bis 1023
Kyrillisch
Cyrillic
Cyrillique
0400 - 04FF
1024
1279
bis
Kyrillisch, Ergänzung
Cyrillic Supplement
Supplément
cyrillique
0500 - 052F
1280
1327
bis
Griechisch, Zusatz
Greek Extended
Grec étendu
1F 00 bis
1F FF
7 936
8 191
bis
Kyrillisch, erweitert A
Cyrillic Extended A
Cyrillique étendu A
2DE0 - 2DFF
Kyrillisch, erweitert B
Cyrillic Extended B Cyrillique étendu-B A640 - A69F
Surrogat 1
(high surrogates)
High Surrogates
Demi-zone haute
D8 00 bis
DB FF
55 296 bis
56 319
Surrogat 2
(low surrogates)
Low Surrogates
Demi-zone basse
DC 00 bis
DF FF
56 320 bis
57 343
Private Use Area;
PUA
Private Use Area
(PUA)
Zone à usage privé E000 bis F8FF
0
5
6
12
11 744
11 775
42 560
42 655
bis
bis
57344 bis
63743
Weitgehend nach Wikipedia [8].
ISO/IEC 10646:2003 und ISO/IEC 10646/A2:2006, die späteren Ausgaben sind leider nur noch auf Englisch.
Tabelle 2.1: Übersicht der Unicode-Ebenen 0 und 1 mit einer Auswahl an Blöcken
(2 von 2)
Unicode-Blöcke
EbeEnglische
ne
Deutsche Bezeichnung 7
Bezeichnung 8
Französische
6
Bezeichnung
(hexadezimal) (dezimal)
Unicode-Ebene 1: SMP
(Supplementary Multilingual
Plane)
Supplementary
Multilingual Plane
(SMP)
Plan multilingue
complémentaire
(PMC)
1 00 00 bis
1 FF FF
65 536 bis
131 071
Ägäische Zahlzeichen
Aegean Numbers
Nombres égéens
1 01 00 bis
1 01 3F
65 792 bis
65 855
Altgriechische
Notenschriftzeichen
Ancient Greek
Numbers
Nombres grecs
anciens
1 01 40 bis
1 01 8A
65 856 bis
65 930
Ägyptische Hieroglyphen
Egyptian
Hieroglyphs
(Hiéroglyphes
égyptiens) 9
1 30 00 bis
1 34 2F
77 824 bis
78 895
Byzantinische
Notenschriftzeichen
Byzantine Musical
Symbols
Symboles
1 D0 00 bis
musicaux byzantins 1 D0 F5
118 784 bis
119 029
Altgriechische Zahlzeichen
Ancient Greek
Musical Notation
Musique grecque
ancienne
119 296 bis
119 365
1
Unicodes (Codepoints)
1D2 00 bis
1 D2 45
2.3 Zum Prinzip der Surrogate
Die Hohen und Niedrigen Surrogate sind in speziell dafür reservierten Unicode-Blöcken
untergebracht, siehe folgende Tabelle 2.2. Zusätzlich sind in dieser Tabelle die Bereiche der
Ebenen 0 und 1 aufgeführt. Eine gute Übersicht über weitere Blöcke und weitere Ebenen gibt
es in Wikipedia [8].
Tabelle 2.2: Die Unicode-Blöcke der Surrogate
Ebene Unicode Blöcke
0
1
7
8
9
Unicode (hexadezimal) Unicode (dezimal)
Ebene 0: BMP (Basic Multilingual Plane) 00 00 bis FF FF
0 bis 65535
...
Surrogat 1 (High Surrogates )
D8 00 bis DB FF
55 296 bis 56 319
DC 00 bis DF FF
56 320 bis 57 343
1 00 00 bis 1 FF FF
65 536 bis 131 071
Surrogat 2 (Low Surrogates )
...
Ebene 1: SMP
(Supplementary Multilingual Plane)
Weitgehend nach Wikipedia [8].
ISO/IEC 10646:2003 und ISO/IEC 10646/A2:2006, die späteren Ausgaben sind leider nur noch auf Englisch.
ISO IEC 10646/Amd5:2008, wo die Hieroglyphen genormt sind, existiert leider nur auf Englisch.
13
2.4 Probleme bei Word 2000 mit Zeichen höherer Unicode-Ebenen
Word 2000 kann Schriftzeichen der Unicode-Ebene 1 darstellen, wenn Windows
entsprechend eingestellt ist und die entsprechende Schriftart installiert ist.
Ich habe für Word inzwischen mittels Makros passend erweitert, so dass nun damit auch
Schriftzeichen der höheren Unicode-Schriftarten eingefügt und analysiert werden können,
siehe [26].
2.5 UTF-Codierung
Unicode kann für den Computer und für die Datenübertragung auf verschiedene Arten codiert
werden. Üblich sind:
a) UTF-16 bei Computern mit Windows-Betriebssystem. Dieses ist in der für europäischen
Sprachen relevanten Unicode-Ebene 0 mit dem einfachen Unicode identisch. Bei
Schriftzeichen mit Codes größer hex. FFFF wird der Code in sogenannte Surrogate nach
ISO/IEC 10646:2003, Anhang C zerlegt 10. Siehe hierzu Abschnitte 2.3.
b) UTF-8 bei der (seriellen) Übertragung im Internet. Die Berechnung von UTF-8 aus den
Unicode-Werten ist in ISO/IEC 10646:2003, Anhang D, genormt 11. Hier erfolgt die
Umcodierung derart, dass erstens die Codes bei den lateinischen Grundbuchstaben
(ASCII-Bereich) kleiner werden als bei der einfachen Unicode-Codierung und dass
zweitens bei der Übertragung weniger Fehler entstehen als bei der einfachen UnicodeCodierung. Zu UTF-8 siehe auch Abschnitt 15.
2.6 Abkürzungen (UCS und UTF)
"UTF" ist die Abkürzung von "Unicode Transformation Format"
"UCS" ist dagegen "Universeller codierter Zeichensatz" nach ISO/IEC 10646
(englisch: "Universal Coded Character Set" or shorter "Universal Character Set").
10
11
14
Inzwischen neuere Ausgabe der Norm. Dort sind aber keine brauchbaren Formeln für die
Umrechnung mehr.
Inzwischen neuere Ausgabe der Norm. Dort sind aber keine brauchbaren Formeln für die
Umrechnung mehr.
3 UTF8 im Internet
3.1 Codierung UTF-8
UTF-8 bedeutet "8-bit UCS Transformation Format" und ist heute die im Internet am
häufigsten angewendete Codierung. Die Berechnung von UTF-8 aus den Unicode-Werten in
ISO/IEC 10646:2003, Anhang D, genormt.
Bei der Übertragung von Texten mit UTF-8 entstehen weniger Fehler als bei der direkten
Unicode-Codierung. Das erste Byte bei einem Mehrbyte-Code beginnt mit soviel Einsen
(binär) vor der ersten Null, wie der Code insgesamt Bytes hat 12. Die Folgebytes beginnen mit
"10" (binär). Hexadezimal ausgedrückt bedeutet das, dass das erste Byte Werte von
(hex.) "C0" bis "FD" enthalten kann und die Folgebytes Werte von (hex) "80" bis "BF". Auf
diese Weise ist die UTF-8-Übertragung stabiler gegen verloren gegangene Bytes und erlaubt
eine leichtere Synchronisation als die direkte Unicode-Übertragung.
Ausnahme sind die Unicode-Zeichen mit Codes von Null bis 7F (hexadezimal). In diesem
Bereich ist UTF-8 identisch mit ASCII. Die Bytes (hex.) 00 bis 7F sind bei UTF-8 außerdem
reserviert ausschließlich für den ASCII-Bereich, so dass es keine Verwechslung mit höheren
Unicode-Werten geben kann, wenn bei der Übertragung mal ein Byte verloren geht.
UTF-8 ist bei ASCII-Zeichen (Unicodes bis hexadezimal 007F) kürzer als Unicode, weil die
führenden Nullen entfallen. Bei Unicodes von 0080 bis 07FF (lateinische Buchstaben mit
diakritischen Zeichen, Kyrillisch, Griechisch usw.) ist UTF-8 genauso lang wie Unicode.
Nur bei Unicodes ab hexadezimal 0800 (wie etwa beim Eurozeichen und asiatischen
Sprachen) ist UTF-8 aber länger als die normale hexadezimale Unicode-Darstellung. Von
daher ist UTF-8 für manche asiatische Sprachen nicht so günstig wie für die europäischen
Sprachen.
Die UTF-8-Codierungen der wichtigsten griechischen Buchstaben sind in Abschnitt 3.6 in
Tabellenform aufgelistet. Eine vollständige Übersicht aller UTF-8-Codes findet sich bei
T. Schild [15].
3.2 Häufigkeit der verschiedenen Codierungen bei Griechischen Seiten
Für Griechisch kenne ich leider keine spezielle Untersuchung, welche Codierung für
Webseiten mit griechischer Sprache am häufigsten ist. Griechisch sind etwa 0,3 % aller
Internetseiten, "ISO-8859-7" (griechisch) gibt es bei ungefähr 0,1 % aller Internetseiten
insgesamt und "Windows-1253" (griechisch) bei ungefähr 0,1 % aller Internetseiten
insgesamt.
UTF-8 wird in 53,2 % aller Internetseiten verwendet und ist damit insgesamt die häufigste
Codierung im Internet. Ob nun bei Griechischen Seiten UTF-8 häufiger ist als "ISO-8859-7"
12
1 Byte mit 8 Bit, auch "Oktett" genannt, ist in der hexadezimalen Darstellung eine Kombination
aus zwei Zeichen von Null bis F.
15
oder "Windows-1253", lässt sich daraus nicht ableiten, da die Werte für eine statistische
Auswertung nicht ausreichen.
Eine eigene Suche mit der Google-Spezialsuche nach Texten in griechischer Sprache 13 und
der jeweiligen Textzeile im Quelltext ergab:
- "Content-Type: text/html; charset=UTF-8":
ca. 220 000 mal,
- "Content-Type: text/html; charset=iso-8859-7"
ca. 51 500 mal,
- "Content-Type: text/html; charset=windows-1253"
ca. 20 700 mal,
Folglich wird auch bei griechischen Internetseiten UTF-8 am häufigsten verwendet.
3.3 Codierung von Nicht-ASCII-Zeichen in Domain-Namen
mittels Punycode
Ursprünglich waren für Internet-Adressen nur Zahlen und lateinische Buchstaben erlaubt,
soweit sie dem ASCII-Code entsprechen. Dies reicht für die englische Sprache vollständig
aus. In Deutschland sind seit 2004 Umlaute wie "ä", "ö" "ü" usw. erlaubt ("Umlautdomains"),
in Griechenland sind seit 2005 auch griechische Buchstaben zulässig. Seit Ende 2007 lässt
auch die ICANN 14 Domainnamen mit Nicht-ASCII-Zeichen zu, das heißt, es sind jetzt
international für Domainnamen deutsche Umlaute usw., griechische und kyrillische
Buchstaben bis hin zu chinesischen Schriftzeichen zulässig. Diese Art von Domains
bezeichnet man als IDN-Domains (englisch: "Internationalized Domain Name"). Allerdings
sind diese in Wirklichkeit überhaupt nicht für "internationale", sondern lediglich für
Anwendungen innerhalb des jeweiligen Sprachraums geeignet.
Namen von IDN-Domains (Domainnamen mit Unicodes) werden im Computer des
Anwenders, d. h. im Web-Browser bzw. im E-Mail-Programm automatisch zu ASCIIkompatible Zeichenketten (ACE-Strings, ASCII Compatible Encoding Strings) umgewandelt. Auf diese Weise brauchten die Internet-Server nicht verändert zu werden. Statt
dem Domainnamen mit Umlauten oder fremdländischen Sonderzeichen kann der Benutzer an
seinem Computer aber auch direkt den ACE-String mit den lateinischen Buchstaben auf
seiner (deutschen) Tastatur eingeben.
Die Umcodierung von Domainnamen erfolgt im Computer wie folgt:
Zunächst wird im jeweiligen Internetbrowser bzw. E-Mail-Programm die eingegebene
Internetadresse wie bisher durch das sogenannte "Nameprep" [16] normalisiert, das heißt,
Großbuchstaben werden zu Kleinbuchstaben und Zeichen wie das "ß" (Eszett) werden in
äquivalente ASCII-Zeichen umgewandelt. Die Unterscheidung zwischen Groß- und
Kleinbuchstaben sowie zwischen "ss" und "ß" (Eszett) ist weiterhin nicht möglich. Aus der
Eingabe "www.KörperMaße.de" wird "www.körpermasse.de".
Im Anschluss daran werden bei Domains mit Unicodes (IDN-Domains) mittels des
sogenannten "Punycode"-Verfahren [16] die Nicht-ASCII-Buchstaben (Umlaute, griechische
und kyrillische Buchstaben usw.) aus dem Domainnamen entfernt. Stattdessen wird am Ende
des Domainnamens eine ASCII-Zeichenkette hinzugefügt, in der die Position und Art des
13
14
16
Google-Abfrage 3. Juli 2010.
Die ICANN (Internet Corporation for Assigned Names and Numbers) ist eine privatrechtliche
Non-Profit-Organisation US-amerikanischen Rechts mit Sitz im kalifornischen Ort Marina del
Rey. Sie entscheidet über die Grundlagen der Verwaltung der Top-Level-Domains.
Unicode-Zeichens kodiert ist. Um einen IDN-Domain-Namen von einem ASCIIDomainnamen zu unterscheiden, beginnt der fertig codierte IDN-Domain-Name mit dem
Präfix aus vier Schriftzeichen "xn--". Dieses Umcodieren mittels Nameprep und Punycode ist
übrigens keine "Transliteration" bzw. "Transkription".
Theoretisch sind im Internet jetzt alle Unicode-Zeichen in IDNs zulässig. Die jeweiligen
Zulassungsstellen wie die DENIC für Deutschland oder EURic für Europa [17] lassen aber
nur begrenzte Mengen an Zeichen zu. Jede Zulassungsstelle für Domains regelt separat,
welche Zeichen sie für die von ihr verwalteten Domain-Namen erlaubt.
In Europäischen Domains (.eu) sind seit Januar 2010 auch kyrillische und griechische
Zeichen zulässig, da in der Europäischen Union Griechenland griechische und Bulgarien
kyrillische Zeichen benutzt.
Beispiele für Domain-Namen mit Umlauten und anderen Unicodes 15
(Die Markierungen zeigen das Punycode-Präfix des ACE-Strings):
aus \www.kühe-mögen-äpfel.de wird \\www.xn--khe-mgen-pfel-jfb9x9c.de
(diese Seite gibt es tatsächlich!);
— aus \www.äaaa.de wird www.xn--aaa-pla.de
— aus \www.aäaa.de wird www.xn--aaa-qla.de
— aus \www.aaäa.de wird www.xn--aaa-rla.de
— aus \www.aaaä.de wird www.xn--aaa-sla.de
Je nach Ländereinstellung des Internetbrowsers wird in der Adresszeile oben auf dem
Bildschirm entweder der Domainname mit den Original-Unicodezeichen angegeben oder der
ACE-String.
3.4 Codierung von griechischen Buchstaben usw. in Unterseiten einer
Domain mittels UTF-8
Für die Unterseiten von Domains (also hinter dem ".eu/", ".ru/", ".com/" usw.) gibt es keine
Einschränkungen für die Verwendung von Unicode-Schriftzeichen. Die Unterseiten sind
kein Teil des Domain-Namens, sondern nur vom Inhaber einer Domain jeweils vergebene
Unterordner-Namen. Hier können auch, anders als beim Domain-Namen selber, Groß- und
Kleinbuchstaben unter-schieden werden. Siehe zum Beispiel die folgende Wikipedia-Seite
zum "Weihnachtsbaum": https://el.wikipedia.org/wiki/Δένδρο_των_Χριστουγέννων [8]. Die
Codierung erfolgt hier nicht mit Punycode, sondern mit UTF-8, siehe Abschnitt 3.6. Zum
Beispiel wird bei mir diese griechische Unter-Seite über den Weihnachtsbaum mit UTF-8
codiert angezeigt als (Anfangsbuchstaben von mir markiert), siehe das folgende Bild.
Bild 3.1: Screenshot einer Adresszeile (Browser = Firefox)
15
Beispiele aus Wikipedia[8].
17
Dabei wird zusätzlich noch vor jede zweistellig hexadezimale Codezahl ein Prozentzeichen
gesetzt. Wer das decodieren will, lässt die Prozentzeichen weg und kann dann die UTF-8Codes zum Beispiel in der sehr übersichtlichen Internetseite "UTF-8-Codetabelle mit
Unicode-Zeichen" [15] nachschlagen. Eine Lösung zur direkten Anzeige der griechischen
Buchstaben anstelle von UTF-8-Codes in der Adresszeile des Browsers habe ich leider noch
nicht gefunden.
Für den ASCII-Bereich ist UTF-8 mit Unicode identisch, allerdings ohne die führenden
Nullen. Für das Leerzeichen steht dann "20" bzw. "%20" wie zum Beispiel in der folgenden
(veralteten) Unterseite von der Europäischen Normungsorganisation CEN:
"www.cen.eu/boss/supporting/Useful%20hyperlinks/Pages…"
Nachtrag: Inzwischen ist diese Unterseite durch eine neue Seite ohne Leerzeichen in der
Adresse ersetzt worden.
3.5 Probleme durch die Einführung von IDN-Domains
Das deutsche Eszett ist weiterhin unmöglich, weil dafür auch die "Nameprep"-Funktion
geändert werden müsste. Da hilft auch nicht, dass es in Unicode jetzt sogar das große Eszett
gibt (Unicode hexadezimal 1E9E, dezimal 7838).
Einige kyrillische und griechische Buchstaben sehen lateinischen Buchstaben zum
Verwechseln ähnlich. Deshalb darf zum Beispiel für ".eu"-Domänen keine Schriftzeichen
mehrerer Sprachen gleichzeitig verwendet werden [17]. Aber nicht alle Anbieter sind so
streng, und in Unterseiten ist sowieso alles erlaubt. Von daher ist es gut, wenn im eigenen
Internetbrowser nicht zu viele Länder eingestellt sind, so dass die kyrillischen und
griechischen Zeichen nur als Punycode bzw. codiert als UTF-8 erscheinen. Hier wird sich
vermutlich bezüglich intelligenter Internet-Browser wohl noch einiges entwickeln, um
Betrügereien zu verhindern. Trotzdem bleibt noch das Problem, dass zum Beispiel die
fiktiven Seiten "www.söhne.de" und "www.soehne.de" zu verschiedenen Anbietern gehören
kann.
Bei griechischen Domains können theoretisch Domainnamen mit den alten Akzentzeichen
und Domainnamen mit demselben griechischen Wort, aber mit modernem Akzent (Tonos) bei
".eu" nicht zu derselben Webseite gehören. Bei der griechischen Toplevel-Domain ".gr" ist
dies durch das sogenannte "Bundling" gelöst, bei dem stets alle Akzentvarianten mitreserviert
sind. Ferner werden auch die drei möglichen Zeichen für das Sigma (Σ ς σ) durch das erfasst,
[19]. Als Beispiel diene hier das Epsilon mit den verschiedenen Akzenten, hier der
Ähnlichkeit nach sortiert:
έέ ὲ ἐἑ ἒἓ ἔἕ.
Die ersten beiden (Tonos und Akut) lassen sich in vielen Schriftarten nicht unterscheiden.
Und Spiritus lenis und Spiritus asper sind meistens auch nur schwer zu unterscheiden. Bei
Anwendung des Analyse-Makros nach Abschnitt 6 16 ergibt sich die Analyse nach dem
folgenden Bild (das letzte analysierte Zeichen ist der Punkt am Ende des Satzes).
16
18
Analysemakro in einer fertigen Dokumentvorlage zum Download siehe [2].
Bild 3.2: Screenshot der Analyse der Epsilons mit dem Analysemakro
3.6 Einige UTF-8-Codes und deren Berechnung
Es erscheint mir vorsintflutlich, von Hand UTF-8 decodieren zu müssen, aber zumindest bei
mir zeigen der Internet-Browser im Adressfenster bei den Unterseiten direkte UTF-8Codierung an. Wahrscheinlich dient dies der Sicherheit des Anwenders, damit er (sie) nicht
auf gefälschte Seiten hereinfällt (siehe auch Abschnitt 3.5).
Die Umrechnung von normalem Unicode in UTF-8-Codes erfolgt nach
ISO/IEC 10646:2003, Anhang D, siehe die folgende Tabelle.
Tabelle 3.1: Konvertierung von Unicode (UCS-4) in UTF-8
Wertebereich von Unicode (UCS-4)
Sequence of octets in UTF-8
x = 0000 0000 .. 0000 007F;
x;
x = 0000 0080 .. 0000 07FF;
C0 + x / 2 ;
6
80 + x % 2 ;
12
E0 + x/2 ;
6
6
80 + x/2 % 2 ;
6
80 + x % 2 ;
18
F0 + x/2 ;
12
6
80 + x/2 % 2 ;
6
6
80 + x/2 % 2 ;
6
80 + x % 2 ;
x = 0000 0800 .. 0000 FFFF;
x = 0001 0000 .. 001F FFFF;
...
6
...
Das Symbol "%" bedeutet die Modulo-Funktion, zum Beispiel: 7 % 3 = 1
Das Symbol "/" bedeutet hier die Integer-Division, zum Beispiel: 7 / 3 = 2
6
12
18
Hochgesetzte Zahlen sind Exponenten: 2 = 64; 2 = 4096; 2 = 262 144
Manche Browser zeigen nicht nur Umlaute, sondern auch Leerzeichen und Bindestriche
codiert an, siehe folgende Tabelle.
19
Tabelle 3.2: Deutsche und französische "Sonderzeichen"
Unicode
(hex.)
Zeichen
UTF-8
(hex.)
Unicode
(hex.)
Zeichen
UTF-8
(hex.)
00 20
Leerzeichen
20
00 E0
à
C3 A0
00 2D
-
2D
00 E2
â
C3 A2
00 C4
Ä
C3 84
00 E7
ç
C3 A7
00 D6
Ö
C3 96
00 E8
è
C3 A8
00 DC
Ü
C3 9C
00 E9
é
C3 A9
00DF
ß
C3 9F
00 EA
ê
C3 AA
00 E4
ä
C3 A4
00 EB
ë
C3 AB
00 F6
ö
C3 B6
00 FC
ü
C3 BC
Beispiele für Internet-Adressen mit UTF8:
Griechenland
https://el.wikipedia.org/wiki/%CE%95%CE%BB%CE%BB%CE%AC%CE%B4%CE%B1
Mein Makro macht daraus: https://el.wikipedia.org/wiki/Ελλάδα
http://de.wikipedia.org/wiki/%C3%9Cbersetzung_(Technik)
http://de.wikipedia.org/wiki/Haust%C3%BCr
Das Makro macht daraus:
http://de.wikipedia.org/wiki/Übersetzung_(Technik)
http://de.wikipedia.org/wiki/Haustür
DIN auf chinesischer Seite
https://zh.wikipedia.org/wiki/%E5%BE%B7%E5%9B%BD
%E6%A0%87%E5%87%86%E5%8C%96%E5%AD%A6%E4%BC%9A
Das Makro macht daraus:
https://zh.wikipedia.org/wiki/德国
标准化学会
(es bleibt leider der Zeilenumbruch erhalten. Es funktioniert aber im Browser trotzdem)
Test eines Codes, der mit "%F" beginnt
(Violinschlüssel, Unicode = "U+1D11E", UTF8 = "F0 9D 84 9E")
Als fiktive Internet-Seite http:/www.xxx.de/%F0%9D%84%9E/Test1%20Test2
Das Makro macht daraus (Farben von Hand ergänzt):
http:/www.xxx.de/�/Test1_Test2
Man muss sich aber noch von Hand eine passende Schriftart suchen, hier etwa Code 2001:
http:/www.xxx.de/ /Test1_Test2
20
4 Schriftarten (Fonts) für Unicode-Zeichen
Die Unicode-Ebene 0 (Basic Multilingual Plane) enthält im Prinzip alle in europäischen
Sprachen nötigen Schriftzeichen. Inzwischen hat man jedoch weitere Schriftzeichen genormt,
die in der ursprünglichen Ebene 0 nicht mehr unterzubringen waren, wie etwa zusätzliche
antike Zahl- und Notenschriftzeichen 17. In ISO/IEC 10646 oder Unicode.org [1], bzw.
einfacher bei Wikipedia [8], findet man alle genormten Schriftzeichen-Codes, aber leider
nicht die dafür jeweils nötigen Schriftarten.
Während bei der Unicode-Ebene 0 die auf dem Computer vorhandene Schriftarten meistens
ausreichen, sind für die höhere Unicode-Ebenen grundsätzlich spezielle Schriftarten nötig, da
keine für Windows geeignete Schriftart mehr als 65 536 Zeichen enthalten kann. Mit dem
Schriften-Suchprogramm FileFormat.Info [9] fand ich brauchbare im Internet frei
downloadbare Schriften wie Code 2001.ttf. Weitere Schriften für den griechischen
Sprachraum finden sich auf der Webseite "Unicode Fonts for Ancient Scripts" [10], zum
Beispiel für Hieroglyphen die Schriftart "Gardiner" oder "Symbola" für den Ersatz von
Wingdings und Symbol.
Die für mich wichtigsten Fonts:
Cambria
Cambria ist eine serifenbehaftete Schrift. Sie ist Teil einer Reihe neuer Schriftarten, die mit
Microsoft Windows Vista eingeführt wurden, und ist darüber hinaus auch in Microsoft Office
seit der Windows-Version 2007 beziehungsweise der Mac-OS-X-Version 2008 enthalten. [8]
Anmerkung: Bei meinen ersten Tests mit Cambria mit Word 2007 im Copyshop (2011) gab
es noch nicht soviele Zeichen in Cambria bzw. Cambria Math wie jetzt in Word 2010. Ich
habe zurzeit die Cambria-Version 5.96, (Stand Oktober 2015).
Cambria Math
This is a variant designed for mathematical and scientific texts, as a replacement for Times
New Roman.
Deutsche Übersetzung: Cambria ist eine Variante, ausgelegt für mathematische und
wissenschaftliche Text als Ersatz für Times New Roman. [8]
Arial
Arial ist charakterisiert durch große Mittellängen und einfache Formen ohne Serifen. Große
Verbreitung fand die Schrift, weil sie bei Microsoft Windows seit der Version 3.1
standardmäßig mitgeliefert wird. [8]. Hersteller Monotype.
Times New Roman
Die Times ist eine Barock-Antiqua-Schrift, die ursprünglich 1931 von Stanley Morison und
Victor Lardent entworfen wurde. Mittlerweile existieren zahlreiche Varianten der
ursprünglichen Times. Als Computerschrift wurde die Times durch Produkte der
Unternehmen Adobe, Microsoft und Apple populär, sodass sie heute zu den bekanntesten und
meistverwendeten Schriften gehört. [8]
Anmerkung: Times New Roman war bis Word 2003 die Standard-Schriftart. Sie ist aber
immer noch meine Lieblingsschriftart für Aufsätze (H. Chris Gast, September 2014).
17
Die heute noch gebräuchlichen griechischen Zahlzeichen nach dem milesischen Prinzip sind im
Unicode-Block "Griechisch und Koptisch" in der Unicode-Ebene 0 enthalten, siehe [1].
21
Arial Unicode
Die spezielle Variante "Arial Unicode MS" ist ein relativ weit verbreiteter Font, der den
Großteil des Unicode-Zeichensatzes enthält. Zum Textsatz in nicht-asiatischen Sprachen ist
sie weniger geeignet, da es zu dieser Schrift weder einen kursiven noch einen fetten Schnitt
gibt und die Schriftart auch keine Kerningpaare enthält, die beim Textsatz für ein ruhiges
Erscheinungsbild sorgen. [8]
Segoe UI Symbol
Sego UI ist eine von Microsoft entwickelte Schriftfamilie für die Betriebssysteme Windows
Vista und Windows 7, die die Microsoft-Schriftart Tahoma als serifenlose Standardschriftart
ablöst. . . [8].
Symbola
Font mit der umfangreichsten Sammlung an Symbol-Zeichen, der als kostenloses Download
zur Verfügung steht. Mit "Symbola" wird "Segoe UI Symbol" überflüssig.
Download-Quelle: Internetseite von George Douros mit einer Menge weiterer interessanter
Schriften, [10].
Weitere Schriftarten (Fonts):
RomanCyrillic_Std.ttf, [11]
Code 2001, [12] wie zum Beispiel
.
Gardiner (für Hieroglyphen), [13], wie zum Beispiel
).
Cardo, (für Griechisch) [14] , wie zum Beispiel bei dem Zeichen
22
.
5 Makro zum Erzeugen von Schriftzeichen aus dem
hexadezimalen Unicode, auch für höhere Unicode-Ebenen
(UCS > FFFFhex)
5.1 Aufgabenstellung
Ich wollte ein Makro schreiben für Word 2000 zur Erzeugung von Schriftzeichen aus dem
Unicode . Dabei kann der Unicode in dezimaler oder in hexadezimaler Schreibweise
vorliegen, was im Endeffekt zu zwei sehr ähnlichen Makros führte. Diese Makros sollen im
Gegensatz zu den Funktionen von Word 2000 ausnahmslos alle Schriftzeichen erzeugen
können, für die auf dem Computer eine passende Schriftart (Font) vorhanden ist, auch für für
Schriftzeichen mit Unicodes größer als hex. FFFF.
Hierbei ist zu berücksichtigen, dass Windows-Computer nicht Unicode direkt verwenden,
sondern die (für 16-Bit-Rechner günstigere) Codierung UTF-16. Für Unicode-Werte bis
hex. FFFF (das sind 16 Bit) sind Unicode und UTF-16 identisch. Für Werte darüber weicht
UTF-16 von Unicode ab. Der Unicode-Wert wird in zwei 16-Bit-Codewerte, sogenannte
"Surrogate", zerlegt. Dieses ist in ISO/IEC 10646:2003, Anhang C, festgelegt. Danach gilt
für die Umrechnung von UCS in UTF-16 (siehe folgende Tabelle).
Tabelle 5.1: Codierung nach ISO/IEC 10646:2003, Anhang C
hexadezimaler Unicode
(UCS-4 (4-octet))
Codierung nach UTF-16
(UTF-16, 2-octet elements)
x = 0000 0000
bis 0000 FFFF
x (bis hex. FFFF)
x = 0001 0000
bis 0010 FFFF
Surrogate y und z;
mit y = ((x - 0001 0000) \ 400) + D800
und z = (Mod (x - 0001 0000)/400) + DC00
x = 0011 0000
bis 7FFF FFFF
keine UTF-16-Werte definiert
In dieser ISO-Tabelle bedeutet "x" der hexadezimale Code,
ferner sind "y" und "z" die Surrogate.
In meinem Makro dagegen verwende ich andere Formelzeichen.
"\" bedeutet eine sogenannte "Ganzzahlige Division", nämlich den Integerwert der Division,
und "Mod()" der "Ganzzahlige Rest einer Division", eine Modulo-Funktion.
1. Problem: Einige Rechen-operationen funktionieren bei mir nur mit Dezimalzeichen, nicht
mit Hexadezimalzeichen. Deshalb rechnete ich einige wichtige Zahlenwert in Dezimalwerte
um, siehe folgende Tabelle.
Tabelle 5.2: Für das Makro wichtige Unicode-Werte, umgerechnet in Dezimalwerte
Bereich bzw. Grenzwert
Hexadezimal
Absolute untere Grenze
00 20
Surrogat 1 (High Surrogates)
D8 00 bis DB FF
55 296 bis 56 319
Surrogat 2 (Low Surrogates)
DC 00 bis DF FF
56 320 bis 57 343
Grenze für Ebene 0
FF FF
65 535
Ab hier UTF-16 ungleich UCS
1 00 00
65 536
Obergrenze für Unicode
10 FF FF
Dezimal
32
1 114 111
23
2. Problem: Beim Umwandeln von Hexzahlen in Dezimalzahlen gibt die Val-Funktion
"Integer"-Werte aus, die aber bei VBA nur bis (dezimal) "+32 767" erlaubt sind, danach
werden die "Ergebnisse" negativ. Aus hex. FFFF wird "-1"! Um höhere Zahlen als (dezimal)
32 767 zu ermöglichen, muss "&" angehängt werden. Dies erzwingt eine Ausgabe der ValFunktion als Zeichen vom Typ "Long" anstelle vom Typ "Integer". Mit dem Typ "Long" sind
laut Hilfefunktion dezimale Zahlen bis 2 147 483 647 möglich, ohne das es Vorzeichenprobleme gibt, was für Unicode völlig ausreicht.
3. Problem: Word 2000 sucht nicht automatisch eine passende Schriftart aus, und Word 2003
nicht immer. Je nach Unicode-Bereich muss ich deshalb in meinem Makro eine Schriftart
vorschlagen. Eine nachträgliche Zuordnung von Hand funktioniert unzuverlässig. Einige
Schriftarten habe ich auch vermieden, weil sie Probleme bei der Konvertierung in eine pdfDatei machten.
5.2 Makro zur Erzeugung eines Schriftzeichens aus dem hexadezimalen
Code (nur für Word 2000 nötig)
Dieses Makro ist ab Word 2003 überflüssig.
Sub Hexcode_in_Schriftzeichen_umwandeln()
' Dipl.-Ing. H. Chris Gast, 2. bis 8. Mai 2010, 25. November 2014.
' Diese Prozedur kann sämtliche Unicode-Schriftzeichen aus dem Hexcode erzeugen,
' auch bei höheren Unicode-Ebenen, was in Word 2000 sonst nicht möglich ist.
' Zu beachten ist, dass Windows UTF-16 nach ISO/IEC 10646 verwendet.
' Als Sollschriftart "Cambria" gewählt, 27. August 2015.
' Empfohlenes Tastenkürzel: Alt + C (nur für Word 2000 nötig!)
'
Dim Z1 As String, Z2 As String, y1 As Long, y2 As Long
Dim sur1 As String, sur2 As String, Font1 As String
Dim Abfrage As Integer
Dim Rng1 As Range, Rng2 As Range
' z1 ist der einzugebende hexadezimale Unicodewert, z2 der Kontrollwert für die Eingabe,
' y1 ist der daraus berechnete dezimale Unicodewert,
' y2 ist der um hex. 10000 (dez. 65536) verminderte dez. Unicodewert (= Zwischenschritt),
' sur1 ist der gesuchte hexadezimale Wert des High Surrogate (Surrogat 1),
' sur2 ist der gesuchte hexadezimale Wert des Low Surrogate (Surrogat 2),
' Font 1 ist die zu wählende Schriftart
'
' Wenn nichts markiert ist, links vom Cursor "Wort" markieren:
If Selection.Type <> wdSelectionNormal Then
Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
'
Markierbereich nach vorne um "U+" verlängern, sofern zutreffend:
Set Rng1 = Selection.Range
Set Rng2 = Selection.Range
Rng2.SetRange Start:=Rng2.Start - 2, End:=Rng2.Start
If Rng2.Text = "U+" Then
Rng2.SetRange Start:=Rng2.Start, End:=Rng1.End
Rng2.Select
End If
End If
'
' Markierte Textstelle soll der Eingabewert sein:
Z1 = Selection
'
' Für Hexcode-Angabe besser Großbuchstaben nehmen:
Z1 = UCase(Z1)
24
' *******************************
' versehentlich mitkopierte Leerzeichen beseitigen:
Z1 = Trim(Z1)
' vorangestelltes "U+" bzw. "0x" löschen:
If Left(Z1, 2) = "U+" Or Left(Z1, 2) = "0X" Then
Z1 = Right(Z1, Len(Z1) - 2)
End If
'
' *********************************
' Grobe Prüfung des Wertebereichs:
If Len(Z1) > 6 Then
MsgBox "Es sind nur Unicodes bis hex. 10FFFF zulässig."
Exit Sub
End If
'
y1 = Val("&H" & Z1 & "&")
'
Erläuterung: Um höhere Zahlen als (dezimal) 32767 zu ermöglichen,
'
muss [ & "&"] angehängt werden. Dies erzwingt eine Ausgabe als Zeichen
'
vom Typ "Long" anstelle vom Typ "Integer". Aber auch "Long" lässt nur 7 Stellen zu,
'
ohne Vorzeichenfehler zu machen, deshalb obige Prüfung.
'
' ******************
' Prüfung, ob Eingabe eine Hexzahl ist:
Z2 = Z1
' Führende Nullen beseitigen (auch in der Politik sinnvoll):
Do While Left(Z2, 1) = 0
If Left(Z2, 1) = 0 Then
Z2 = Right(Z2, Len(Z2) - 1)
Else
Exit Do
End If
Loop
'
If Z2 <> Hex(y1) Then
' MsgBox ("Eingabe war " & z1 & ", Dezwert ist " & y1 & ", Rückwandlung ist " & Hex(y1))
MsgBox "Eingabe ist keine richtige Hexzahl (nur 0 bis 9 und A bis F)"
Exit Sub
End If
'
' *******************
' Fallunterscheidung:
If y1 < 30 Then
Abfrage = MsgBox("Es handelt sich um ein Steuerzeichen." _
& vbCrLf & vbCrLf & "Wollen Sie dieses trotzdem erzeugen?", _
vbYesNo + vbQuestion + vbDefaultButton2, "Windows-Steuerzeichen")
If Abfrage = vbNo Then Exit Sub
End If
'
If y1 > 1114111 Then
MsgBox "Unicodewerte über hex. 10FFFF bzw. dez. 1'114'111 sind nicht zulässig."
Exit Sub
End If
'
' Fall: Hexcode zwischen D800 und DFFF:
If y1 > 55295 And y1 < 57344 Then
Abfrage = MsgBox("Es handelt sich um ein Surrogat, kein zulässiges Zeichen!" _
& vbCrLf & vbCrLf & "Wollen Sie dieses trotzdem erzeugen?", _
vbYesNo + vbQuestion + vbDefaultButton2, "Windows-Steuerzeichen")
If Abfrage = vbNo Then Exit Sub
End If
'
' für Zeichen bis hex. FFFF gilt: Ergebnis ist "ChrW(y1)"
25
' ********************************************************
' Abfrage: Ist der Eingabewert eine hexadezimale Zahl kleiner gleich FFFF?
' If Val("&H" & z1) < Val("&H" & "10000") Then
If y1 < 65536 Then
' "UTF-16 ist hier mit Unicode identisch"
If y1 <= 1103 Then
Selection.TypeText Text:=ChrW(y1)
Else
If y1 > 61471 And y1 < 61696 Then
Font1 = InputBox("Bitte passende Schriftart wählen", "Hexcode = " & Z1, "Symbol")
Else
Font1 = InputBox("Bitte passende Schriftart wählen", "Hexcode = " & Z1, "Cambria")
End If
Selection.Font.Name = Font1
Selection.TypeText Text:=ChrW(y1)
Selection.Font.Name = Font1
End If
Exit Sub
End If
'
' *****************************************
' Für Schriftzeichen mit Unicode höherer Ebenen (hex.10000 bis hex.10FFFF) müssen Surrogate
' nach ISO/IEC 10646:2003, Anhang C angewendet werden.
' Für die Surrogate verwende ich die Formelzeichen "sur1" und "sur2".
'
und "y2" als Zwischenwert für "Eingabewert minus hex. 00010000":
' y2 = Val("&H" & z1) - Val("&H" & "10000")
y2 = y1 - 65536
'
' Die Umrechnung von hex. D800 mittel "Val(&HD800)" führte bei hohen Werten
' zu negativen Zahlen, deshalb statt "hex.D800" besser dezimal "55296".
' Statt "Val(&HD400)" schreibe ich einfacher direkt dezimal "1024":
'
' Daraus ergeben sich als Surrogate:
sur1 = Hex(Int(y2 / 1024) + 55296)
sur2 = Hex(y2 - (Int(y2 / 1024) * 1024) + 56320)
'
' Anzeige = MsgBox(" Der Hexcode ist " & z1 & vbCrLf & " Der y1 ist: " _
'
& y1 & vbCrLf & " Das erste Surrogat ist: " & sur1 & vbCrLf & "Das zweite Surrogat ist: " _
'
& sur2, 0, "Zeichen aus Unicode")
'
' ******************************
' passende Schriftart festlegen (Font):
If y1 >= 65792 And y1 <= 65930 Then
Font1 = InputBox("Bitte passende Schriftart wählen!", "hex. Unicode = " & Z1, "Aegean")
Else
If y1 >= 77824 And y1 <= 78894 Then
Font1 = InputBox("Bitte passende Schriftart wählen!", "hex. Unicode = " & Z1, "Gardiner")
Else
' Besser Font "Symbola" verwenden, 24. November 2014.
Font1 = InputBox("Bitte passende Schriftart wählen!", "hex. Unicode = " & Z1, "Symbola")
End If
End If
'
' *******************************
' Ergebnis an Stelle des Codes einfügen:
Selection.Font.Name = Font1
Selection.Font.Bold = True
Selection.Font.Size = 14
Selection.TypeText Text:=ChrW("&H" & sur1) & ChrW("&H" & sur2)
End Sub
26
5.3 Makro zur Erzeugung eines Zeichens aus dem dezimalen Code
Das folgende Makro wandelt den markierten dezimalen Zahlencode bzw. den dezimalen
Zahlencode links vom Cursor in das zugehörige Unicode-Zeichen um. Im Bereich dezimal
129 bis 159 werden die Zeichen des jeweiligen Windows-Code (bei mir Windows 1252)
erzeugt.
Zeichen aus dem DOS-Code erzeugt das folgende Makro nicht; Eine Unterscheidung
zwischen Dezimalcodes mit einer Null davor und ohne Null davor wie bei WindowsComputern wird hier nicht gemacht. 18
Das folgende Makro ist meines Erachtens auch noch in Word 2010 bequemer als das Eintippen des
Codes über den Nummernblock. Es wird erst die Zahl in den Text getippt, dann Alt + k gedrückt.
Sub Dezimalcode_in_Schriftzeichen_umwandeln()
' Dipl.-Ing. H. Chris Gast, Berlin, Mai 2009 und August 2010, 16. Februar 2011, 22. November 2014.
' Makro zum Erzeugen eines Schriftzeichens aus dem Dezimalcode,
' funktioniert auch im Windows-Sonderbereich dezimal 0128 bis 0159
' und für höhere Unicode-Ebenen.
' Aufrufen mit Alt + k
'
Dim y1 As Variant, y2 As Long
Dim sur1 As String, sur2 As String
Dim Font1 As String
Dim Abfrage As Integer
'
' y1 ist der markierte dezimale Code,
' y2 ist der um hex. 10000 (dez. 65536) verminderte dez. Unicodewert (= Zwischenschritt),
' sur1 ist der gesuchte hexadezimale Wert des High Surrogate (Surrogat 1),
' sur2 ist der gesuchte hexadezimale Wert des Low Surrogate (Surrogat 2),
' Font 1 ist die zu wählende Schriftart
'
' Wenn nichts markiert ist, links vom Cursor "Wort" markieren (dies kann bis zu 6-stellig sein):
If Selection.Type <> wdSelectionNormal Then
Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
End If
y1 = Selection
'
' Prüfung, ob eine Zahl markiert wurde:
If IsNumeric(y1) = False Then
MsgBox "Markierter Wert muss eine reine dezimale Zahl sein!"
Exit Sub
End If
'
If y1 > 1114111 Then
MsgBox "Unicodewerte über hex. 10FFFF bzw. dez. 1'114'111 sind nicht zulässig."
Exit Sub
End If
'
' *********************
' Fallunterscheidung:
If y1 < 30 Then
18
Auf Computern mit Windows gilt zum Beispiel: Alt + (Ziffer 9) ergibt ○ (weißer Kreis),
dagegen Alt + (Ziffern 0, dann 9) ergibt das Steuerzeichen "Tabulator". Meine Makros dagegen
erzeugen keine DOS-Zeichen.
27
Abfrage = MsgBox("Wollen Sie ein Steuerzeichen erzeugen?", 292, "Windows-Steuerzeichen")
' Erklärung der Abfragebox: (VbYesNo = 4) + (VbQuestion = 32) + (VbDefaultButton2 = 256)
If Abfrage = vbNo Then
Exit Sub
End If
End If
'
' Fall: Hexcode zwischen D800 und DFFF:
If y1 > 55295 And y1 < 57344 Then
Abfrage = MsgBox("Es handelt sich um ein Surrogat, kein zulässiges Zeichen!" _
& vbCrLf & vbCrLf & "Wollen Sie dieses trotzdem erzeugen?", _
vbYesNo + vbQuestion + vbDefaultButton2, "Windows-Steuerzeichen")
If Abfrage = vbNo Then Exit Sub
End If
'
If y1 < 65536 Then
' (Bis hex. FFFF ist UTF-16 mit dem einfachen Unicode identisch)
'
If y1 > 127 And y1 < 160 Then
MsgBox "Achtung, Windows-Sonderbereich!"
Selection.TypeText Text:=Chr(y1)
Else
Selection.TypeText Text:=ChrW(y1)
End If
'
If y1 > 61471 And y1 < 61696 Then
Font1 = InputBox("Bitte Sonderschriftart eingeben", "Achtung Sonderschrift!", "Symbol")
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.Font.Name = Font1
End If
Exit Sub
End If
'
' *****************************************
' Für Schriftzeichen mit Unicode höherer Ebenen (hex.10000 bis hex.10FFFF) müssen Surrogate
' nach ISO/IEC 10646:2003, Anhang C angewendet werden.
' Für die Surrogate verwende ich die Formelzeichen "sur1" und "sur2".
'
und "y2" als Zwischenwert für "Eingabewert minus hex. 00010000":
' y2 = Val("&H" & z1) - Val("&H" & "10000")
y2 = y1 - 65536
'
' Die Umrechnung von hex. D800 mittel "Val(&HD800)" führte bei hohen Werten
' zu negativen Zahlen, deshalb statt "hex.D800" besser dezimal "55296".
' Statt "Val(&HD400)" schreibe ich einfacher direkt dezimal "1024":
'
' Daraus ergeben sich als Surrogate:
sur1 = Hex(Int(y2 / 1024) + 55296)
sur2 = Hex(y2 - (Int(y2 / 1024) * 1024) + 56320)
'
' Anzeige = MsgBox(" Der Hexcode ist " & z1 & vbCrLf & " Der Dezimalcode1 ist: " _
'
& y1 & vbCrLf & " Das erste Surrogat ist: " & sur1 & vbCrLf & "Das zweite Surrogat ist: " _
'
& sur2, 0, "Zeichen aus Unicode")
'
' ******************************
' passende Schriftart festlegen (Font):
If y1 >= 65792 And y1 <= 65930 Then
Font1 = InputBox("Bitte passende Schriftart wählen!", "Dez. Unicode = " & y1, "Aegean")
Else
If y1 >= 77824 And y1 <= 78894 Then
Font1 = InputBox("Bitte passende Schriftart wählen!", "Dez. Unicode = " & y1, "Gardiner")
Else
' besser "Symbola" vorschlagen, 22. November 2014.
28
Font1 = InputBox("Bitte passende Schriftart wählen!", "Dez. Unicode = " & y1, "Symbola")
End If
End If
'
' *******************************
' Ergebnis an Stelle des Codes einfügen:
Selection.Font.Name = Font1
Selection.Font.Bold = True
Selection.Font.Size = 14
Selection.TypeText Text:=ChrW("&H" & sur1) & ChrW("&H" & sur2)
End Sub
29
6 Makro zur Analyse von Schriftzeichen, auch von Zeichen
höherer Unicode-Ebenen und Sonderzeichen
6.1 Die einzelnen Probleme und Lösungen
6.1.1 Unicode-Zeichen höherer Ebenen
Zeichen aus höheren Unicode-Ebenen können im Word 2000 mit den vorhandenen
Funktionen nicht analysiert werden. Deshalb wollte ich dafür ein Makro schreiben. Diese
Zeichen werden in Word (Windows) mittels zwei Surrogate nach ISO/IEC 10646:2003,
Anhang C dargestellt, das Windows mit UTF-16 arbeitet. Dabei sind im Unicode-Bereich
hex. D800 bis hex. DBFF das obere Surrogat (in Schreibrichtung gesehen das erste Zeichen)
und im Bereich hex. DC00 bis hex. DFFF das untere Surrogat (rechts davon). Nur wenn beide
Surrogate vorhanden sind und richtig angeordnet, ergibt sich ein zulässiges Unicode-Zeichen
höherer Ebenen. Das folgende Makro (siehe Abschnitt 6.3) erkennt, ob ein zulässiges
Surrogatpaar vorliegt und berechnet daraus auch die Unicodes höherer Ebenen 19.
Nachdem die zwei UTF-16-Surrogate ermittelt sind, muss daraus der gesuchte Unicode wie
folgt nach ISO 10646 berechnet werden:
Auszug aus ISO 10646:2003, Anhang C:
Ich verwende im Makro statt x und y die Formelzeichen z1 und z2 für die Surrogate.
Weil das Rechnen bei meinen Makros meist nur mit dezimalen Zahlen funktioniert, rechnete
ich vorher die Konstanten um, siehe die folgende Tabelle:
Tabelle 6.1: Hexwerte umgerechnet in Dezimalwerte:
Hexadezimal
0020
0400
D8 00
DC 00
1 00 00
Dezimal
32
1024
55 296
56 320
65 536
Die obige Gleichung nach ISO 10646:2003, Anhang C als VBA-Makro:
y(1) = Val("&H" & z(1) & "&")
y(2) = Val("&H" & z(2) & "&")
y(0) = ((y(1) - 55296) * 1024) + (y(2) - 56320) + 65536
z(0) = Hex(y(0))
MsgBox "Der Unicode des Zeichens höherer Ebene ist: " & z(0) &" !"
19
30
seit Sonntag, 13. Juni 2010.
Bei Unicodes höherer Ebenen war für mich überraschenderweise nicht die Umrechnung der
Surrogate nach der ISO-Norm das Problem, sondern das genaue Auffinden der beiden
Surrogate im Text bei Word 2003. Mehrere Makro-Ansätze funktionierten in Word 2000,
aber nicht in Word 2003. Ein anderer Ansatz funktionierte in Word 2003, aber nicht in
Word 2000 20. Schließlich blieben nur die beiden Analyse-Varianten:
a) mit der Mid-Funktion:
x(i) = Mid(Selection, i, 1)
b) die Zerlegung des markierten Bereichs in einzelne Ranges
Set Rg(i) = Selection.Range
Rg(i).SetRange Start:=Rg(i).Start + i - 1, End:=Rg(i).Start + i
Nur diese erkannten sowohl in Word 2000 als auch in Word 2003 gleicher-maßen die
einzelnen Surrogate richtig. Nachdem das Makro schließlich sowohl in Word 2000 als auch in
Word 2003 lief, funktionierten die beiden Varianten auch problemlos unter Word 2007 21. Da
aber bei der Mid-Funktion die Windows-Sonderschriftarten (siehe 6.1.5) nur sicher erkannt
werden, wenn sie an erster Stelle der Zeichenkette (String) stehen, wählte ich die Variante mit
der Zerteilung in Ranges, obwohl dieses wiederum Probleme bei Steuerzeichen für Tabellen
und Felder macht.
6.1.2 Probleme mit hohen Zahlen beim VBA-Datentyp "Integer"
Probleme gab es auch bei der Funktion der Code-Ermittlung mit "AscW(Zeichen)". Da der
Code in VBA als Datentyp "Integer" ausgegeben wird, der nur bis 32 767 positive
Zahlenwerte ermöglicht, waren einige "Verrenkungen" in der Programmierung nötig. Ich
ermittelte zuerst die hexadezimalen Werte mit "Hex(AscW(Zeichen)" und dann mit der ValFunktion wie in 5.1 die dezimalen Werte. Bei der Angabe des Dezimalcodes im Bereich 128
bis 255 fügte ich in der Ergebnis-Anzeige eine voranzustellende Null ein, die man
davorsetzen muss, wenn man unter Windows den Dezimalcode mit Alt + Zahlenwert auf der
Nummerntastatur eingibt, damit Windows nicht den alten DOS-Code statt des WindowsCodes verwendet.
6.1.3 Erkennen von kombinierenden diakritischen Zeichen
Ferner gibt es Kombinierende Zeichen, die mit dem Buchstaben davor optisch verschmelzen,
hauptsächlich kombinierende diakritische Zeichen (en: COMBINING DIACRITICAL
MARKS) aus dem Unicode-Bereich hex. 0300 bis hex. 036F. Weitere kombinierende Zeichen
siehe ISO/IEC 10646:2003, Anhang B 22. Das folgende Makro kann bei der "AutofokusFunktion" bis zu vier diakritische Zeichen feststellen, und auch, wenn diese mit einem
Schriftzeichen der Windows-Sonderschriftart Symbol kombiniert sind. So ist sichergestellt,
dass von einem Buchstaben mit diakritischen Zeichen letztere vollständig mit-analysiert
werden.
20
21
22
Der Trim-Befehl zerstörte mir Surrogate, der Move- und der Next-Befehl übersprangen in
Word 2003 die Einzelbytes (die Surrogate), eine anderer Befehl funktionierte dafür zwar in
Word 2003, aber nicht in Word 2000, usw., bis ich als Lösung die Mid-Funktion fand, die sich in
beiden Word-Versionen auch bei Surrogaten gleichartig verhielt.
Die Tests mit Word 2007 erfolgten in einem Copyshop, da ich dieses nicht habe. (Inzwischen
stellte sich heraus, dass das fertige Analyse-Programm auch problemlos unter Word 2010 läuft).
Inzwischen Version ISO/IEC 10646:2012, Anhang B.
31
6.1.4 Sonderzeichen in der Messagebox
Ein weiteres Problem ist die Ergebnisanzeige in einer Messagebox. Die MsgBox-Funktion
von Word ist nicht Unicode-tauglich. Teilweise wurden fehlerhaft "a" statt "α" und "d" statt
"δ" angezeigt, während das kleine Beta wiederum richtig aussah. Um trotzdem die einzelnen
Zeichen erklären zu können, verwendete ich eine API-Funktion, nämlich die MessageBoxW
von Windows, wobei mit der Funktion StrPtr (Stringpointer) nur die Speicheradresse des
Strings "MsgBoxAnzeige" übergeben wird, was verhindert, dass sonst der Unicode
beschnitten wird und fehlerhafte Anzeigen erfolgen [15]. Am Anfang des Makromoduls (vor
der ersten Prozedur) muss allerdings der Aufruf der MessageBoxW deklariert werden. Damit
ist das Makro allerdings nur in Windows-Umgebung lauffähig, und da auch in der
MessageBoxW nur die Systemschrift von Windows verwendet werden kann, sind auch
weiterhin nicht alle Zeichen anzeigbar. Hier half nur die Ausgabe als separates WordDokument, die ich in meiner Messagebox in der letzten Zeile unter der Anklickvariante "Ja"
anbiete, siehe folgendes Beispiel für die Analyse einer ägyptischen Hieroglyphe.
Bild 6.1: Screenshot des Ergebnisses des Analyse-Makros in einer erweiterten
Messagebox und in einer "separate Datei"
In der Ergebnisanzeige verzichtete ich bei der Angabe der einzelnen Zeichen auf
Anführungszeichen, weil sonst einige kombinierenden Zeichen oder Schriftzeichen mit
Strichen nicht immer eindeutig lesbar sind.
32
6.1.5 Probleme mit den Windows-Sonderschriftarten
Das größte Problem stellten bei der Erstellung des Analyse-Makros die Zeichen der
Windows-Sonderschriftarten wie Symbol und Wingdings dar. Für Zeichen der WindowsSonderschriftarten funktionieren nämlich die normalen Regeln der Zeichencodebestimmung
mit den Befehlen "Asc(Zeichen)" bzw. "AscW(Zeichen)" und der Schriftartbestimmung mit
"Selection.Font.Name" nicht, wenn diese über "Einfügen → Symbol" eingegeben worden
waren. Word setzt nämlich im Quelltext an dieser Stelle dann eine "Runde Klammer links"
(englisch: "LEFT PARENTHESIS"):
αβχ (Buchstaben in Symbol-Schrift umgewandelt)
αβχ (über Einfügen → Symbol → Schriftart Symbol)
→ Analyse funktionierte richtig.
→ Analyse ergab fälschlich "(".
Hier hilft lediglich die folgende Analyse-Methode mit einem "Dialog":
If x(i) = "(" Or x(i) Like "[" & ChrW(61472) & "-" & ChrW(61695) & "]"
Then
Rg(i).Select
With Dialogs(wdDialogInsertSymbol)
f1 = .Font
Zeichennummer1 = .CharNum
End With
Diese Abfrage mit dem "Dialog" funktioniert allerdings nur bei Einzelzeichen-Analyse
beziehungsweise nur beim ersten Zeichen einer Zeichenkette. Deshalb konnte ich mit einem
einfachen Analyse-Makro nicht weiterarbeiten, sondern musste die Markierung in Ranges mit
einzelnen Zeichen zerlegen.
Windows-Sonderzeichen sind nicht in den Unicode-Tabellen der ISO 10646 enthalten. Ihre
Codes liegen im dem frei verfügbaren "PUA"-Bereich (PUA = "Private Use Area"). Für die
beiden häufigsten Windows-Sonderschriftarten "Symbol" und "Wingdings" ergänzte ich
spezielle Unterfunktionen, die diese Zeichen mit ihrer Bedeutung und, soweit vorhanden, mit
den Unicode-Entsprechungen enthalten. Details dazu finden sich unter [27].
Ein Problem kann sich in seltenen Fällen ergeben, wenn die Umwandlung normaler
Buchstaben in Symbol-Zeichen nicht korrekt erfolgte. Wird einem Zeichen mit einem Code
größer als dezimal 255 nachträglich die Schriftart "Symbol" zugeordnet, werden für dessen
Anzeige auf dem Bildschirm manchmal nur die letzten zwei hexadezimale Stellen des Codes
berücksichtig. Aus dem Ohmzeichen "Ω" (Unicode hex. 2126) wird dann zum Beispiel
fälschlich "&", während die Computer-interne Codierung der Code für Ohmzeichen bleibt!
Ob der hexadezimale Code nun "26", "126", "226", "426", "1026" oder richtig "F026" lautet
("&", "Ħ", "Ȧ" usw.), das Zeichen wird bei Wechsel in die Schriftart "Symbol" optisch immer
zum "Ampersand"!
6.1.6 Probleme mit Steuerzeichen für Feldfunktionen und für Tabellen
Am problematischsten waren (abgesehen von den Windows-Sonderschriften) die Steuerzeichen für Tabellen- und Feldfunktionen von Word. Diese können zwar mit der Funktion
"Mid(Selection, i, 1)" gut ermittelt werden, führen aber bei der Zerlegung des markierten
Textes in Ranges zu Problemen. Der Befehl zur Windows-Sonderzeichen-Erkennung führt bei
diesen Steuerzeichen zum Absturz des Makros. Deshalb musste ich die Steuerzeichen für
Feldfunktionen vorher separat ermitteln und vor der eigentlichen Analyse aus dem zu
analysierenden Bereich entfernen.
33
a) Bei sichtbarem Feldcode wird die Markierung auf die Zeichen innerhalb des Feldes
beschränkt (bei mehreren Feldern auf den Feldcode des ersten Feldes).
b) Bei Tabellen bzw. Tabellenausschnitte werden die markierten Tabellenfelder in einer
separaten (nicht sichtbaren) Datei in Text umgewandelt. Anschließend wird dieser Text so
aufbereitet, dass er dem Quelltext der markierten Tabellenfelder entsprechen würde.
Hierbei stellt sich die Frage, ob auch bei Tabellenausschnitten das doppelte TabellenfeldSteuerzeichen ChrW(7) am Ende der Tabellen-Reihe angezeigt werden sollte, oder nur
dann, wenn die ganze Tabellen-Reihe markiert war. Ich entschied mich, Tabellenfelder in
der Markierung wie eine selbstständige Tabelle zu analysieren. Ferner wird bei der
Analyse eines Strings eine etwas abweichende Codierung ermittelt (nämlich 13 + 7) als im
Quelltext (nur "7"). Mein fertiges Analyse-Makro orientiert sich am Quelltext und gibt nur
den Code "7" an.
c) Bei nichtsichtbarem Feldcode wird der markierte Text in einer separaten Datei untersucht,
wobei erst die Feldcode-Ansicht für die Anzeige im Ergebnis in einer Zeichenkette 23
gespeichert wird, dann werden die Feldfunktionen aufgehoben (Selection.Fields.Unlink)
und das Feldergebnis analysiert. Unbekannte Schriftzeichen befinden sich nie im
Feldcode, sondern stets nur im Feldergebnis. Sollte wider Erwarten doch noch der
Feldcode analysiert werden, kann man das Ergebnis als Datei ausgeben lassen und dort
mit demselben Analysemakro die Zeile mit der Feldcode-Ansicht analysieren,
z. B. " REF _Ref293239865 \h ".
d) Bei durch-Feldfunktion geschützten-Sonderzeichen, bei denen der Unlink-Befehl nicht
funktioniert, musste ich die Word-Feldfunktion für die Analyse durch das Makro erst
aufwendig nachbilden, und für sonstige Funktionen, bei denen der Unlink-Befehl nicht
funktioniert wie bei der Overstrike-Funktion, durch Kopieren und Inhalte-Einfügen die
Feldfunktionen beseitigen.
Die folgende Tabelle zeigt eine Übersicht verschiedener Feldfunktionen.
Tabelle 6.1: Beispiele für Feldfunktionen
(1 von 2)
Art des Feldes
Feldergebnis
Seitenzahl
34
PAGE - 1 -
Speicherdatum
6. January 2017
SAVEDATE \@ "d. MMMM
yyyy" 13. April 2012
Index-Eintrag
(ist ausgeblendet)
{ XE
"Sonderzeichen" }
(ist ausgeblendet)
XE "Sonderzeichen" Unsichtbare Titel
für das Inhaltsverzeichnis
(ist ausgeblendet)
{TC "Überschrift
Ebene 3" \l 3}
(ist ausgeblendet)
TC "Überschrift Ebene 3" \l
3
Overstrike-Feld
_
d
eq \o (d;_)
23
34
Feldcode (Screenshots)
Quelltext in Word 2000
Achtung: Windows-Sonderschriftarten sind in dieser Ergebniszeile nicht erkennbar.
Tabelle 6.1 (2 von 2)
Geschütztes
Sonderzeichen
Ω
SYMBOL 61527 \f "Symbol"
\s 10W
Querverweis auf
einen Abschnitt
Siehe Abschnitt 5.2
Siehe Abschnitt REF
_Ref261203182 \r \h \*
MERGEFORMAT 5.2
Querverweis auf
Überschrift mit
Sonderzeichen
Siehe
Testüberschrift
Farbmarkierung ω
Siehe Testübersch
rift EF _Ref3220
83838 \h Farbm
a r k i e r u n g wð
= Steuerzeichen 19
= Steuerzeichen 20
= Steuerzeichen 21
= Steuerzeichen 1
Der Quelltext der eingefügten Screenshots: EMBED MSPhotoEd.3
Der Querverweis auf eine Überschrift mit Sonderzeichen lautet im Quelltext bei Word 2010:
Siehe Testüberschrift REF _Ref322083838 \h Farbmarkierung w
Hier ist der Unterschied zwischen Word 2000 und Word 2010 (im "Kompatibilitätsmodus")
gut zu sehen. Sobald ein Zeichen der Sonderschriftarten Symbol oder Wingdings in der Datei
vorkommt, werden im Quelltext zwischen alle normalen Unicode-kompatiblen Zeichen im
gesamten Dokument je ein Leerzeichen gesetzt, und nur beim Zeichen der Sonderschriftart
"Symbol" das Zeichen "ð".
6.1.7 Ermittlung der (englischen) Namen der Unicode-Schriftzeichen
In der wahlweisen Anzeige des Ergebnisses in einer separaten Datei wird auch der englische
Name des Zeichens aus einer umfangreichen Unicode-Liste "UnicodeData.txt" [1]
angezeigt, sofern das Zeichen als Unicode-Zeichen genormt ist. Bei Symbol-Zeichen wird das
entsprechende Unicode-Zeichen angegeben. Chinesische, japanische und ein Teil der
koreanischen Unicode-Zeichen sind in dieser Liste nicht aufgeführt. In meinem Makro wird
stattdessen auf die jeweilige Quelle im Internet verwiesen, die nur als recht große Pdf-Dateien
vorliegen. Deshalb habe ich hier auf ein automatisches Nachschlagen verzichtet.
Die Textdatei mit der Unicode-Liste habe ich in der Dokumentvorlage "Unicode-Makroskompakt.dot" mit den Makros integriert (siehe [2]), da der Aufruf der Liste im Internet mir
zuviel Rechenzeit kostet (ich habe keinen allzu-schnellen Internetzugang). Nur wenn sich das
Makro sich nicht in dieser Dokumentvorlage befindet und die Datei "UnicodeData.txt"
auch nicht auf dem Computer im Ordner mit den Dokumentvorlagen und auch nicht im
Ordner "Word\STARTUP" befindet, wird im Internet nachgesehen.
Zuhause mit nicht sehr schnellem Internetzugang und Word 2000 braucht das Makro zur
Zeichenanalyse mit direktem Internetzugriff beim ersten Aufruf nach dem Löschen aller
temporären Dateien je nach Qualität der Internetverbindung über 10 Sekunden und bei
Folgeaufrufen 3 bis 5 Sekunden. Beim Zugriff auf die Kopie der Unicode-Liste auf der
Festplatte (also ohne Internet) dauert der Zugriff dagegen lediglich zwischen 0,8 und
1,2 Sekunden. 24
24
Als Test für die Rechenzeit-Messung wählte ich ein Zeichen der (höheren) Unicode-Ebene 1 mit
kombinierendem Akzent.
35
Im Büro mit schnellerem Internetzugang dauerte der Internetzugriff beim ersten Mal etwa
6 bis 7 Sekunden, bei Folgezugriffen war der Internetzugriff nur unwesentlich langsamer als
der Zugriff auf die Kopie der Unicode-Liste auf der Festplatte (0,62 bis 0,75 Sekunden
gegenüber 0,44 bis 0,47 Sekunden).
Im Copyshop mit Word 2007 dauert das Makro beim ersten Internetzugriff etwas über
10 Sekunden und Folgezugriffe etwa 1 Sekunde. Ob ich dort auf dem fremden Computer die
Unicode-Liste auf der Festplatte speichern könnte, probierte ich nicht aus.
Der Nachteil der eingebetteten Unicode-Liste ist, dass ich sie bei Erweiterungen oder
Korrekturen, die alle paar Jahre erfolgen, in die Dokumentvorlage neu einarbeiten muss. 25
6.1.8 Weitere Steuerzeichen von Word
Word verwendet nicht nur für Feldfunktionen und für Tabellen, sondern auch für
Absatzmarken, Feste Leerzeichen, Geschützte Bindestriche, Bedingte Trennstriche,
Tabulatoren usw. Steuerzeichen im Codebereich von (dezimal) 01 bis 31.
Diese werden vom Makro problemlos analysiert. In der Ergebnis-Anzeige habe ich einige
davon zur besseren Verständlichkeit durch ihre deutsche Beschreibung ersetzt. Weitere WordSteuerzeichen wie etwa das für Fußnotenzeichen finden sich unter [5]. Zu dem mit
Tabellenfeld-Steuerzeichen und Feld-Steuerzeichen siehe oben 6.1.6.
6.1.9 Grafiken, Textfelder, Zeichnungen und ähnliches im Tex
Wenn Bilder oder Formeleditor-Objekte in der Markierung enthalten sind, erscheint in der
Analyse der Code "01".
Wenn ein Grafik-Anker markiert ist, wird dies vorab durch die Abfrage des Markiertyps
abgefangen ("Selection.Type").
Für die seltenen Fällen, in denen ein Grafik-Anker, ein Zeichenobjekt ("Autoform") oder die
Linien eines Textfeldes ("Textbox") in der Markierung enthalten sind, stürzte das Makro ab.
Es stellte sich heraus, dass die störenden Objekte alle "Shapes" waren, während "Frames" und
"InlineShapes" die Analyse nicht behinderten. Will man trotz enthaltener "Shapes" den Text
analysieren, muss man die markierte Stelle mitsamt diesen "Shapes" in eine Zwischendatei
kopieren und alle "Shapes löschen":
Dim i As Integer
For i = ActiveDocument.Shapes.Count To 1 Step -1
ActiveDocument.Shapes(i).Delete
Next i
Dabei ging allerdings der Inhalt von Textfeldern verloren. Dies umgeht das Makro durch die
Umwandlung von Textfeldern (Textbox) in Textrahmen (Frame).
Shapes, die frei positionierte Bilder sind, lassen sich in InlineShapes umwandeln (normale
Bilder in der Zeile). Dies bringt aber für die Analyse nichts. Deshalb werden sie in der
Zwischendatei wie auch die AutoShapes gelöscht.
25
36
Für zukünftige Nutzer: Dokumentvorlage "Unicode-Makros-kompakt.dot" derart umbenennen,
dass das Wort "kompakt" darin nicht mehr vorkommt, und die Datei "UnicodeData.txt" [1]
in Ordner mit den Dokumentvorlagen speichern.
Die Abfrage
If Selection.Range.ShapeRange.Count > 0 Then
brachte einen Absturz in Word 2000 (aber nicht in Word 2010), wenn die Markierung in einer
Fußnote oder in einem Textfeld ist. Dort sind keine Shapes zulässig.
Deshalb wird im Analysemakro jetzt (seit Oktober 2012) auf die Abfrage verzichtet und dafür
immer eine Zwischendatei verwendet. Dies kostet keine nennenswert Rechenzeit.
6.1.10 Problem des Öffnens einer Datei mit Makros per Makro (letzte Änderung
des Makros im Mai 2015)
In Word 2010 ließ sich die Datei mit den Unicodelisten nach einem Computerabsturz im
Mai 2015 (nach mehreren Jahren problemlosen Funktionierens) nicht mehr per VBA öffnen.
Stattdessen stürzte Word jedes Mal ab. Offenbar reagiert da eine neue Schutzeinstellung, so
dass Dateien mit Makros nicht mehr von Makros geöffnet werden können.
Abhilfe: Es wird im Analyse-Makro für das Auslesen der Unicode-Liste nicht mehr die
Original-Dokumentvorlage mit den Makros geöffnet, sondern es wird aus der
Dokumentvorlage eine neue Datei erzeugt, die ebenfalls die Unicode-Liste enthält, aber nicht
mehr die Makros.
Mittels des Befehls "WordBasic.DisableAutoMacros 1" dauert die Rechenzeit nur wenig
länger als in der bisherigen Version. Ohne diesen würde mein AutoNew-Makro unnötige Zeit
beanspruchen, da es bei jeder neuen Datei einen Briefkopf mit Datum und Wochentagsangabe
bzw. Feiertagsmeldung erzeugt.
37
6.2 Funktionsablauf des Analyse-Makro
38
6.3 Das fertige Makro zur Analyse von Schrift- und Sonderzeichen,
auch von Windows-Sonderzeichen, von höheren Unicode-Ebenen
und von Schriftzeichen mit kombinierenden diakritischen Zeichen
' Modul "Unicode_Analyse"
' Dipl.-Ing. Hanna-Chris Gast, Berlin (c) 2010, 2011, 2012, Stand 2015.
'
'
'
'
Ausführliche Beschreibung unter:
http://www.siebener-kurier.de/chris-aufsaetze/Unicode_Word-Makros.pdf
Download des Makros unter:
http://www.siebener-kurier.de/chris-aufsaetze/Unicode-Makros.zip
Option Explicit
' Die folgende Funktions-Deklaration für eine erweiterte Messagebox
' muss vor dem ersten Makro des Moduls eingefügt werden:
Private Declare Function MessageBoxW Lib "user32.dll" (ByVal hwnd As Long, _
ByVal lpText As Long, ByVal lpCaption As Long, ByVal uType As Long) As Long
' ********************************************************************************
Sub Hexcode_und_Name_ermitteln()
' Erstellt von Dipl.-Ing. Hanna-Chris Gast, 2010, 2011, 2012, 2014,
' Mai, August, September, November 2015, 17. Dezember 2015, 14. Juni 2016.
' Funktioniert in Word 2000 bis Word 2010 sowie unter Windows XP und Windows 7.
' Wenn im Namen der Datei mit diesem Makro das Wort "kompakt" enthalten ist,
' wird für die (englischen) Namen der Zeichen die Unicode-Liste in dieser Datei gesucht,
' ansonsten wird nach der Textdatei "UnicodeData.txt" gesucht, notfalls im Internet.
'
' Dieses Makro ermittelt die Schriftart und die Unicode-Werte eines markierten Zeichens oder
' einer markierten Zeichenfolge, aber auch die Schriftart und den Code der beiden
' Sonderschriftarten "Symbol" und "Wingdings". Bei diesen werden, soweit vorhanden,
' die entsprechenden Unicodezeichen mit (englischen) Namen angegeben.
'
' Das Analyse-Ergebnis wird bei bis zu 40 Zeichen in einer Messagebox ausgegeben, kann aber
' auch in eine separate Datei ausgegeben werden. Bei über 40 Zeichen wird das Ergebnis direkt
' in einer separaten Datei ausgegeben. In der separaten Datei mit dem Ergebnisprotokoll werden
' auch die jeweiligen (englischen) Namen der Unicode-Zeichen nach ISO/IEC 10646 angegeben,
' außer bei Steuerzeichen ("Control").
'
' Bei Feldern im Word-Text wird nur noch das Feldergebnis analysiert. In der Feldcode-Ansicht
' befinden sich im Feld keine unbekannten Schriftzeichen.
'
' Bei Textmarken in der Markierung werden diese ebenfalls aufgelistet (ergänzt November 2012).
'
' Dieses Makro kann seit 2011 auch in Tabellen mehrere Tabellen-Zellen auf einmal analysieren
' Dieses Makro analysiert auch Felder (seit Herbst 2011 auch bei Double-Strike).
'
' In Word 2010 gehen bei "Selection.Paste" manchmal die Absatz-Schriftart verloren,
' und Leerzeichen werden nicht zwischen Absatzmarken eingefügt. Dies wird gesondert abgefangen
' (ergänzt 2014).
'
' Bei nicht erkennbaren Sonderschriftarten wird die Bedeutung von Symbol angezeigt, weil dies die
' wahrscheinlichste Sonderschriftart ist (20. Mai 2015).
'
' Bei Zeichen, deren Font durch Feldcode geschützt ist, muss das Zeichen auch ermittelt werden
' können, wenn der Code hexadezimal ist (25. bis 27. November 2014).
39
'
'
'
'
'
'
'
'
'
'
'
Wenn nur Bilder ohne weiteren Text markiert sind,
werden einige Makrozeilen übersprungen (13. August 2015).
Wenn nicht-analysierbare OMML-Formeln vorhanden sind,
wird die Ausgabe der Analyse in einer Messagebox übersprungen
und bei der Ausgabe als Datei der OMML-Quelltext an den Protokoll-Text angehängt.
Dieser kann dann ggf. im einem zweiten Arbeitsgang analysiert werden.
Gewähltes Tastenkürzel: AltGr + C.
*****************
Dim x() As String ' x(i) ist das zu analysierende Zeichen
Dim Y() As String ' z(i) der Hexcode
Dim Z() As String ' y(i) der Dezimalcode
Dim f() As String ' f(i) die jeweilige Schriftart (Font)
Dim Rg() As Range ' Rg(i) ist der Range des jeweiligen Zeichens
Dim fs As String
Dim Feldsteuerzeichen As Boolean
Dim zL As String, zR As String
Dim Ergebnis1 As String ' Feldcode-Ansicht
Dim Ergebnis2 As String ' Analyse-Ergebnis
Dim i As Integer
Dim j As Integer
Dim N As Integer
Dim k1 As Integer
Dim k2 As Integer
Dim strFontname
Dim Zeichennummer1 As Integer ' bei Sonderschriftarten
Dim rng0 As Range
' Rng0 ist der zu analysierende Bereich.
Dim rng1 As Range
Dim Rng2 As Range
Dim MsgBoxAnzeige As String
Dim IntAbfrage As Integer
Dim Windowssonderschrift() As Boolean
Dim Pfad1 As String
Dim Unicodeliste1 As String
Dim Pos1 As Integer
Dim Pos2 As Integer
Dim doc1 As Word.Document ' die Datei mit den zu analysierenden Zeichen
Dim doc2 As Word.Document ' temporäre Zwischendatei
Dim aTable As Table
Dim Unsichtbares_zeigen As Boolean
Dim Shape_Meldung As String: Shape_Meldung = ""
Dim B_Leerzeichen As Boolean: B_Leerzeichen = False
Dim B_Font As Boolean: B_Font = False
Dim DokListe As Word.Document
Dim Int_OMML As Integer
Dim IntKompatibilität As Integer
Dim zDatei As String: zDatei = ""
Dim strPath As String
Dim IntFigures As Integer
Dim TM As Bookmark
Dim Textmarkenliste As String
' **********************************
' "Ausgeblendete" Zeichen sichtbar machen, wenn sie unsichtbar sind:
If ActiveWindow.View.ShowAll = False Then
Unsichtbares_zeigen = True
ActiveWindow.View.ShowAll = True
End If
'
' Wenn der Cursor am Textanfang steht und nichts markiert ist:
If Selection.Range.End = 0 Then
40
'
'
'
'
'
MsgBox "Bitte Zeichen markieren, der Cursor steht vor dem Text " _
& "oder es ist kein Text vorhanden!"
Exit Sub
End If
'
Art der Markierung prüfen:
If Selection.Type < 2 Then
' Wenn nichts markiert ist, 1 Zeichen links vom Cursor markieren:
Set rng0 = Selection.Range
rng0.SetRange Start:=rng0.End - 1, End:=rng0.End
rng0.Select
ElseIf Selection.Type = 8 Then
'' MsgBox "Es ist eine frei positionierte Grafik oder deren Ankerpunkt markiert."
''Exit Sub
N=1
Set rng0 = Selection.Range
GoTo Zeile_Shape_oder_InlineShape
ElseIf Selection.Type = 7 Then
'' MsgBox "Es ist Grafik oder eine Formel (InlineShape) markiert."
''Exit Sub
N=1
Set rng0 = Selection.Range
GoTo Zeile_Shape_oder_InlineShape
End If
' ***********************
' Fehlerbehandlung:
On Error GoTo Zeile_Abbruch_weil_kein_Schriftzeichen
' ***********************'
' Maximale Länge der Zeichenkette wird begrenzt.
N = Len(Selection)
If N > 120 Then
' Bei größer 44 Zeilen ist keine Messagebox mehr möglich, aber bei über 100 Zeilen
' wird auch die Ausgabe in eine Datei zu unübersichtlich. Theoretisch ist hier keine Grenze.
MsgBox "Maximal 120 Zeichen markieren! Es sind hier " & N & " Zeichen markiert."
Exit Sub
End If
*********************************************************************
"Autofokus" wegen kombinierenden diakritischen Zeichen
und Zeichen höherer Unicode-Ebenen:
*********************************************************************
' a) Markierung um kombinierende diakritische Zeichen erweitern
' (Unicode-Zeichen von hex. 0300 bis hex. 036F., bzw. dezimal von 768 bis 879):
' a1) Wenn nur das kombinierende diakritische Zeichen (oder eines von bis zu vier) markiert ist:
For i = 1 To 4
zL = Hex(AscW(Left(Selection, 1)))
If Val("&H" & zL & "&") > 767 And Val("&H" & zL & "&") < 880 Then
Set rng0 = Selection.Range
Set Rng2 = rng0
Rng2.SetRange Start:=Rng2.Start - 1, End:=Rng2.End
zL = Hex(AscW(Left(Rng2, 1)))
' Zeichen links davon gehört dazu.
Rng2.Select
Else
Exit For
End If
Next i
' a2) Wenn rechts von der Markierung eins bis vier kombinierende diakritische Zeichen stehen:
Set rng0 = Selection.Range
Set Rng2 = rng0
For i = 1 To 4
Rng2.SetRange Start:=Rng2.Start, End:=Rng2.End + 1
zR = Hex(AscW(Right(Rng2, 1)))
41
If Val("&H" & zR & "&") > 767 And Val("&H" & zR & "&") < 880 Then
Rng2.Select
Else
Exit For
End If
Next i
' b) Wenn Surrogate für Unicode-Zeichen höherer Ebenen vorhanden sind:
' b1) Markierung nach rechts erweitern, wenn nur das linke Surrogat vorhanden ist:
zR = Hex(AscW(Right(Selection, 1)))
If Val("&H" & zR & "&") > 55295 And Val("&H" & zR & "&") < 56320 Then
Set rng0 = Selection.Range
Set Rng2 = rng0
Rng2.SetRange Start:=Rng2.Start, End:=Rng2.End + 1
' Nur wenn das neue Zeichen das gesuchte rechte Surrogat ist, Markierung erweitern:
zR = Hex(AscW(Right(Rng2, 1)))
If Val("&H" & zR & "&") > 56319 And Val("&H" & zR & "&") < 57344 Then
Rng2.Select
End If
End If
' b2) Markierung nach links erweitern, wenn nur das rechte Surrogat vorhanden ist:
zL = Hex(AscW(Left(Selection, 1)))
If Val("&H" & zL & "&") > 56319 And Val("&H" & zL & "&") < 57344 Then
Set rng0 = Selection.Range
Set Rng2 = rng0
Rng2.SetRange Start:=Rng2.Start - 1, End:=Rng2.End
' Nur wenn das neue Zeichen das gesuchte linke Surrogat ist, Markierung erweitern:
zL = Hex(AscW(Left(Rng2, 1)))
If Val("&H" & zL & "&") > 55295 And Val("&H" & zL & "&") < 56320 Then
Rng2.Select
End If
End If
' *******
' Durch "Autofokus" veränderte Länge des markierten Bereichs:
N = Len(Selection)
Set rng0 = Selection.Range
' ******************************************************************
Zeile_Shape_oder_InlineShape:
' Wenn die Markierung sichtbaren Feldcode mit den Feldsteuerzeichen enthält,
' Feldcode-Ansicht abschalten.
Feldsteuerzeichen = False
Ergebnis1 = ""
' Text, der später ggf. den Feldcode enthalten soll.
If InStr(Selection, ChrW(19)) > 0 And InStr(Selection, ChrW(21)) > 0 _
And Selection.Fields.Count > 0 Then
ActiveWindow.View.ShowFieldCodes = False
N = Len(Selection)
End If
' ****************************************************************************
' Bei der Analyse von Einzel-Ranges machen folgende Elemente Probleme:
' a) Shapes (Textfelder oder Zeichenobjekte),
' b) Tabellensteuerzeichen und
' c) Feldfunktionen (Feld-Steuerzeichen).
' Eine Beseitigung dieser Elemente in der Originaldatei und Verwendung von "Undo" ist zu
' nach der Analyse riskant. Deshalb erfolgt in einer Zwischendatei ("doc2") die Umwandlung
' von Shapes in Frames bzw. deren Löschung, der Umwandlung des markierten Tabellenbereichs
' in Text und schließlich die Beseitigung von Feldfunktionen im zu analysierenden Text.
' *************************************************
' Fehlerbehandlung: Beim Befehl "Selection.Copy"
' Ergänzung März 2012, wegen Absturz des "Copy-Befehl" bei Tabellenreihen-Endmarke:
'' If Len(Selection) <= 2 Then ' macht Probleme bei Seitenzahl in Positionsrahmen.
'' If Selection = Chr(13) & Chr(7) Then ' macht Problem bei Feldfunktion in Tabelle.
If rng0.Text = Chr(13) & Chr(7) Then
MsgBox "Es ist nur das Tabellen-Steuerzeichen (Code = 7) markiert."
42
'
'
'
'
'
'
'
'
'
'
'
'
'
'
'
'
'
'
Exit Sub
End If
'*****************
On Error Resume Next
Selection.Copy
If Err <> 0 Then
MsgBox "Die Markierung enthält keinen (kopierfähigen) analysierbaren Inhalt!"
Exit Sub
End If
***********************************************
In Word 2010 wird die Absatzschriftart unzulänglich übertragen, und
einzelne Leerzeichen werden nicht mehr vor Absatzmarken eingefügt (2. Juni 2014):
If Selection.Text = " " Then B_Leerzeichen = True
If Selection.Font.Name <> "" Then B_Font = True
If Err.Number > 0 Then
B_Font = False
Err.Clear
End If
On Error GoTo Zeile_Abbruch_weil_kein_Schriftzeichen
Selection.CopyFormat
*********************************************************************
September 2015.
Bei Dok1 bestimmen, ob OMML-Formeln oder Bilder vorhanden sind:
IntFigures = Selection.Range.InlineShapes.Count
If Val(Application.Version) >= 13 Then
' Nur wenn die Word-Version Word 2010 oder höher ist,
' OMML-Formeln Formeln zählen:
IntKompatibilität = Fkt_Kompatibitaet
Int_OMML = Fkt_OMML_zählen
If Int_OMML > 0 Then
' Pfad der Ausgangsdatei:
strPath = ActiveDocument.Path
If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
End If
Else
' Wordversion bis Word 2003:
Int_OMML = 0
IntKompatibilität = 11
End If
*********************************************************************
Zwischendatei "doc2" erzeugen und dort die zu untersuchende
Zeichenkette einfügen:
*********************************************************************
Set doc1 = ActiveDocument ' (vorhandene Datei)
'' B_Zwischendatei = True
Application.ScreenUpdating = False ' Zwischendatei soll unsichtbar bleiben.
' Automakros abstellen, damit neue Datei sich schneller öffnet:
WordBasic.DisableAutoMacros 1 ' = Disables auto-macros
Set doc2 = Documents.Add ' DocumentType:=wdNewBlankDocument
ggf. Briefkopf entfernen
Selection.WholeStory
Selection.Delete
14. Juni 2016:
Ggf. Textmarken aus der Dokumentvorlage entfernen:
For Each tm In ActiveDocument.Bookmarks
tm.Delete
Next tm
******************************************************************
September 2015:
Bei Dateien mit OMML-Formeln die Zwischendatei im nicht-kompatiblen Modus (14) speichern,
um OMML-Formel analysieren zu können, aber im nicht-kompatiblen Modus lassen
sich verknüpfte Bildpfade nicht erkennen, bei Kompatibilität > 11 werden Bilder
43
'
'
'
'
'
'
'
'
'
'
fälschlich nur als '/' analysiert!"
Abhilfe: Bei Anwesenheit von Bildern im kompatiblen Modus (11) speichern und auf die Analyse
der OMML-Formeln verzichten.
***
Damit das Makro auch unter Word 2000 läuft, erfolgt das Speichern in einer Unterprozedur:
If IntKompatibilität > 11 Then
If IntFigures > 0 Then
' Zwischendatei im Kompatiblen Modus (11) speichern, um Bild-Verknüpfungspfade
' zu analysieren:
Call SpeichernX(strPath & "zzz_Temp.docx", 11)
zDatei = doc2.FullName
If Int_OMML > 0 Then
MsgBox "Um Bildpfade zu erkennen, wurde auf die Analyse von OMML-Formeln verzichtet."
End If
Else
' Zwischendatei im nicht-kompatiblen Modus (14) speichern, um ggf. OMML-Formeln
' zu analyieren:
Call SpeichernX(strPath & "zzz_Temp.docx", 14)
zDatei = doc2.FullName
End If
Else
' Zwischendatei doc2 nicht speichern (Wordversion bis Word 2003 oder kompatible Datei).
End If
**********************************************
In Word 2010 Absatzschriftart und Einzel-Leerzeichen ggf. separat übertragen:
Selection.WholeStory
If B_Leerzeichen = True Then
Selection.TypeText Text:=" "
Else
Selection.Paste
End If
Selection.WholeStory
If B_Font = True Then
Selection.PasteFormat
End If
**********************************************
Selection.WholeStory
Selection.Range.HighlightColorIndex = wdNoHighlight
Selection.Font.Color = wdColorAutomatic
********************************************
Beseitigung von Shapes in der Zwischendatei:
If doc2.Shapes.Count > 0 Then
j = ActiveDocument.Shapes.Count
If j = 0 Then
'' MsgBox "Die Markierung enthält keine Textfelder oder Zeichenobjekte (Shapes)."
ElseIf j = 1 Then
Shape_Meldung = "Die Markierung enthält" _
& " ein Textfeld oder Zeichenobjekt (Shape)." & vbCrLf & vbCrLf
Else
Shape_Meldung = "Die Markierung enthält " & j _
& " Textfelder und/ oder Zeichenobjekte (Shapes)." & vbCrLf & vbCrLf
End If
' ***
' Rückwärts umwandeln bzw. löschen, weil sonst alle anderen Shapes umnummeriert würden:
' (was dann zum Absturz des Makros führen würde):
For i = j To 1 Step -1
If ActiveDocument.Shapes(i).Type = msoTextBox Then ' Typ 17
' Textfelder (Textbox) umwandeln in Textrahmen(Frame).
ActiveDocument.Shapes(i).ConvertToFrame
Else
' AutoForm, Zeichnungsobjekt oder sonstige Grafik (Shape).
ActiveDocument.Shapes(i).Delete
44
End If
Next i
' ***
End If
' Alle Shapes in der Markierung sind jetzt beseitigt.
' *****************************************************************
' Tabellenbeseitigung in der Zwischendatei (doc2):
' Vor der Umwandlung der Tabellen in Text alle Tabellen gelb markieren:
For Each aTable In Selection.Tables
aTable.Range.HighlightColorIndex = wdYellow
Next aTable
'
' Echte Absatzmarken in Tabellen vorübergehend beseitigen:
Selection.Find.ClearFormatting
Selection.Find.Highlight = True
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^p"
.Replacement.Text = "<!p!>"
.Replacement.Font.Color = wdColorRed
.Wrap = wdFindContinue ' (ergänzt 29.7.2013)
.Forward = True
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
'
' Umwandlung der Tabellen in Text (ggf. mehrere kleine Tabellen):
For Each aTable In Selection.Tables
aTable.Rows.ConvertToText Separator:=ChrW(7) ' Tabellenfeld-Steuerzeichen.
Next aTable
Selection.WholeStory
'
' Absatzmarken in Tabellenzeilenschluss in doppeltes Tabellenfeldsteuerzeichen umwandeln:
' (dies entspricht dem Quellcode einer Tabelle in Word 2000 bis Word 2003):
Selection.Find.ClearFormatting
Selection.Find.Highlight = True
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^p"
.Replacement.Text = ChrW(7) & ChrW(7)
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
'
' Absatzmarken innerhalb Tabellenfeldern wiederherstellen:
Selection.Find.ClearFormatting
Selection.Find.Highlight = True
With Selection.Find
.Text = "<!p!>"
.Font.Color = wdColorRed
45
'
'
'
'
.Replacement.Text = "^p"
.Forward = True
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
'
' Durch das Umwandeln einer Tabelle in Text änderte sich die Zahl der markierten Zeichen:
N = Len(Selection)
**************************************************************************************
Feldfunktionen bei markierten Feldergebnissen in Zwischendatei beseitigen:
**************************************************************************************
Solange nur Feldergebnis sichtbar, werden Steuerzeichen von Feldern nicht gefunden:
Application.ScreenUpdating = False
Selection.Fields.ToggleShowCodes
If InStr(Selection, ChrW(19)) > 0 And InStr(Selection, ChrW(21)) > 0 _
And Selection.Fields.Count > 0 Then
' Feldfunktion vorübergehend beseitigen, aber Feldfunktion speichern:
Feldsteuerzeichen = True
Ergebnis1 = Selection ' String mit Feldcode-Ansicht
'''''''''' 26.11.2012
Ergebnis1 = Replace(Ergebnis1, ChrW(19), "{")
Ergebnis1 = Replace(Ergebnis1, ChrW(21), "}")
' ***************************
' Durch Felder geschützte Formelzeichen für Analyse vorübergehend beseitigen (31. März 2011)
' wie zum Beispiel {SYMBOL 87 \f "Symbol" \s 10} oder {SYMBOL 937 \f "Arial" \s 10 \u}:
If InStr(Selection, ChrW(19) & "SYMBOL") > 0 _
Or InStr(Selection, ChrW(19) & " SYMBOL") > 0 Then
Ergebnis1 = "Die Markierung enthält Feldfunktionen " _
& "(dezimale Codes 19 und 21, " _
& "hier als geschweifte Klammern angezeigt) " _
& "mit einem oder mehreren geschützten Sonderzeichen;" _
& vbCrLf & vbCrLf & "Feldcode-Ansicht: " _
& vbCrLf & Ergebnis1 & vbCrLf & vbCrLf _
& "Die Zeichenanalyse ergibt:" & vbCrLf
With Selection.Find
.ClearFormatting
.Text = "^19Symbol"
.Forward = True
.Wrap = wdFindContinue ' es wird sonst nur ein Zeichen ersetzt!
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
Do While .Execute
' solange etwas gefunden wird
If InStr(Selection, "\f ") > 0 Then
'''''''''''''''
k1 = InStr(Selection, "\f ") + 3 ' Anfang des Schriftarts-Namen
k2 = InStr(Selection, ChrW(21))
' Ende des Feldes
strFontname = Mid(Selection, k1, k2 - k1)
If InStr(strFontname, "\") > 0 Then _
strFontname = Mid(strFontname, 1, InStr(strFontname, "\") - 1)
strFontname = Trim(strFontname)
'
If InStr(Selection, "0x") = 0 Then
' Dezimalcode:
46
Selection.Font.Name = strFontname
Selection.Text = ChrW(Val(Mid(Selection, InStr(3, Selection, " "))))
Else
' Hexadezimaler Code (muss ohne "0x" eingefügt werden!):
k1 = InStr(Selection, "0x") + 2 ' Anfang des reinen Hexwertes
k2 = InStr(Selection, "\") ' Ende des Zeichencodes
' Selection.Text = ChrW(Val("&H" & '((reiner_Hexwert))' & "&"))
Selection.Text = ChrW(Val("&H" & Mid(Selection, k1, k2 - k1) & "&"))
Selection.Font.Name = strFontname
End If
End If
Loop
End With
' Falls zwischen Feldanfang und dem Wort "Symbol" ein Leerzeichen ist:
With Selection.Find
.ClearFormatting
.Text = "^19 Symbol"
.Forward = True
.Wrap = wdFindContinue ' es wird sonst nur ein Zeichen ersetzt!
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
Do While .Execute
' solange etwas gefunden wird
If InStr(Selection, "\f ") > 0 Then
k1 = InStr(Selection, "\f ") + 3 ' Anfang des Schriftarts-Namen
k2 = InStr(Selection, ChrW(21))
' Ende des Feldes
strFontname = Mid(Selection, k1, k2 - k1)
If InStr(strFontname, "\") > 0 Then _
strFontname = Mid(strFontname, 1, InStr(strFontname, "\") - 1)
strFontname = Trim(strFontname)
'
If InStr(Selection, "0x") = 0 Then
' Dezimalcode:
Selection.Font.Name = strFontname
Selection.Text = ChrW(Val(Mid(Selection, InStr(3, Selection, " "))))
Else
' Hexadezimaler Code (muss ohne "0x" eingefügt werden!):
k1 = InStr(Selection, "0x") + 2 ' Anfang des reinen Hexwertes
k2 = InStr(Selection, "\") ' Ende des Zeichencodes
' Selection.Text = ChrW(Val("&H" & '((reiner_Hexwert))' & "&"))
Selection.Text = ChrW(Val("&H" & Mid(Selection, k1, k2 - k1) & "&"))
Selection.Font.Name = strFontname
End If
End If
Loop
End With
Else
Ergebnis1 = "Die Markierung enthält Feldfunktionen " _
& "(dezimale Codes 19 und 21, " _
& "hier als geschweifte Klammern angezeigt); " _
& vbCrLf & vbCrLf & "Feldcode-Ansicht: " & vbCrLf & Ergebnis1 _
& vbCrLf & vbCrLf & "Die Zeichenanalyse ergibt:" & vbCrLf
End If
' ***********************************
'' Else ' keine Feld oder keine Feldsteuerzeichen in der Markierung:
'' rng0.Select ' macht Ärger bei Tabellenzellen untereinander! 18. 12.2014.
End If
Selection.Fields.ToggleShowCodes
' *******************************
47
' Markierung in Zwischendatei "doc2" um letzte Absatzmarke verkürzen:
Selection.WholeStory
Set rng0 = Selection.Range
rng0.SetRange Start:=rng0.Start, End:=rng0.End - 1
rng0.Select
' *****************
Application.ScreenUpdating = True
If Feldsteuerzeichen = True Then
Selection.Fields.Unlink
End If
' *****************************************************************
' Bei dem Befehl "Overstrike" funktioniert der obige Unlink-Befehl nicht.
' Beseitigung durch Kopieren und als Inhalt wieder einfügen (ergänzt 2. November 2011):
If Selection.Fields.Count > 0 Then
Dim F0 As Field
Dim RngX As Range
Set RngX = Selection.Range
For Each F0 In RngX.Fields
F0.Select
Selection.Copy
Selection.PasteSpecial Link:=False, DataType:=wdPasteText, _
Placement:=wdInLine, DisplayAsIcon:=False
Next F0
Selection.WholeStory
Selection.MoveEnd Unit:=wdCharacter, Count:=-1
End If
' ******************************************************************
' Analyse des markierten Bereichs (die eigentliche Zeichenanalyse)
' ******************************************************************
N = Len(Selection)
ReDim Rg(N)
ReDim x(N)
ReDim Y(N)
ReDim Z(N)
ReDim f(N)
ReDim Windowssonderschrift(N)
' Bestimmung der Schriftart des markierten Bereichs "f(0)":
f(0) = Selection.Font.Name
' Wenn die Schriftart-Anzeige leer ist, ist sie unterschiedlich:
If f(0) = "" Then
f(0) = "unterschiedlich"
End If
'
Dim RgN As Range ' Markierung in der Zwischendatei
Set RgN = Selection.Range
'
For i = 1 To N
Windowssonderschrift(i) = False
Set Rg(i) = Selection.Range
'' Rg(i).SetRange Start:=Rg(i).Start + i - 1, End:=Rg(i).Start + i
Rg(i).SetRange Start:=RgN.Start + i - 1, End:=RgN.Start + i
''Rg(i).Select
f(i) = Rg(i).Font.Name
x(i) = Rg(i).Text
' y(i) = AscW(x(i)) ' Ergibt negative Zahlen bei x(i) > 32'767!
' z(i) = Hex(y(i))
' Da bei VBA das Integerformat nur bis + 32767 reicht, muss durch einen Umweg
' für den Dezimalcode (y) der Typ "Long" erzwungen werden.
Z(i) = Hex(AscW(x(i)))
Y(i) = Val("&H" & Z(i) & "&")
' Der Hexadezimale Unicode wird in der Regel vierstellig angegeben:
Select Case Len(Z(i))
48
Case Is = 3
Z(i) = "0" & Z(i)
Case Is = 2
Z(i) = "00" & Z(i)
Case Is = 1
Z(i) = "000" & Z(i)
End Select
' *************
' Fallunterscheidung:
' Steuerzeichen sollen im Ergebnis erklärt, aber nicht dargestellt werden:
If Y(i) <= 32 Then
Select Case Y(i)
Case 32
x(i) = """Leerzeichen"""
Case 31
x(i) = """Bedingter Trennstrich"""
Case 30
x(i) = """Geschützter Bindestrich"""
Case 13
x(i) = """Absatzzeichen"""
Case 11
x(i) = """manueller Zeilenumbruch"""
Case 12
x(i) = """Abschnittswechsel/Seitenumbruch"""
Case 14
x(i) = """Spaltenumbruch"""
Case 9
x(i) = """Tabulator"""
Case 1
x(i) = """Steuerzeichen für Bild oder Formeleditor-Objekt"""
Case 7
x(i) = """Tabellenfeld-Steuerzeichen"""
Case Else
x(i) = """Steuerzeichen"""
End Select
' Bei Windows-Sonderschriften gelten völlig andere Regeln:
ElseIf x(i) = "(" Or x(i) Like "[" & ChrW(61472) & "-" & ChrW(61695) & "]" Then
Rg(i).Select
With Dialogs(wdDialogInsertSymbol)
fs = .Font
Zeichennummer1 = .charNum
End With
'' If fs <> "(normaler Text)" And fs <> "" Then
'' If Zeichennummer1 < 0 Then
If fs <> "(normaler Text)" And fs <> "" _
Or Zeichennummer1 <> 40 And x(i) = "(" Then
' Or Zeichennummer1 < 0 And x(i) = "(" Then
Windowssonderschrift(i) = True
If fs = "(normaler Text)" Or fs = "" Then fs = "???"
f(i) = fs
If Zeichennummer1 < 0 Then
Y(i) = (Zeichennummer1 + 4096 + 61440)
x(i) = ChrW(Zeichennummer1 + 4096 + 61440)
Else
Y(i) = Zeichennummer1 + 61440
x(i) = ChrW(Zeichennummer1 + 61440)
End If
Z(i) = Hex(Y(i))
End If
'' rng0.Select ' führte zur Markierung der Originaldatei, 19.12.2014.
' Fehlerhafte Zuweisung einer Windows-Sonderschrift:
ElseIf f(i) = "Symbol" Or f(i) Like ("Wingding*") Or f(i) = "Webdings" Then
49
'
'
'
'
'
'
'
'
f(i) = f(i) & "???"
x(i) = "???"
' einige weitere nicht-Unicode-kompatible Sonderschriftarten:
ElseIf f(i) = "BSsymb9" Or f(i) = "BeuthPi2" Then
x(i) = "Sonderschriftzeichen"
End If
' ***
If f(i) <> f(0) Then f(0) = "unterschiedlich"
Next i
************************************
Alle Textmarken in der Markierung auflisten (25.11.2012).
Textmarkenliste = "Die Markierung enthält folgende Textmarken (""Bookmarks"")" & vbCrLf _
& "(der Text hinter dem Komma ist ggf. der Text der dazugehörigen Stelle):" & vbCrLf
If Selection.Bookmarks.Count > 0 Then
For Each TM In Selection.Bookmarks
Textmarkenliste = Textmarkenliste & " " & TM.Name & ", " & TM.Range.Text & vbCrLf
Next
Else
Textmarkenliste = "Die Markierung enthält keine Textmarken." & vbCrLf
End If
************************************
Zwischendatei "doc2" wieder schließen:
If Left(doc2.Name, 8) = "zzz_Temp" Then
' (Temp-Datei liegt vor)
doc2.Close SaveChanges:=wdDoNotSaveChanges
Kill zDatei
Else
doc2.Close SaveChanges:=wdDoNotSaveChanges
End If
Zu analysierende Datei wieder aktivieren:
doc1.Activate
Application.ScreenUpdating = True
**************************************************
Ergebniszusammenstellung für Messagebox:
**************************************************
Ergebnis2 = Shape_Meldung & Ergebnis1 & "Schriftart: " & f(0)
For j = 1 To N
If Y(j) > 55295 And Y(j) < 57344 Then
' Zeichen höherer Unicode-Ebene:
If N > j And Y(j) > 55295 And Y(j) < 56320 Then
If Y(j + 1) > 56319 And Y(j + 1) < 57344 Then
' Wenn ja, liegt Zeichen höherer Unicode-Ebene vor:
' Berechnung des Unicodes höherer Ebenen nach ISO 10646:2003, Anhang C:
Y(0) = ((Y(j) - 55296) * 1024) + (Y(j + 1) - 56320) + 65536
Z(0) = Hex(Y(0))
' z(0) ist der Unicode des gesuchten Zeichen höherer Unicode-Ebene.
Ergebnis2 = Ergebnis2 & "," & vbCrLf _
& "der Unicode des Zeichens höherer Ebene ist hexadezimal: " & Z(0) _
& " und dezimal: " & Y(0)
j=j+1
Else
Ergebnis2 = Ergebnis2 & ", " & vbCrLf & "der Unicode von " & x(j) _
& " ist hexadezimal: " & Z(j) & " und dezimal: " & Y(j) _
& vbCrLf & " (unvollständiges Surrogat)"
End If
Else
Ergebnis2 = Ergebnis2 & ", " & vbCrLf & "der Unicode von " & x(j) _
& " ist hexadezimal: " & Z(j) & " und dezimal: " & Y(j) _
& vbCrLf & " (unvollständiges Surrogat)"
End If
ElseIf Windowssonderschrift(j) = True Then
' Windows-Sonderzeichen:
50
'
'
'
'
'
'
'
''
''
''
'
'
'
'
Ergebnis2 = Ergebnis2 & ", " & vbCrLf & "der Code von " & x(j) _
& " ist hexadezimal: " & Hex(Y(j) - 61440) & "/" & Hex(Y(j)) & " und dezimal: " _
& ((Y(j) - 61440)) & "/" & Y(j) & ", Schriftart: " & f(j)
If f(j) = "Symbol" Then
Ergebnis2 = Ergebnis2 & "," & vbCrLf _
& " Bedeutung: " & Symbolname(Hex(Y(j) - 61440))
ElseIf f(j) = "Wingdings" Then
Ergebnis2 = Ergebnis2 & "," & vbCrLf _
& " Bedeutung: " & Wingdingsname(Hex(Y(j) - 61440))
End If
Else
' normales Unicode-Zeichen:
' Bei Dezimalcodes bis 255 wird bei Windows eine "0" davorgesetzt:
If Y(j) < 256 Then
Y(j) = "0" & Y(j)
End If
If Y(j) = 160 Then x(j) = """Festes Leerzeichen"""
Ergebnis2 = Ergebnis2 & ", " & vbCrLf & "der Unicode von " & x(j) _
& " ist hexadezimal: " & Z(j) & " und dezimal: " & Y(j)
End If
Next j
Ergebnis2 = Ergebnis2 & "."
******************************************************************
Nur wenn nicht mehr als 40 Zeichen, Ergebnis als Messagebox anzeigen,
ansonsten direkt in die Ausgabe als Datei ( geändert 6. Oktober 2012)
*****************************************************************
Beim Analyse-Ergebnis kann eine MessageBoxW maximal 44 Zeilen anzeigen
(eine normale MsgBox sogar nur 16 Zeilen).
Bei OMML-Formeln ist die Ausgabe als Datei günstiger:
If N < 40 Then
'' _ And Int_OMML = 0
' Ergebnisanzeige in Messagebox mit Abfrage, ob Ergebnis in separater Datei gewünscht:
MsgBoxAnzeige = Ergebnis2 & vbCrLf & vbCrLf _
& "Wollen Sie das Ergebnis ausführlicher in einer separaten Datei?"
IntAbfrage = MessageBoxW(0, StrPtr(MsgBoxAnzeige), StrPtr("Zeichenanalyse"), _
vbYesNoCancel + vbDefaultButton2)
' Alternative einfache Funktion, wenn keine Windows-Umgebung, leider ohne Unicode:
' IntAbfrage = MsgBox(MsgBoxAnzeige, vbYesNoCancel + vbDefaultButton2, "Zeichenanalyse")
' Bei "Ja" kommt "6" heraus, bei "Nein" kommt "7" heraus, bei Abbrechen eine "2".
'
If IntAbfrage <> 6 Then
' Speicher löschen und Programm beenden.
GoTo Zeile_Suchverzeichnis_löschen_und_beenden
End If
Else
MsgBox "Da insgesamt " & N & " Zeichen markiert sind, erfolgt das Ergebnis " _
& "in einer separaten Datei. Es passt nicht mehr in eine Messagbox."
End If
**********************************************************************
Wenn mehr als 40 Zeichen oder Abfrage = "ja" (IntAbfrage = 6),
ausführlichere Ergebnisanzeige in Extra-Datei:
*********************************************************************
Selection.Copy
' **********
' Zeitmessen für die Makro-Dauer
Dim Zeit1, Zeit2, Zeitdauer
Zeit1 = Timer
' ***********
' Zur Bestimmung des Unicode-Namens Datei mit der Unicode-Liste öffnen:
' Das Makro braucht zum Nachschlagen des Unicode-Zeichennamens
' im Internet unter "http://unicode.org/Public/UNIDATA/UnicodeData.txt"
' (zumindest beim ersten Mal) mindestens 6 Sekunden. Von daher ist es
51
' besser, diese Text-Datei (von Hand) vorher auf der Festplatte zu speichern.
' Dann beträgt die Dauer weniger als 1,2 Sekunden.
' Auf ein automatisches Speichern der Datei auf der Festplatte per Makro
' habe ich bewusst verzichtet.
' Daher habe ich eine Kompakt-Version erstellt, in welcher das Makro und die Text-Liste
' in einer einzigen Dokumentvorlage kombiniert sind, die ich zum Download in meiner
' Homepage unter "http://www.siebener-kurier.de/chris-aufsaetze" anbiete.
' ************
Application.StatusBar = "Bitte warten - das Makro läuft."
Application.ScreenUpdating = False
' ************************************
' Die ggf. gespeicherte Datei mit der Unicode-Liste suchen:
If InStr(ThisDocument.Name, "kompakt") > 0 Then
' Die Datei mit dem Makro ist die "kompakte" Datei mit der vollständigen Unicode-Liste.
''Unicodeliste1 = ThisDocument.FullName
' Es wird hier daraus eine neue Datei erzeugt, weil Word 2010 das Öffnen der Dot-Datei
' mit Makros per VBA gelegentlich verweigerte (Schutzeinstellung).
' Die neu-erzeugte Datei enthält keine Makros, aber die vollständige Unicode-Liste.
Set DokListe = _
Documents.Add(Template:=ThisDocument.FullName, NewTemplate:=False, DocumentType:=0)
Else
' alternativ die Original-Textdatei suchen:
If Dir(Options.DefaultFilePath(wdUserTemplatesPath) & "\UnicodeData.txt") <> "" Then
Unicodeliste1 = Options.DefaultFilePath(wdUserTemplatesPath) & "\UnicodeData.txt"
ElseIf Dir(Options.DefaultFilePath(wdStartupPath) & "\UnicodeData.txt") <> "" Then
Unicodeliste1 = Options.DefaultFilePath(wdStartupPath) & "\UnicodeData.txt"
Else
' Nicht auf der Festplatte, deshalb im Internet nachsehen:
On Error GoTo Zeile_Internetzugang_fehlt
Unicodeliste1 = "http://unicode.org/Public/UNIDATA/UnicodeData.txt"
End If
' *******************************
' Unicodeliste1 öffnen:
Set DokListe = Documents.Open(FileName:=Unicodeliste1, _
ConfirmConversions:=False, ReadOnly:=True, AddToRecentFiles:=False, _
PasswordDocument:="", PasswordTemplate:="", Revert:=False, _
WritePasswordDocument:="", WritePasswordTemplate:="", _
Format:=wdOpenFormatAuto, Encoding:=1252)
End If
On Error GoTo 0
' Zum Beschleunigung beim Suchen in der Datei "Unicodeliste1":
ActiveWindow.View.Type = wdNormalView
' *************************************************************
' Ausführlichere Ergebniszusammenstellung für Ausgabe in Datei:
' *************************************************************
Ergebnis2 = Shape_Meldung & Ergebnis1
For j = 1 To N
If Y(j) > 55295 And Y(j) < 57344 Then
' Zeichen höherer Unicode-Ebene
If N > j And Y(j) > 55295 And Y(j) < 56320 Then
If Y(j + 1) > 56319 And Y(j + 1) < 57344 Then
' Wenn ja, liegt Zeichen höherer Unicode-Ebene vor:
' Berechnung des Unicodes höherer Ebenen nach ISO 10646:2003, Anhang C:
Y(0) = ((Y(j) - 55296) * 1024) + (Y(j + 1) - 56320) + 65536
Z(0) = Hex(Y(0))
' z(0) ist der Unicode des gesuchten Zeichen höherer Unicode-Ebene.
x(j) = x(j) & x(j + 1)
Ergebnis2 = Ergebnis2 _
& "Der Unicode des Zeichens höherer Ebene x(" & j _
& ") ist hexadezimal: " & Z(0) & " und dezimal: " & Y(0) & "," & Chr(11) _
& "(der Unicode des Surrogat 1 ist hexadezimal: " & Z(j) _
& " und dezimal: " & Y(j) & ", " & Chr(11) _
52
& "der Unicode des Surrogat 2 ist hexadezimal: " & Z(j + 1) _
& " und dezimal: " & Y(j + 1) & "), " & Chr(11) _
& EnglischName(Z(0)) & ", " & Chr(11) _
& "die Schriftart ist " & f(j) & ". " & vbCrLf
j=j+1
Else
Ergebnis2 = Ergebnis2 & "der Unicode von x(" & j _
& ") ist hexadezimal: " & Z(j) & " und dezimal: " & Y(j) _
& Chr(11) & "(unvollständiges Surrogat)" & ". " & vbCrLf
End If
Else
Ergebnis2 = Ergebnis2 & "Der Unicode von x(" & j _
& ") ist hexadezimal: " & Z(j) & " und dezimal: " & Y(j) _
& Chr(11) & "(unvollständiges Surrogat)" & ". " & vbCrLf
End If
ElseIf Windowssonderschrift(j) = True Then
' Windowssonderschriftzeichen:
Ergebnis2 = Ergebnis2 & "Der Code von x(" & j _
& ") ist hexadezimal: " & Hex(Y(j) - 61440) & "/" & Hex(Y(j)) & " und dezimal: " _
& ((Y(j) - 61440)) & "/" & Y(j) & ", Schriftart: " & f(j)
'
If f(j) = "Symbol" Then
If f(j) = "Symbol" Or f(j) = "SymbolPS" Then
Ergebnis2 = Ergebnis2 & "," & vbCrLf _
& " Bedeutung: " & Symbolname(Hex(Y(j) - 61440)) & ". " & vbCrLf
ElseIf f(j) = "Wingdings" Then
' (im März 2011 neu ergänzt)
Ergebnis2 = Ergebnis2 & "," & vbCrLf _
& " Bedeutung: " & Wingdingsname(Hex(Y(j) - 61440)) & ". " & vbCrLf
ElseIf f(j) = "???" Then
' am Wahrscheinlichsten ist "Symbol":
Ergebnis2 = Ergebnis2 & "," & vbCrLf _
& " Falls die Schriftart 'Symbol' sein sollte, ist die Bedeutung: " _
& Symbolname(Hex(Y(j) - 61440)) & ". " & vbCrLf
Else
Ergebnis2 = Ergebnis2 & ". " & vbCrLf
End If
ElseIf f(j) = "BSsymb9" Or f(j) = "BeuthPi2" Then
' Sonderschrift-Zeichen (hier eventuell weitere Sonderschriftarten aufnehmen):
Ergebnis2 = Ergebnis2 & "Der Code des Sonderzeichens " _
& "ist hexadezimal: " & Z(j) & " und dezimal: " & Y(j) & ", " _
& "Schriftart:" & Chr(160) & f(j) & ". " & vbCrLf
ElseIf Y(j) < 32 Then
' Steuerzeichen (ohne englischen Zeichennamen und ohne Schriftart):
Ergebnis2 = Ergebnis2 & "Der Unicode von x(" & j _
& ") ist hexadezimal: " & Z(j) & " und dezimal: " & Y(j) & ". " & vbCrLf
Else
' normales Unicode-Zeichen:
Ergebnis2 = Ergebnis2 & "Der Unicode von x(" & j _
& ") ist hexadezimal: " & Z(j) & " und dezimal: " & Y(j) & ", " _
& "Schriftart:" & Chr(160) & f(j) & ", " & EnglischName(Z(j)) & ". " & vbCrLf
End If
Next j
' ****************************************
' Unicode-Liste schließen, wenn sie nicht das zu untersuchende Dokument ist:
If ActiveDocument <> doc1 Then
DokListe.Close SaveChanges:=False
Else
ActiveWindow.ActivePane.View.Type = wdPrintView
End If
' ****************************************
' Anzeige in separater Datei:
' ****************************************
Documents.Add DocumentType:=wdNewBlankDocument
53
''
''
''
''
''
''
''
''
''
''
''
''
ActiveWindow.View.Type = wdPrintView
' Falls in der Normal.dot schon ein Briefkopf ist mit Name und Datum,
' soll dieser ersetzt werden:
Selection.WholeStory
' Absatzabstand auf Null stellen:
With Selection.ParagraphFormat
.Alignment = wdAlignParagraphLeft
.LeftIndent = CentimetersToPoints(0.5)
.FirstLineIndent = CentimetersToPoints(-0.5)
.SpaceBefore = 0
.SpaceAfter = 0
.SpaceAfterAuto = False
.Alignment = wdAlignParagraphLeft
End With
Selection.Font.Size = 11
'
If Val(Y(1)) < 30 And N < 3 Then
Selection.TypeText Text:="Das markierte Zeichen bzw. die Zeichenfolge setzt sich " _
& "wie folgt zusammen:" & vbCrLf
Selection.TypeText Text:=Ergebnis2
Else
Selection.TypeText Text:="Das markierte Zeichen bzw. die Zeichenfolge "
' Das Zeichen muss mitsamt seiner Schriftart eingefügt werden.
' Und danach muss wieder die Ausgangsschrift usw. wiederhergestellt werden.
' Dies gelang mir über den Umweg des nachträglichen Einfügens:
Set rng1 = Selection.Range
Selection.TypeText Text:=vbCrLf & "besteht aus folgenden analysierbaren Zeichen:" _
& vbCrLf & vbCrLf
Selection.TypeText Text:=Ergebnis2
Set Rng2 = Selection.Range
rng1.Select
'
' Zu untersuchenden Text in einer neuen Zeile angeben:
Selection.TypeParagraph
Selection.Paste ' Hier den zu analysierenden Text einfügen.
'
rng1.SetRange Start:=rng1.Start, End:=Selection.End
rng1.Select
Selection.Range.HighlightColorIndex = wdYellow
' *********
' Alle Textmarken in der Markierung auflisten (25.11.2012).
Textmarkenliste = "Die Markierung enthält folgende Textmarken (""Bookmarks"")" & vbCrLf _
& "(der Text hinter dem Komma ist ggf. die zugehörige Stelle):" & vbCrLf
If Selection.Bookmarks.Count > 0 Then
For Each TM In Selection.Bookmarks
Textmarkenliste = Textmarkenliste & " " & TM.Name & ", " & TM.Range.Text & vbCrLf
Next
Else
Textmarkenliste = "Die Markierung enthält keine Textmarken." & vbCrLf
End If
' *********
' Bei Seitenumbrüchen oder Spaltenumbrüchen auf "Normalansicht" umschalten (5.10.2012):
If InStr(Selection, ChrW(12)) > 0 Or InStr(Selection, ChrW(14)) > 0 Then
ActiveWindow.View.Type = wdNormalView
End If
' *********
' Wenn in "Ergebnis" Hyperlinks, diese aktivieren:
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
With Selection.Find
.Text = "http://www.unicode.org/charts/PDF/U*.pdf"
.Replacement.Text = ""
54
.Forward = True
' .Wrap = wdFindContinue (führt zu Endlosschleife!)
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
Do While .Execute
ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, _
Address:=Selection.Range.Text, _
SubAddress:="", ScreenTip:="", TextToDisplay:=Rng2.Text
Selection.Collapse Direction:=wdCollapseEnd
Loop
End With
Selection.EndKey Unit:=wdStory
End If
' **************************
' Die Original-Zeichen sollen in der Auswertung mitsamt ihrer Schriftart dargestellt und gelb
' markiert werden, außer wenn sie bereits durch eine Beschreibung ersetzt worden sind:
For j = 1 To N
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "x(" & j & ")"
.Forward = True
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
Do While .Execute
If Len(x(j)) < 3 Then
Selection.Font.Name = f(j)
Selection.Range.HighlightColorIndex = wdYellow
Selection.Font.Bold = True
Selection.TypeText Text:=x(j)
Else
Selection.Font.Name = "Times New Roman"
Selection.Range.HighlightColorIndex = wdYellow
Selection.Font.Bold = True
Selection.Text = x(j)
End If
Loop
End With
Next j
' *************************
Selection.EndKey Unit:=wdStory
Selection.TypeParagraph
'
Selection.TypeText Text:= _
"Die englischen Namen aller Unicode-Schriftzeichen sind in ISO/IEC 10646 genormt " _
& " und weitgehend in "
ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, _
Address:="http://unicode.org/Public/UNIDATA/UnicodeData.txt", SubAddress:="", _
ScreenTip:="", TextToDisplay:="http://unicode.org/Public/UNIDATA/UnicodeData.txt"
Selection.TypeText Text:=Chr(11) & "oder über "
ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, _
Address:="http://www.unicode.org/charts", SubAddress:="", _
ScreenTip:="", TextToDisplay:="http://www.unicode.org/charts"
55
'
'
'
'
''
''
''
'
'
'
'
Selection.TypeText Text:=" zu finden."
Selection.TypeParagraph
' Ergänzung 03.04.2011
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "Times New Roman"
.Replacement.Text = "Times^sNew^sRoman"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
' Ergänzung 4.10.2012
Options.DefaultHighlightColorIndex = wdRed
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Highlight = True
With Selection.Find
.Text = "???"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Options.DefaultHighlightColorIndex = wdYellow
***********************
Am Schluss die Textmarken auflisten:
Selection.EndKey Unit:=wdStory
Selection.TypeParagraph
Selection.TypeText Text:=Textmarkenliste
**********************
Formeln von Word 2010 mit OMML erwähnen:
If Int_OMML > 0 Then
Selection.EndKey Unit:=wdStory
Selection.TypeParagraph
Selection.TypeText _
Text:="Die Markierung enthält " & Int_OMML & " 'OMML'-Formeln bzw. Formelzeichen."
Selection.EndKey Unit:=wdStory
Selection.TypeParagraph
Selection.TypeText Text:="Quelltext: "
Selection.PasteSpecial DataType:=wdPasteText
Selection.TypeParagraph
End If
************************
Call Ueberschriften_fett
************************
Bildschirm wieder anstellen:
Application.ScreenUpdating = True
***************************************************
56
' Zeitmessen für die Makro-Dauer auf drei Stellen hinter dem Komma
Zeit2 = Timer
Zeitdauer = Format((Zeit2 - Zeit1), "##,##0.0")
Selection.TypeParagraph
Selection.TypeText Text:="Die Rechenzeit war " & Zeitdauer & " Sekunden."
Selection.HomeKey Unit:=wdStory ' An den Anfang des Ergebnisses gehen.
' ***************************************************
' Zwischenspeicher aufräumen und alles zurückstellen:
Zeile_Suchverzeichnis_löschen_und_beenden:
' ***************************************************
' Im Suchen/Ersetzen-Menü alles zurückstellen
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
' Ansicht zurückstellen:
If Unsichtbares_zeigen = True Then
ActiveWindow.View.ShowAll = False
End If
' Automakros wieder ermöglichen:
WordBasic.DisableAutoMacros 0 ' Enables auto macros
Exit Sub
' ****************************************************
' ****************************************************
Zeile_Abbruch_weil_kein_Schriftzeichen:
' 12. August 2015 + 2. November 2015.
' Abbrechen,da keine analysierbaren Zeichen vorhanden sind,
' dazu Zwischendatei "doc2" wieder schließen:
If Left(doc2.Name, 8) = "zzz_Temp" Then
' (Temp-Datei liegt vor)
doc2.Close SaveChanges:=wdDoNotSaveChanges
Kill zDatei
Else
doc2.Close SaveChanges:=wdDoNotSaveChanges
End If
' Zu analysierende Datei wieder aktivieren:
doc1.Activate
Application.ScreenUpdating = True
' ******
MsgBox "Die Markierung enthält nur Elemente, die keine Schriftzeichen sind." _
& vbCrLf & "Bitte ändern Sie zur Schriftzeichen-Analyse den Umfang der Markierung!"
Exit Sub
'' Resume ' (nur für Testzwecke)
Exit Sub
' ***************************************************
Zeile_Internetzugang_fehlt:
MsgBox "Bitte aus dem Internet die Datei " _
& """http://unicode.org/Public/UNIDATA/UnicodeData.txt""" _
& " auf der Festplatte " & vbCrLf & "unter """ & Pfad1 & """ speichern" _
& " oder wenigstens einen Internet-Zugang herstellen."
End Sub
' ---------------------------------------------------------------------------------------------------------
57
Private Sub Ueberschriften_fett()
' 28. März 2014.
' Ergebnis-Zwischenüberschriften fett machen:
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Font.Bold = True
With Selection.Find
.Text = "Feldcode-Ansicht:"
.Replacement.Text = ""
.Replacement.Font.Size = 12
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceOne
'
With Selection.Find
.Text = "Die Zeichenanalyse ergibt:"
.Replacement.Text = ""
.Replacement.Font.Size = 12
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceOne
'
With Selection.Find
.Text = "Die Markierung enthält folgende Textmarken"
.Replacement.Text = "Die Markierung enthält folgende Textmarken"
.Replacement.Font.Size = 12
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceOne
Selection.EndKey Unit:=wdStory
End Sub
' ---------------------------------------------------------------------------------------------------------
Private Function EnglischName(Z1 As String) As String
' Makro erstellt von Dipl.-Ing. Hanna-Chris Gast am 20. Juli 2010, Stand 3. November 2010.
' Diese Funktion sucht aus der bereits downgeloadeten und geöffneten Unicode-Liste
'
http://unicode.org/Public/UNIDATA/UnicodeData.txt den englischen
'
Zeichennamen heraus.
58
Dim rng1, Rng2, y1
'
ActiveDocument.Range(0, 0).Select
'
Selection.Find.ClearFormatting
With Selection.Find
.Text = "^p" & Z1 & ";"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
'
If Selection.Find.Found = True Then
' Zeile ist gefunden, jetzt Resultat einlesen:
Selection.Collapse Direction:=wdCollapseEnd
Set rng1 = Selection.Range
' bis zum nächsten Semikolon suchen
Selection.Find.ClearFormatting
With Selection.Find
.Text = ";"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
Set Rng2 = Selection.Range
Rng2.SetRange Start:=rng1.Start, End:=Rng2.End - 1
Rng2.Select
' Gefundene Erklärung einlesen:
EnglischName = "der" & Chr(160) & "genormte" & Chr(160) & "englische" _
& Chr(160) & "Zeichenname" & Chr(160) & "ist:" & Chr(160) & Selection
Else
y1 = Val("&H" & Z1 & "&")
Select Case y1
Case Val(&H3400&) To Val(&H4DBF&)
EnglischName = "das" & Chr(160) & "Zeichen gehört zu ""CJK Ideograph Extension A""," _
& Chr(11) & "siehe http://www.unicode.org/charts/PDF/U3400.pdf"
Case Val(&H4E00&) To Val(&H9FCB&)
EnglischName = "das" & Chr(160) & "Zeichen ist ein ""CJK-Ideograph""," & Chr(11) _
& "siehe http://www.unicode.org/charts/PDF/U4E00.pdf"
Case Val(&HAC00&) To Val(&HD7AF&)
EnglischName = "das" & Chr(160) & "Zeichen ist eine ""Hangul Syllable"", " & Chr(11) _
& "siehe http://www.unicode.org/charts/PDF/UAC00.pdf"
Case 57344 To 63743
EnglischName = "das" & Chr(160) & "Zeichen ist nicht genormt und gehört zur " _
& """Privat-Use-Area"""
Case Val(&H20000) To Val(&H2A6DF & "&")
EnglischName = "das" & Chr(160) & "Zeichen gehört zu ""CJK Ideograph Extension B""," _
& Chr(11) & "siehe http://www.unicode.org/charts/PDF/U20000.pdf"
59
Case Val(&H2A700) To Val(&H2B734 & "&")
EnglischName = "das" & Chr(160) & "Zeichen gehört zu ""CJK Ideograph Extension C""," _
& Chr(11) & "siehe http://www.unicode.org/charts/PDF/U2A700.pdf"
Case Else
EnglischName = "das" & Chr(160) & "Zeichen ist nicht in der " _
& "Unicode-Liste enthalten"
End Select
End If
End Function
' ---------------------------------------------------------------------------------------------------------
Private Function Symbolname(Z1 As String) As String
' Dipl.-Ing. Hanna-Chris Gast, 30. August 2010, 12. März 2011, Stand 25. September 2014.
' Diese Funktion gibt die (englischen) Unicode-Namen und entsprechende Unicodes an,
' wenn der (niedrige) hexadezimale Symbol-Code eingegeben wird
' Quellen "http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/SYMBOL.TXT" und andere
' Ein paar Fehler habe ich hierbei beseitigt, zum Beispiel: Kleines Phi und Phi-Symbol
' waren vertauscht, und in einigen Fällen habe ich Ergänzungen vorgenommen.
'
Select Case Z1
Case Is = "20"
Symbolname = "NO-BREAK SPACE (Unicode = hex. 00A0)"
Case Is = "21"
Symbolname = "EXCLAMATION MARK (Unicode = hex. 0021)"
Case Is = "22"
Symbolname = "FOR ALL (Unicode = hex. 2200)"
Case Is = "23"
Symbolname = "NUMBER SIGN (Unicode = hex. 0023)"
Case Is = "24"
Symbolname = "THERE EXISTS (Unicode = hex. 2203)"
Case Is = "25"
Symbolname = "PERCENT SIGN (Unicode = hex. 0025)"
Case Is = "26"
Symbolname = "AMPERSAND (Unicode = hex. 0026)"
Case Is = "27"
Symbolname = "CONTAINS AS MEMBER (Unicode = hex. 220B)"
Case Is = "28"
Symbolname = "LEFT PARENTHESIS (Unicode = hex. 0028)"
Case Is = "29"
Symbolname = "RIGHT PARENTHESIS (Unicode = hex. 0029)"
Case Is = "2A"
Symbolname = "ASTERISK OPERATOR (Unicode = hex. 2217)"
Case Is = "2B"
Symbolname = "PLUS SIGN (Unicode = hex. 002B)"
Case Is = "2C"
Symbolname = "COMMA (Unicode = hex. 002C)"
Case Is = "2D"
Symbolname = "MINUS SIGN (Unicode = hex. 2212)"
Case Is = "2E"
Symbolname = "FULL STOP (Unicode = hex. 002E)"
Case Is = "2F"
Symbolname = "SOLIDUS (Unicode = hex. 002F)"
Case Is = "30"
Symbolname = "DIGIT ZERO (Unicode = hex. 0030)"
Case Is = "31"
Symbolname = "DIGIT ONE (Unicode = hex. 0031)"
Case Is = "32"
Symbolname = "DIGIT TWO (Unicode = hex. 0032)"
Case Is = "33"
Symbolname = "DIGIT THREE (Unicode = hex. 0033)"
Case Is = "34"
60
Symbolname = "DIGIT FOUR (Unicode = hex. 0034)"
Case Is = "35"
Symbolname = "DIGIT FIVE (Unicode = hex. 0035)"
Case Is = "36"
Symbolname = "DIGIT SIX (Unicode = hex. 0036)"
Case Is = "37"
Symbolname = "DIGIT SEVEN (Unicode = hex. 0037)"
Case Is = "38"
Symbolname = "DIGIT EIGHT (Unicode = hex. 0038)"
Case Is = "39"
Symbolname = "DIGIT NINE (Unicode = hex. 0039)"
Case Is = "3A"
Symbolname = "COLON (Unicode = hex. 003A)"
Case Is = "3B"
Symbolname = "SEMICOLON (Unicode = hex. 003B)"
Case Is = "3C"
Symbolname = "LESS-THAN SIGN (Unicode = hex. 003C)"
Case Is = "3D"
Symbolname = "EQUALS SIGN (Unicode = hex. 003D)"
Case Is = "3E"
Symbolname = "GREATER-THAN SIGN (Unicode = hex. 003E)"
Case Is = "3F"
Symbolname = "QUESTION MARK (Unicode = hex. 003F)"
Case Is = "40"
Symbolname = "APPROXIMATELY EQUAL TO (Unicode = hex. 2245)"
Case Is = "41"
Symbolname = "GREEK CAPITAL LETTER ALPHA (Unicode = hex. 0391)"
Case Is = "42"
Symbolname = "GREEK CAPITAL LETTER BETA (Unicode = hex. 0392)"
Case Is = "43"
Symbolname = "GREEK CAPITAL LETTER CHI (Unicode = hex. 03A7)"
Case Is = "44"
Symbolname = "INCREMENT (Unicode = hex. 2206)" _
& vbCrLf & " oder GREEK CAPITAL LETTER DELTA (Unicode = hex. 0394)"
Case Is = "45"
Symbolname = "GREEK CAPITAL LETTER EPSILON (Unicode = hex. 0395)"
Case Is = "46"
Symbolname = "GREEK CAPITAL LETTER PHI (Unicode = hex. 03A6)"
Case Is = "47"
Symbolname = "GREEK CAPITAL LETTER GAMMA (Unicode = hex. 0393)"
Case Is = "48"
Symbolname = "GREEK CAPITAL LETTER ETA (Unicode = hex. 0397)"
Case Is = "49"
Symbolname = "GREEK CAPITAL LETTER IOTA (Unicode = hex. 0399)"
Case Is = "4A"
Symbolname = "GREEK THETA SYMBOL (Unicode = hex. 03D1)"
Case Is = "4B"
Symbolname = "GREEK CAPITAL LETTER KAPPA (Unicode = hex. 039A)"
Case Is = "4C"
Symbolname = "GREEK CAPITAL LETTER LAMDA (Unicode = hex. 039B)"
Case Is = "4D"
Symbolname = "GREEK CAPITAL LETTER MU (Unicode = hex. 039C)"
Case Is = "4E"
Symbolname = "GREEK CAPITAL LETTER NU (Unicode = hex. 039D)"
Case Is = "4F"
Symbolname = "GREEK CAPITAL LETTER OMICRON (Unicode = hex. 039F)"
Case Is = "50"
Symbolname = "GREEK CAPITAL LETTER PI (Unicode = hex. 03A0)"
Case Is = "51"
Symbolname = "GREEK CAPITAL LETTER THETA (Unicode = hex. 0398)"
Case Is = "52"
Symbolname = "GREEK CAPITAL LETTER RHO (Unicode = hex. 03A1)"
61
Case Is = "53"
Symbolname = "GREEK CAPITAL LETTER SIGMA (Unicode = hex. 03A3)"
Case Is = "54"
Symbolname = "GREEK CAPITAL LETTER TAU (Unicode = hex. 03A4)"
Case Is = "55"
Symbolname = "GREEK CAPITAL LETTER UPSILON (Unicode = hex. 03A5)"
Case Is = "56"
Symbolname = "GREEK SMALL LETTER FINAL SIGMA (Unicode = hex. 03C2)"
Case Is = "57"
Symbolname = "OHM SIGN (Unicode = hex. 2126)" _
& vbCrLf & " oder GREEK CAPITAL LETTER OMEGA (Unicode = hex. 03A9)"
Case Is = "58"
Symbolname = "GREEK CAPITAL LETTER XI (Unicode = hex. 039E)"
Case Is = "59"
Symbolname = "GREEK CAPITAL LETTER PSI (Unicode = hex. 03A8)"
Case Is = "5A"
Symbolname = "GREEK CAPITAL LETTER ZETA (Unicode = hex. 0396)"
Case Is = "5B"
Symbolname = "LEFT SQUARE BRACKET (Unicode = hex. 005B)"
Case Is = "5C"
Symbolname = "THEREFORE (Unicode = hex. 2234)"
Case Is = "5D"
Symbolname = "RIGHT SQUARE BRACKET (Unicode = hex. 005D)"
Case Is = "5E"
Symbolname = "UP TACK (Unicode = hex. 22A5)"
Case Is = "5F"
Symbolname = "LOW LINE (Unicode = hex. 005F)"
Case Is = "60"
Symbolname = "RADICAL EXTENDER" & vbCrLf _
& " (kein Unicode-Zeichen dafür vorhanden)," & vbCrLf _
& " Ersatz-Vorschlag: MACRON (Unicode = hex. 00AF)" & vbCrLf _
& " oder COMBINING OVERLINE (Unicode = hex. 0305)"
Case Is = "61"
Symbolname = "GREEK SMALL LETTER ALPHA (Unicode = hex. 03B1)"
Case Is = "62"
Symbolname = "GREEK SMALL LETTER BETA (Unicode = hex. 03B2)"
Case Is = "63"
Symbolname = "GREEK SMALL LETTER CHI (Unicode = hex. 03C7)"
Case Is = "64"
Symbolname = "GREEK SMALL LETTER DELTA (Unicode = hex. 03B4)"
Case Is = "65"
Symbolname = "GREEK SMALL LETTER EPSILON (Unicode = hex. 03B5)"
Case Is = "66"
Symbolname = "GREEK PHI SYMBOL (Unicode = hex. 03D5)"
'
(gegenüber Originallisten korrigiert)
Case Is = "67"
Symbolname = "GREEK SMALL LETTER GAMMA (Unicode = hex. 03B3)"
Case Is = "68"
Symbolname = "GREEK SMALL LETTER ETA (Unicode = hex. 03B7)"
Case Is = "69"
Symbolname = "GREEK SMALL LETTER IOTA (Unicode = hex. 03B9)"
Case Is = "6A"
Symbolname = "GREEK SMALL LETTER PHI (Unicode = hex. 03C6)"
'
(gegenüber Originallisten korrigiert)
Case Is = "6B"
Symbolname = "GREEK SMALL LETTER KAPPA (Unicode = hex. 03BA)"
Case Is = "6C"
Symbolname = "GREEK SMALL LETTER LAMDA (Unicode = hex. 03BB)"
Case Is = "6D"
Symbolname = "MICRO SIGN (Unicode = hex. 00B5)" _
& vbCrLf & " oder GREEK SMALL LETTER MU (Unicode = hex. 03BC)"
Case Is = "6E"
62
Symbolname = "GREEK SMALL LETTER NU (Unicode = hex. 03BD)"
Case Is = "6F"
Symbolname = "GREEK SMALL LETTER OMICRON (Unicode = hex. 03BF)"
Case Is = "70"
Symbolname = "GREEK SMALL LETTER PI (Unicode = hex. 03C0)"
Case Is = "71"
Symbolname = "GREEK SMALL LETTER THETA (Unicode = hex. 03B8)"
Case Is = "72"
Symbolname = "GREEK SMALL LETTER RHO (Unicode = hex. 03C1)"
Case Is = "73"
Symbolname = "GREEK SMALL LETTER SIGMA (Unicode = hex. 03C3)"
Case Is = "74"
Symbolname = "GREEK SMALL LETTER TAU (Unicode = hex. 03C4)"
Case Is = "75"
Symbolname = "GREEK SMALL LETTER UPSILON (Unicode = hex. 03C5)"
Case Is = "76"
Symbolname = "GREEK PI SYMBOL (Unicode = hex. 03D6)"
Case Is = "77"
Symbolname = "GREEK SMALL LETTER OMEGA (Unicode = hex. 03C9)"
Case Is = "78"
Symbolname = "GREEK SMALL LETTER XI (Unicode = hex. 03BE)"
Case Is = "79"
Symbolname = "GREEK SMALL LETTER PSI (Unicode = hex. 03C8)"
Case Is = "7A"
Symbolname = "GREEK SMALL LETTER ZETA (Unicode = hex. 03B6)"
Case Is = "7B"
Symbolname = "LEFT CURLY BRACKET (Unicode = hex. 007B)"
Case Is = "7C"
Symbolname = "VERTICAL LINE (Unicode = hex. 007C)"
Case Is = "7D"
Symbolname = "RIGHT CURLY BRACKET (Unicode = hex. 007D)"
Case Is = "7E"
Symbolname = "TILDE OPERATOR (Unicode = hex. 223C)"
Case Is = "A0"
Symbolname = "EURO SIGN (bzw. nicht definiert)(Unicode = hex. 20AC)"
Case Is = "A1"
Symbolname = "GREEK UPSILON WITH HOOK SYMBOL (Unicode = hex. 03D2)"
Case Is = "A2"
Symbolname = "PRIME (Unicode = hex. 2032)"
Case Is = "A3"
Symbolname = "LESS-THAN OR EQUAL TO (Unicode = hex. 2264)"
Case Is = "A4"
Symbolname = "FRACTION SLASH (Unicode = hex. 2044)"
Case Is = "A5"
Symbolname = "INFINITY (Unicode = hex. 221E)"
Case Is = "A6"
Symbolname = "LATIN SMALL LETTER F WITH HOOK (Unicode = hex. 0192)"
Case Is = "A7"
Symbolname = "BLACK CLUB SUIT (Unicode = hex. 2663)"
Case Is = "A8"
Symbolname = "BLACK DIAMOND SUIT (Unicode = hex. 2666)"
Case Is = "A9"
Symbolname = "BLACK HEART SUIT (Unicode = hex. 2665)"
Case Is = "AA"
Symbolname = "BLACK SPADE SUIT (Unicode = hex. 2660)"
Case Is = "AB"
Symbolname = "LEFT RIGHT ARROW (Unicode = hex. 2194)"
Case Is = "AC"
Symbolname = "LEFTWARDS ARROW (Unicode = hex. 2190)"
Case Is = "AD"
Symbolname = "UPWARDS ARROW (Unicode = hex. 2191)"
Case Is = "AE"
63
Symbolname = "RIGHTWARDS ARROW (Unicode = hex. 2192)"
Case Is = "AF"
Symbolname = "DOWNWARDS ARROW (Unicode = hex. 2193)"
Case Is = "B0"
Symbolname = "DEGREE SIGN (Unicode = hex. 00B0)"
Case Is = "B1"
Symbolname = "PLUS-MINUS SIGN (Unicode = hex. 00B1)"
Case Is = "B2"
Symbolname = "DOUBLE PRIME (Unicode = hex. 2033)"
Case Is = "B3"
Symbolname = "GREATER-THAN OR EQUAL TO (Unicode = hex. 2265)"
Case Is = "B4"
Symbolname = "MULTIPLICATION SIGN (Unicode = hex. 00D7)"
Case Is = "B5"
Symbolname = "PROPORTIONAL TO (Unicode = hex. 221D)"
Case Is = "B6"
Symbolname = "PARTIAL DIFFERENTIAL (Unicode = hex. 2202)"
Case Is = "B7"
Symbolname = "BULLET (Unicode = hex. 2022)"
Case Is = "B8"
Symbolname = "DIVISION SIGN (Unicode = hex. 00F7)"
Case Is = "B9"
Symbolname = "NOT EQUAL TO (Unicode = hex. 2260)"
Case Is = "BA"
Symbolname = "IDENTICAL TO (Unicode = hex. 2261)"
Case Is = "BB"
Symbolname = "ALMOST EQUAL TO (Unicode = hex. 2248)"
Case Is = "BC"
Symbolname = "HORIZONTAL ELLIPSIS (Unicode = hex. 2026)"
Case Is = "BD"
Symbolname = "VERTICAL LINE EXTENSION (for arrows) (Unicode = hex. 23D0)" _
& vbCrLf & " möglicher Ersatz: Senkrechter Strich (Unicode = hex. 007C)"
Case Is = "BE"
Symbolname = "HORIZONTAL ARROW EXTENDER (Unicode = hex. 23AF)," _
& vbCrLf & " möglicher Ersatz: Geviertstrich (Unicode = hex. 2014, EM DASH)"
Case Is = "BF"
Symbolname = "DOWNWARDS ARROW WITH CORNER LEFTWARDS " _
& "(Unicode = hex. 21B5)"
Case Is = "C0"
Symbolname = "ALEF SYMBOL (Unicode = hex. 2135)"
Case Is = "C1"
Symbolname = "BLACK-LETTER CAPITAL I (Unicode = hex. 2111)"
Case Is = "C2"
Symbolname = "BLACK-LETTER CAPITAL R (Unicode = hex. 211C)"
Case Is = "C3"
Symbolname = "SCRIPT CAPITAL P (Unicode = hex. 2118)"
Case Is = "C4"
Symbolname = "CIRCLED TIMES (Unicode = hex. 2297)"
Case Is = "C5"
Symbolname = "CIRCLED PLUS (Unicode = hex. 2295)"
Case Is = "C6"
Symbolname = "EMPTY SET (Unicode = hex. 2205)," _
& vbCrLf & " meistens aber ""Durchmesser"" (Unicode = hex. 2300)"
Case Is = "C7"
Symbolname = "INTERSECTION (Unicode = hex. 2229)"
Case Is = "C8"
Symbolname = "UNION (Unicode = hex. 222A)"
Case Is = "C9"
Symbolname = "SUPERSET OF (Unicode = hex. 2283)"
Case Is = "CA"
Symbolname = "SUPERSET OF OR EQUAL TO (Unicode = hex. 2287)"
Case Is = "CB"
64
Symbolname = "NOT A SUBSET OF (Unicode = hex. 2284)"
Case Is = "CC"
Symbolname = "SUBSET OF (Unicode = hex. 2282)"
Case Is = "CD"
Symbolname = "SUBSET OF OR EQUAL TO (Unicode = hex. 2286)"
Case Is = "CE"
Symbolname = "ELEMENT OF (Unicode = hex. 2208)"
Case Is = "CF"
Symbolname = "NOT AN ELEMENT OF (Unicode = hex. 2209)"
Case Is = "D0"
Symbolname = "ANGLE (Unicode = hex. 2220)"
Case Is = "D1"
Symbolname = "NABLA (Unicode = hex. 2207)"
Case Is = "D2"
Symbolname = "REGISTERED SIGN (Unicode = hex. 00AE) mit Serifen"
Case Is = "D3"
Symbolname = "COPYRIGHT SIGN (Unicode = hex. 00A9) mit Serifen"
Case Is = "D4"
Symbolname = "TRADE MARK SIGN (Unicode = hex. 2122) mit Serifen"
Case Is = "D5"
Symbolname = "N-ARY PRODUCT (Unicode = hex. 220F)"
Case Is = "D6"
Symbolname = "SQUARE ROOT (Unicode = hex. 221A)"
Case Is = "D7"
Symbolname = "DOT OPERATOR (Unicode = hex. 22C5)"
Case Is = "D8"
Symbolname = "NOT SIGN (Unicode = hex. 00AC)"
Case Is = "D9"
Symbolname = "LOGICAL AND (Unicode = hex. 2227)"
Case Is = "DA"
Symbolname = "LOGICAL OR (Unicode = hex. 2228)"
Case Is = "DB"
Symbolname = "LEFT RIGHT DOUBLE ARROW (Unicode = hex. 21D4)"
Case Is = "DC"
Symbolname = "LEFTWARDS DOUBLE ARROW (Unicode = hex. 21D0)"
Case Is = "DD"
Symbolname = "UPWARDS DOUBLE ARROW (Unicode = hex. 21D1)"
Case Is = "DE"
Symbolname = "RIGHTWARDS DOUBLE ARROW (Unicode = hex. 21D2)"
Case Is = "DF"
Symbolname = "DOWNWARDS DOUBLE ARROW (Unicode = hex. 21D3)"
Case Is = "E0"
Symbolname = "LOZENGE (Unicode = hex. 25CA)"
Case Is = "E1"
Symbolname = "LEFT-POINTING ANGLE BRACKET (Unicode = hex. 2329)"
Case Is = "E2"
Symbolname = "REGISTERED SIGN, (Unicode = hex. 00AE) Sans Serif"
Case Is = "E3"
Symbolname = "COPYRIGHT SIGN, (Unicode = hex. 00A9) Sans Serif"
Case Is = "E4"
Symbolname = "TRADE MARK SIGN, (Unicode = hex. 2122) Sans Serif"
Case Is = "E5"
Symbolname = "N-ARY SUMMATION (Unicode = hex. 2211)"
Case Is = "E6"
Symbolname = "LEFT PARENTHESIS UPPER HOOK (Unicode = hex. 239B)"
Case Is = "E7"
Symbolname = "LEFT PARENTHESIS EXTENSION (Unicode = hex. 239C)"
Case Is = "E8"
Symbolname = "LEFT PARENTHESIS LOWER HOOK (Unicode = hex. 239D)"
Case Is = "E9"
Symbolname = "LEFT SQUARE BRACKET UPPER CORNER (Unicode = hex. 23A1)"
Case Is = "EA"
65
Symbolname = "LEFT SQUARE BRACKET EXTENSION (Unicode = hex. 23A2)"
Case Is = "EB"
Symbolname = "LEFT SQUARE BRACKET LOWER CORNER (Unicode = hex. 23A3)"
Case Is = "EC"
Symbolname = "LEFT CURLY BRACKET UPPER HOOK (Unicode = hex. 23A7)"
Case Is = "ED"
Symbolname = "LEFT CURLY BRACKET MIDDLE PIECE (Unicode = hex. 23A8)"
Case Is = "EE"
Symbolname = "LEFT CURLY BRACKET LOWER HOOK (Unicode = hex. 23A9)"
Case Is = "EF"
Symbolname = "CURLY BRACKET EXTENSION (Unicode = hex. 23AA)"
Case Is = "F0"
Symbolname = "(nicht definiert, bzw. Apple-Logo)"
Case Is = "F1"
Symbolname = "RIGHT-POINTING ANGLE BRACKET (Unicode = hex. 232A)"
Case Is = "F2"
Symbolname = "INTEGRAL (Unicode = hex. 222B)"
Case Is = "F3"
Symbolname = "TOP HALF INTEGRAL (Unicode = hex. 2320)"
Case Is = "F4"
Symbolname = "INTEGRAL EXTENSION (Unicode = hex. 23AE)"
Case Is = "F5"
Symbolname = "BOTTOM HALF INTEGRAL (Unicode = hex. 2321)"
Case Is = "F6"
Symbolname = "RIGHT PARENTHESIS UPPER HOOK (Unicode = hex. 239E)"
Case Is = "F7"
Symbolname = "RIGHT PARENTHESIS EXTENSION (Unicode = hex. 239F)"
Case Is = "F8"
Symbolname = "RIGHT PARENTHESIS LOWER HOOK (Unicode = hex. 23A0)"
Case Is = "F9"
Symbolname = "RIGHT SQUARE BRACKET UPPER CORNER (Unicode = hex. 23A4)"
Case Is = "FA"
Symbolname = "RIGHT SQUARE BRACKET EXTENSION (Unicode = hex. 23A5)"
Case Is = "FB"
Symbolname = "RIGHT SQUARE BRACKET LOWER CORNER (Unicode = hex. 23A6)"
Case Is = "FC"
Symbolname = "RIGHT CURLY BRACKET UPPER HOOK (Unicode = hex. 23AB)"
Case Is = "FD"
Symbolname = "RIGHT CURLY BRACKET MIDDLE PIECE (Unicode = hex. 23AC)"
Case Is = "FE"
Symbolname = "RIGHT CURLY BRACKET LOWER HOOK (Unicode = hex. 23AD)"
Case Else
Symbolname = "(kein Symbol-Zeichen festgelegt!)"
End Select
End Function
' ---------------------------------------------------------------------------------------------------------
Private Function Wingdingsname(Z1 As String) As String
' Erstellt von Dipl.-Ing. Hanna-Chris Gast, 5. März 2011, 12. Oktober 2011, 19. Dezember 2014.
' Diese Funktion gibt englische Zeichenerklärung und teilweise auch entsprechende Unicodes an,
' wenn der (niedrige) hexadezimale Code eingegeben wird.
' Quelle (modifiziert): http://www.alanwood.net/demos/wingdings.html.
'
' Inzwischen (19. 12.2014) gibt es zu weiteren Wingdingszeichen entsprechende Unicode-Zeichen,
' die hier noch nicht erwähnt sind, sie sind aber in dem Makro für die Ersetzung von
' Symbol- und Wingdingszeichen im Makromodul "Symbol_Wingdings_in_Unicode" erfasst.
'
Select Case Z1
Case Is = "20"
Wingdingsname = "SPACE (Unicode = hex. 0020)"
Case Is = "20"
66
Wingdingsname = "SPACE (Unicode = hex. 0020)"
Case Is = "21"
Wingdingsname = "PENCIL (Unicode = hex. 270F)"
Case Is = "22"
Wingdingsname = "BLACK SCISSORS (Unicode = hex. 2702)"
Case Is = "23"
Wingdingsname = "UPPER BLADE SCISSORS (Unicode = hex. 2701)"
Case Is = "24"
Wingdingsname = "EYEGLASSES (Unicode = hex. 1F453)"
Case Is = "25"
Wingdingsname = "BELL (Unicode = hex. 1F514)"
Case Is = "26"
Wingdingsname = "OPEN BOOK (Unicode = hex. 1F4D6)"
Case Is = "27"
Wingdingsname = " (CANDLE)"
Case Is = "28"
Wingdingsname = "BLACK TELEPHONE (Unicode = hex. 260E)"
Case Is = "29"
Wingdingsname = "TELEPHONE LOCATION SIGN (Unicode = hex. 2706)"
Case Is = "2A"
Wingdingsname = "ENVELOPE (Unicode = hex. 2709)"
Case Is = "2B"
Wingdingsname = "ENVELOPE WITH ADDRESS AND STAMP"
Case Is = "2C"
Wingdingsname = "CLOSED MAILBOX WITH LOWERED FLAG (Unicode = hex. 1F4EA)"
Case Is = "2D"
Wingdingsname = "CLOSED MAILBOX WITH RAISED FLAG (Unicode = hex. 1F4EB)"
Case Is = "2E"
Wingdingsname = "OPEN MAILBOX WITH RAISED FLAG (Unicode = hex. 1F4EC)"
Case Is = "2F"
Wingdingsname = "OPEN MAILBOX WITH LOWERED FLAG (Unicode = hex. 1F4ED)"
Case Is = "30"
Wingdingsname = "FILE FOLDER (Unicode = hex. 1F4C1)"
Case Is = "31"
Wingdingsname = "OPEN FILE FOLDER (Unicode = hex. 1F4C2)"
Case Is = "32"
Wingdingsname = "PAGE FACING UP (Unicode = hex. 1F4C4)"
Case Is = "33"
Wingdingsname = "PRINTED PAGE"
Case Is = "34"
Wingdingsname = "STACK OF PRINTED PAGES"
Case Is = "35"
Wingdingsname = "FILING CABINET"
Case Is = "36"
Wingdingsname = "HOURGLASS (Unicode = hex. 231B)"
Case Is = "37"
Wingdingsname = "KEYBOARD (Unicode = hex. 2328)"
Case Is = "38"
Wingdingsname = "MOUSE"
Case Is = "39"
Wingdingsname = "TRACKBALL"
Case Is = "3A"
Wingdingsname = "PERSONAL COMPUTER (Unicode = hex. 1F4BB)"
Case Is = "3B"
Wingdingsname = "HARD DISK"
Case Is = "3C"
Wingdingsname = "FLOPPY DISK (Unicode = hex. 1F4BE)"
Case Is = "3D"
Wingdingsname = "FLOPPY DISK"
Case Is = "3E"
Wingdingsname = "TAPE DRIVE (Unicode = hex. 2707)"
Case Is = "3F"
67
Wingdingsname = "WRITING HAND (Unicode = hex. 270D)"
Case Is = "40"
Wingdingsname = "WRITING LEFT HAND"
Case Is = "41"
Wingdingsname = "VICTORY HAND (Unicode = hex. 270C)"
Case Is = "42"
Wingdingsname = "OK HAND SIGN (Unicode = hex. 1F44C)"
Case Is = "43"
Wingdingsname = "THUMBS UP SIGN (Unicode = hex. 1F44D)"
Case Is = "44"
Wingdingsname = "THUMBS DOWN SIGN (Unicode = hex. 1F44E)"
Case Is = "45"
Wingdingsname = "WHITE LEFT POINTING INDEX (Unicode = hex. 261C)"
Case Is = "46"
Wingdingsname = "WHITE RIGHT POINTING INDEX (Unicode = hex. 261E)"
Case Is = "47"
Wingdingsname = "WHITE UP POINTING INDEX (Unicode = hex. 261D)"
Case Is = "48"
Wingdingsname = "WHITE DOWN POINTING INDEX (Unicode = hex. 261F)"
Case Is = "49"
Wingdingsname = "OPEN HAND"
Case Is = "4A"
Wingdingsname = "WHITE SMILING FACE (Unicode = hex. 263A)"
Case Is = "4B"
Wingdingsname = "NEUTRAL FACE (Unicode = hex. 1F610)"
Case Is = "4C"
Wingdingsname = "WHITE FROWNING FACE (Unicode = hex. 2639)"
Case Is = "4D"
Wingdingsname = "BOMB (Unicode = hex. 1F4A3)"
Case Is = "4E"
Wingdingsname = "SKULL AND CROSSBONES (Unicode = hex. 2620)"
Case Is = "4F"
Wingdingsname = "WHITE FLAG (Unicode = hex. 2690)"
Case Is = "50"
Wingdingsname = "PENNANT ON POLE"
Case Is = "51"
Wingdingsname = "AIRPLANE (Unicode = hex. 2708)"
Case Is = "52"
Wingdingsname = "WHITE SUN WITH RAYS (Unicode = hex. 263C)"
Case Is = "53"
Wingdingsname = "DROPLET (Unicode = hex. 1F4A7)"
Case Is = "54"
Wingdingsname = "SNOWFLAKE (Unicode = hex. 2744)"
Case Is = "55"
Wingdingsname = "WHITE LATIN CROSS"
Case Is = "56"
Wingdingsname = "SHADOWED WHITE LATIN CROSS (Unicode = hex. 271E)"
Case Is = "57"
Wingdingsname = "CELTIC CROSS"
Case Is = "58"
Wingdingsname = "MALTESE CROSS (Unicode = hex. 2720)"
Case Is = "59"
Wingdingsname = "STAR OF DAVID (Unicode = hex. 2721)"
Case Is = "5A"
Wingdingsname = "STAR AND CRESCENT (Unicode = hex. 262A)"
Case Is = "5B"
Wingdingsname = "YIN YANG (Unicode = hex. 262F)"
Case Is = "5C"
Wingdingsname = "DEVANAGARI OM (Unicode = hex. 0950)"
Case Is = "5D"
Wingdingsname = "WHEEL OF DHARMA (Unicode = hex. 2638)"
Case Is = "5E"
68
Wingdingsname = "ARIES (Unicode = hex. 2648)"
Case Is = "5F"
Wingdingsname = "TAURUS (Unicode = hex. 2649)"
Case Is = "60"
Wingdingsname = "GEMINI (Unicode = hex. 264A)"
Case Is = "61"
Wingdingsname = "CANCER (Unicode = hex. 264B)"
Case Is = "62"
Wingdingsname = "LEO (Unicode = hex. 264C)"
Case Is = "63"
Wingdingsname = "VIRGO (Unicode = hex. 264D)"
Case Is = "64"
Wingdingsname = "LIBRA (Unicode = hex. 264E)"
Case Is = "65"
Wingdingsname = "SCORPIO (Unicode = hex. 264F)"
Case Is = "66"
Wingdingsname = "SAGITTARIUS (Unicode = hex. 2650)"
Case Is = "67"
Wingdingsname = "CAPRICORN (Unicode = hex. 2651)"
Case Is = "68"
Wingdingsname = "AQUARIUS (Unicode = hex. 2652)"
Case Is = "69"
Wingdingsname = "PISCES (Unicode = hex. 2653)"
Case Is = "6A"
Wingdingsname = "AMPERSAND (lower Case) (Unicode = hex. 0026)"
Case Is = "6B"
Wingdingsname = "AMPERSAND (ITALIC) (Unicode = hex. 0026)"
Case Is = "6C"
Wingdingsname = "BLACK CIRCLE (Unicode = hex. 25CF)"
Case Is = "6D"
Wingdingsname = "SHADOWED WHITE CIRCLE (Unicode = hex. 274D)"
Case Is = "6E"
Wingdingsname = "BLACK SQUARE (Unicode = hex. 25A0)"
Case Is = "6F"
Wingdingsname = "WHITE SQUARE (Unicode = hex. 25A1)"
Case Is = "70"
Wingdingsname = "BOLD WHITE SQUARE"
Case Is = "71"
Wingdingsname = "LOWER RIGHT SHADOWED WHITE SQUARE (Unicode = hex. 2751)"
Case Is = "72"
Wingdingsname = "UPPER RIGHT SHADOWED WHITE SQUARE (Unicode = hex. 2752)"
Case Is = "73"
Wingdingsname = "BLACK MEDIUM LOZENGE (Unicode = hex. 2B27)"
Case Is = "74"
Wingdingsname = "BLACK LOZENGE (Unicode = hex. 29EB)"
Case Is = "75"
Wingdingsname = "BLACK DIAMOND (Unicode = hex. 25C6)"
Case Is = "76"
Wingdingsname = "BLACK DIAMOND MINUS WHITE X (Unicode = hex. 2756)"
Case Is = "77"
Wingdingsname = "BLACK MEDIUM DIAMOND (Unicode = hex. 2B25)"
Case Is = "78"
Wingdingsname = "X IN A RECTANGLE BOX (Unicode = hex. 2327)"
Case Is = "79"
Wingdingsname = "APL FUNCTIONAL SYMBOL QUAD UP CARET (Unicode = hex. 2353)"
Case Is = "7A"
Wingdingsname = "PLACE OF INTEREST SIGN (Unicode = hex. 2318)"
Case Is = "7B"
Wingdingsname = "WHITE FLORETTE (Unicode = hex. 2740)"
Case Is = "7C"
Wingdingsname = "BLACK FLORETTE (Unicode = hex. 273F)"
Case Is = "7D"
69
Wingdingsname = "HEAVY DOUBLE TURNED COMMA QUOTATION MARK " _
& "ORNAMENT (Unicode = hex. 275D)"
Case Is = "7E"
Wingdingsname = "HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT " _
& "(Unicode = hex. 275E)"
Case Is = "7F"
Wingdingsname = "(WHITE VERTICAL RECTANGLE) (Unicode = hex. 25AF)"
Case Is = "80"
Wingdingsname = "CIRCLED DIGIT ZERO (Unicode = hex. 24EA)"
Case Is = "81"
Wingdingsname = "CIRCLED DIGIT ONE (Unicode = hex. 2460)"
Case Is = "82"
Wingdingsname = "CIRCLED DIGIT TWO (Unicode = hex. 2461)"
Case Is = "83"
Wingdingsname = "CIRCLED DIGIT THREE (Unicode = hex. 2462)"
Case Is = "84"
Wingdingsname = "CIRCLED DIGIT FOUR (Unicode = hex. 2463)"
Case Is = "85"
Wingdingsname = "CIRCLED DIGIT FIVE (Unicode = hex. 2464)"
Case Is = "86"
Wingdingsname = "CIRCLED DIGIT SIX (Unicode = hex. 2465)"
Case Is = "87"
Wingdingsname = "CIRCLED DIGIT SEVEN (Unicode = hex. 2466)"
Case Is = "88"
Wingdingsname = "CIRCLED DIGIT EIGHT (Unicode = hex. 2467)"
Case Is = "89"
Wingdingsname = "CIRCLED DIGIT NINE (Unicode = hex. 2468)"
Case Is = "8A"
Wingdingsname = "CIRCLED NUMBER TEN (Unicode = hex. 2469)"
Case Is = "8B"
Wingdingsname = "NEGATIVE CIRCLED DIGIT ZERO (Unicode = hex. 24FF)"
Case Is = "8C"
Wingdingsname = "DINGBAT NEGATIVE CIRCLED DIGIT ONE (Unicode = hex. 2776)"
Case Is = "8D"
Wingdingsname = "DINGBAT NEGATIVE CIRCLED DIGIT TWO (Unicode = hex. 2777)"
Case Is = "8E"
Wingdingsname = "DINGBAT NEGATIVE CIRCLED DIGIT THREE (Unicode = hex. 2778)"
Case Is = "8F"
Wingdingsname = "DINGBAT NEGATIVE CIRCLED DIGIT FOUR (Unicode = hex. 2779)"
Case Is = "90"
Wingdingsname = "DINGBAT NEGATIVE CIRCLED DIGIT FIVE (Unicode = hex. 277A)"
Case Is = "91"
Wingdingsname = "DINGBAT NEGATIVE CIRCLED DIGIT SIX (Unicode = hex. 277B)"
Case Is = "92"
Wingdingsname = "DINGBAT NEGATIVE CIRCLED DIGIT SEVEN (Unicode = hex. 277C)"
Case Is = "93"
Wingdingsname = "DINGBAT NEGATIVE CIRCLED DIGIT EIGHT (Unicode = hex. 277D)"
Case Is = "94"
Wingdingsname = "DINGBAT NEGATIVE CIRCLED DIGIT NINE (Unicode = hex. 277E)"
Case Is = "95"
Wingdingsname = "DINGBAT NEGATIVE CIRCLED NUMBER TEN (Unicode = hex. 277F)"
Case Is = "96"
Wingdingsname = "BUD AND LEAF NORTH EAST"
Case Is = "97"
Wingdingsname = "BUD AND LEAF NORTH WEST"
Case Is = "98"
Wingdingsname = "BUD AND LEAF SOUTH WEST"
Case Is = "99"
Wingdingsname = "BUD AND LEAF SOUTH EAST"
Case Is = "9A"
Wingdingsname = "BOLD VINE LEAF NORTH EAST"
Case Is = "9B"
70
Wingdingsname = "BOLD VINE LEAF NORTH WEST"
Case Is = "9C"
Wingdingsname = "BOLD VINE LEAF SOUTH WEST"
Case Is = "9D"
Wingdingsname = "BOLD VINE LEAF SOUTH EAST"
Case Is = "9E"
Wingdingsname = "MIDDLE DOT (Unicode = hex. 00B7)"
Case Is = "9F"
Wingdingsname = "BULLET (Unicode = hex. 2022)"
Case Is = "A0"
Wingdingsname = "BLACK SMALL SQUARE (Unicode = hex. 25AA)"
Case Is = "A1"
Wingdingsname = "WHITE CIRCLE (Unicode = hex. 25CB)"
Case Is = "A2"
Wingdingsname = "BOLD WHITE CIRCLE"
Case Is = "A3"
Wingdingsname = "EXTRA BOLD WHITE CIRCLE"
Case Is = "A4"
Wingdingsname = "FISHEYE (Unicode = hex. 25C9)"
Case Is = "A5"
Wingdingsname = "BULLSEYE (Unicode = hex. 25CE)"
Case Is = "A6"
Wingdingsname = "ähnlich SHADOWED WHITE CIRCLE (Unicode = hex. 274D)"
Case Is = "A7"
Wingdingsname = "BLACK SMALL SQUARE 7 (Unicode = hex. 25AA)"
Case Is = "A8"
Wingdingsname = "WHITE MEDIUM SQUARE (Unicode = hex. 25FB)"
Case Is = "A9"
Wingdingsname = "BLACK THREE POINTED STAR"
Case Is = "AA"
Wingdingsname = "BLACK FOUR POINTED STAR (Unicode = hex. 2726)"
Case Is = "AB"
Wingdingsname = "BLACK STAR (Unicode = hex. 2605)"
Case Is = "AC"
Wingdingsname = "SIX POINTED BLACK STAR (Unicode = hex. 2736)"
Case Is = "AD"
Wingdingsname = "EIGHT POINTED BLACK STAR (Unicode = hex. 2734)"
Case Is = "AE"
Wingdingsname = "TWELVE POINTED BLACK STAR (Unicode = hex. 2739)"
Case Is = "AF"
Wingdingsname = "EIGHT POINTED PINWHEEL STAR (Unicode = hex. 2735)"
Case Is = "B0"
Wingdingsname = "SQUARE REGISTER MARK"
Case Is = "B1"
Wingdingsname = "POSITION INDICATOR (Unicode = hex. 2316)"
Case Is = "B2"
Wingdingsname = "WHITE CONCAVE-SIDED DIAMOND (Unicode = hex. 27E1)"
Case Is = "B3"
Wingdingsname = "SQUARE LOZENGE (Unicode = hex. 2311)"
Case Is = "B4"
Wingdingsname = "QUESTION MARK IN WHITE DIAMOND"
Case Is = "B5"
Wingdingsname = "CIRCLED WHITE STAR (Unicode = hex. 272A)"
Case Is = "B6"
Wingdingsname = "SHADOWED WHITE STAR (Unicode = hex. 2730)"
Case Is = "B7"
Wingdingsname = "CLOCK FACE ONE O CLOCK (Unicode = hex. 1F550)"
Case Is = "B8"
Wingdingsname = "CLOCK FACE TWO O CLOCK (Unicode = hex. 1F551)"
Case Is = "B9"
Wingdingsname = "CLOCK FACE THREE O CLOCK (Unicode = hex. 1F552)"
Case Is = "BA"
71
Wingdingsname = "CLOCK FACE FOUR O CLOCK (Unicode = hex. 1F553)"
Case Is = "BB"
Wingdingsname = "CLOCK FACE FIVE O CLOCK (Unicode = hex. 1F554)"
Case Is = "BC"
Wingdingsname = "CLOCK FACE SIX O CLOCK (Unicode = hex. 1F555)"
Case Is = "BD"
Wingdingsname = "CLOCK FACE SEVEN O CLOCK (Unicode = hex. 1F556)"
Case Is = "BE"
Wingdingsname = "CLOCK FACE EIGHT O CLOCK (Unicode = hex. 1F557)"
Case Is = "BF"
Wingdingsname = "CLOCK FACE NINE O CLOCK (Unicode = hex. 1F558)"
Case Is = "C0"
Wingdingsname = "CLOCK FACE TEN O CLOCK (Unicode = hex. 1F559)"
Case Is = "C1"
Wingdingsname = "CLOCK FACE ELEVEN O CLOCK (Unicode = hex. 1F55A)"
Case Is = "C2"
Wingdingsname = "CLOCK FACE TWELVE O CLOCK (Unicode = hex. 1F55B)"
Case Is = "C3"
Wingdingsname = "(WHITE ARROW POINTING DOWNWARDS THEN CURVING " _
& "LEFTWARDS"
Case Is = "C4"
Wingdingsname = "WHITE ARROW POINTING DOWNWARDS THEN CURVING " _
& "RIGHTWARDS"
Case Is = "C5"
Wingdingsname = "WHITE ARROW POINTING UPWARDS THEN CURVING " _
& "LEFTWARDS"
Case Is = "C6"
Wingdingsname = "WHITE ARROW POINTING UPWARDS THEN CURVING " _
& "RIGHTWARDS"
Case Is = "C7"
Wingdingsname = "WHITE ARROW POINTING LEFTWARDS THEN CURVING " _
& "UPWARDS"
Case Is = "C8"
Wingdingsname = "WHITE ARROW POINTING RIGHTWARDS THEN CURVING " _
& "UPWARDS"
Case Is = "C9"
Wingdingsname = "WHITE ARROW POINTING LEFTWARDS THEN CURVING " _
& "DOWNWARDS"
Case Is = "CA"
Wingdingsname = "WHITE ARROW POINTING RIGHTWARDS THEN CURVING " _
& "DOWNWARDS"
Case Is = "CB"
Wingdingsname = "QUILT SQUARE 2"
Case Is = "CC"
Wingdingsname = "BLACK QUILT SQUARE 2"
Case Is = "CD"
Wingdingsname = "LEAF COUNTERCLOCKWISE SOUTH WEST"
Case Is = "CE"
Wingdingsname = "LEAF COUNTERCLOCKWISE NORTH WEST"
Case Is = "CF"
Wingdingsname = "LEAF COUNTERCLOCKWISE SOUTH EAST"
Case Is = "D0"
Wingdingsname = "LEAF COUNTERCLOCKWISE NORTH EAST"
Case Is = "D1"
Wingdingsname = "LEAF NORTH WEST"
Case Is = "D2"
Wingdingsname = "LEAF SOUTH WEST"
Case Is = "D3"
Wingdingsname = "LEAF NORTH EAST"
Case Is = "D4"
Wingdingsname = "LEAF SOUTH EAST"
Case Is = "D5"
72
Wingdingsname = "ERASE TO THE LEFT (Unicode = hex. 232B)"
Case Is = "D6"
Wingdingsname = "ERASE TO THE RIGHT (Unicode = hex. 2326)"
Case Is = "D7"
Wingdingsname = "THREE-D TOP-LIGHTED LEFTWARDS ARROWHEAD"
Case Is = "D8"
Wingdingsname = "THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD " _
& "(Unicode = hex. 27A2)"
Case Is = "D9"
Wingdingsname = "THREE-D RIGHT-LIGHTED UPWARDS ARROWHEAD " _
&""
Case Is = "DA"
Wingdingsname = "THREE-D LEFT-LIGHTED DOWNWARDS ARROWHEAD " _
&""
Case Is = "DB"
Wingdingsname = "CIRCLED HEAVY WHITE LEFTWARDS ARROW"
Case Is = "DC"
Wingdingsname = "CIRCLED HEAVY WHITE RIGHTWARDS ARROW " _
& "(Unicode = hex. 27B2)"
Case Is = "DD"
Wingdingsname = "CIRCLED HEAVY WHITE UPWARDS ARROW"
Case Is = "DE"
Wingdingsname = "CIRCLED HEAVY WHITE DOWNWARDS ARROW"
Case Is = "DF"
Wingdingsname = "WIDE-HEADED LEFTWARDS ARROW"
Case Is = "E0"
Wingdingsname = "WIDE-HEADED RIGHTWARDS ARROW"
Case Is = "E1"
Wingdingsname = "WIDE-HEADED UPWARDS ARROW"
Case Is = "E2"
Wingdingsname = "WIDE-HEADED DOWNWARDS ARROW"
Case Is = "E3"
Wingdingsname = "WIDE-HEADED NORTH WEST ARROW"
Case Is = "E4"
Wingdingsname = "WIDE-HEADED NORTH EAST ARROW"
Case Is = "E5"
Wingdingsname = "WIDE-HEADED SOUTH WEST ARROW"
Case Is = "E6"
Wingdingsname = "WIDE-HEADED SOUTH EAST ARROW"
Case Is = "E7"
Wingdingsname = "HEAVY WIDE-HEADED LEFTWARDS ARROW"
Case Is = "E8"
Wingdingsname = "HEAVY WIDE-HEADED RIGHTWARDS ARROW (Unicode = hex. 2794)"
Case Is = "E9"
Wingdingsname = "HEAVY WIDE-HEADED UPWARDS ARROW"
Case Is = "EA"
Wingdingsname = "HEAVY WIDE-HEADED DOWNWARDS ARROW"
Case Is = "EB"
Wingdingsname = "HEAVY WIDE-HEADED NORTH WEST ARROW"
Case Is = "EC"
Wingdingsname = "HEAVY WIDE-HEADED NORTH EAST ARROW"
Case Is = "ED"
Wingdingsname = "HEAVY WIDE-HEADED SOUTH WEST ARROW"
Case Is = "EE"
Wingdingsname = "HEAVY WIDE-HEADED SOUTH EAST ARROW"
Case Is = "EF"
Wingdingsname = "LEFTWARDS WHITE ARROW (Unicode = hex. 21E6)"
Case Is = "F0"
Wingdingsname = "RIGHTWARDS WHITE ARROW (Unicode = hex. 21E8)"
Case Is = "F1"
Wingdingsname = "UPWARDS WHITE ARROW (Unicode = hex. 21E7)"
Case Is = "F2"
73
Wingdingsname = "DOWNWARDS WHITE ARROW (Unicode = hex. 21E9)"
Case Is = "F3"
Wingdingsname = "LEFT RIGHT WHITE ARROW (Unicode = hex. 2B04)"
Case Is = "F4"
Wingdingsname = "UP DOWN WHITE ARROW (Unicode = hex. 21F3)"
Case Is = "F5"
Wingdingsname = "NORTH WEST WHITE ARROW (Unicode = hex. 2B01)"
Case Is = "F6"
Wingdingsname = "NORTH EAST WHITE ARROW (Unicode = hex. 2B00)"
Case Is = "F7"
Wingdingsname = "SOUTH WEST WHITE ARROW (Unicode = hex. 2B03)"
Case Is = "F8"
Wingdingsname = "SOUTH EAST WHITE ARROW (Unicode = hex. 2B02)"
Case Is = "F9"
Wingdingsname = "WHITE RECTANGLE (Unicode = hex. 25AD)"
Case Is = "FA"
Wingdingsname = "WHITE SMALL SQUARE (Unicode = hex. 25AB)"
Case Is = "FB"
Wingdingsname = "BALLOT X (Unicode = hex. 2717)"
Case Is = "FC"
Wingdingsname = "CHECK MARK (Unicode = hex. 2713)"
Case Is = "FD"
Wingdingsname = "BALLOT BOX WITH X (FONT-WEIGHT: BOLD) (Unicode = hex. 2612)"
Case Is = "FE"
Wingdingsname = "BALLOT BOX WITH CHECK (FONT-WEIGHT: BOLD) " _
& "(Unicode = hex. 2611)"
Case Is = "FF"
Wingdingsname = "WINDOWS LOGO"
Case Else
Wingdingsname = "(KEIN WINGDINGS-ZEICHEN FESTGELEGT!)"
End Select
End Function
' ---------------------------------------------------------------------------------------------------------
Private Function Fkt_OMML_zählen() As Integer
' Diese Funktion setzt Word 2010 oder höher voraus!
Dim objEq As Word.OMath ' Formelobjekt für Word 2010
Dim k As Integer
For Each objEq In Selection.Range.OMaths
k=k+1
''objEq.Range.Select
''MsgBox "hier OMML-Formel!"
Next objEq
Fkt_OMML_zählen = k
End Function
' ---------------------------------------------------------------------------------------------------------
Private Function Fkt_Kompatibitaet()
' Befehl führt bis Word 2003 zum Absturz.
Fkt_Kompatibitaet = ActiveDocument.CompatibilityMode ' (bei Dok1)
End Function
' ---------------------------------------------------------------------------------------------------------
Private Sub SpeichernX(xxx As String, i As Integer)
' Speichern als ".docx", damit OMML-Formeln analysiert werden können:
ActiveDocument.SaveAs2 _
FileName:=xxx, _
FileFormat:=wdFormatXMLDocument, LockComments:=False, Password:="", _
AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
74
EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, _
SaveFormsData:=False, SaveAsAOCELetter:=False, CompatibilityMode:=i
End Sub
' ---------------------------------------------------------------------------------------------------------
6.4 Zusatzfunktion: Ausgabe der Zeichenformatierung bei Einzelzeichen
Im September 2016 habe ich einige Programmzeilen eingefügt, die mir die Formatierung
eines Zeichens anzeigen, wenn nur ein Zeichen markiert ist (N = 1). Im Grunde ist diese
Zusatzfunktion überflüssig. Mit dem Befehl Shift + F1 erhält man dassselbe und zusätzlich
noch die Absatzformatierung und die hier fehlende Angabe, ob die Stelle farbig markiert ist.
' Ist nur ein einziges Zeichen markiert, werden auch einige Zeichenformatierungen
' in der MsgBox ausgeben.
...
' ******************************************************************
' Nur wenn nicht mehr als 40 Zeichen, Ergebnis als Messagebox anzeigen,
' ansonsten direkt in die Ausgabe als Datei ( geändert 6. Oktober 2012)
' *****************************************************************
' Beim Analyse-Ergebnis kann eine MessageBoxW maximal 44 Zeilen anzeigen
' (eine normale MsgBox sogar nur 16 Zeilen).
' Bei OMML-Formeln ist die Ausgabe als Datei günstiger:
'''''''''''
' 23. September 2016 + 9. November 2016:
If N = 1 Then
' Bei nur einem Buchstaben lohnt sich auch die Ausgabe der Schriftattribute:
' Ergebnisanzeige in Messagebox mit Abfrage, ob Ergebnis in separater Datei gewünscht:
MsgBoxAnzeige = Ergebnis2 & vbCrLf & vbCrLf _
& Fkt_Schriftattribute_ausgeben _
& vbCrLf & vbCrLf _
& "Wollen Sie das Ergebnis (ohne die Schriftattribute) ausführlicher in einer separaten
Datei?"
IntAbfrage = MessageBoxW(0, StrPtr(MsgBoxAnzeige), StrPtr("Zeichenanalyse"), _
vbYesNoCancel + vbDefaultButton2)
If IntAbfrage <> 6 Then
' Speicher löschen und Programm beenden.
GoTo Zeile_Suchverzeichnis_löschen_und_beenden
End If
'''''''''''
ElseIf N < 40 Then
'' If N < 40 Then
'' _ And Int_OMML = 0
' Ergebnisanzeige in Messagebox mit Abfrage, ob Ergebnis in separater Datei gewünscht:
MsgBoxAnzeige = Ergebnis2 & vbCrLf & vbCrLf _
& "Wollen Sie das Ergebnis ausführlicher in einer separaten Datei?"
IntAbfrage = MessageBoxW(0, StrPtr(MsgBoxAnzeige), StrPtr("Zeichenanalyse"), _
vbYesNoCancel + vbDefaultButton2)
' Alternative einfache Funktion, wenn keine Windows-Umgebung, leider ohne Unicode:
' IntAbfrage = MsgBox(MsgBoxAnzeige, vbYesNoCancel + vbDefaultButton2, "Zeichenanalyse")
' Bei "Ja" kommt "6" heraus, bei "Nein" kommt "7" heraus, bei Abbrechen eine "2".
'
If IntAbfrage <> 6 Then
' Speicher löschen und Programm beenden.
GoTo Zeile_Suchverzeichnis_löschen_und_beenden
End If
'' Else
'' MsgBox "Da insgesamt " & N & " Zeichen markiert sind, erfolgt das Ergebnis " _
75
''
'
'
'
'
& "in einer separaten Datei. Es passt nicht mehr in eine Messagbox."
End If
**********************************************************************
Wenn mehr als 40 Zeichen oder Abfrage = "ja" (IntAbfrage = 6),
ausführlichere Ergebnisanzeige in Extra-Datei:
*********************************************************************
Private Function Fkt_Schriftattribute_ausgeben() As String
' Dipl.-Ing. Hanna-Chris Gast, 4. Juni 2010, 21. September 2016, 14. Dezember 2016.
' Bei der Schriftfarbe wird die Grundfarbe genannt.
Dim x(7) As Variant
Dim Strpos As String
'
x(1) = Selection.Font.Size
If x(1) > 99 Then x(1) = "unterschiedlich"
'
Select Case Selection.Font.Bold
Case -1
x(2) = "fett"
Case 0
x(2) = "nicht fett"
Case Else
x(2) = "unterschiedlich fett und nicht fett"
End Select
'
Select Case Selection.Font.Italic
Case -1
x(3) = "kursiv"
Case 0
x(3) = "nicht kursiv"
Case Else
x(3) = "unterschiedlich kursiv und nicht kursiv"
End Select
'
Select Case Selection.Font.Underline
Case -1
x(4) = "unterstrichen"
Case 0
x(4) = "nicht unterstrichen"
Case Else
x(4) = "teilweise unterstrichen"
End Select
'
x(5) = Selection.Font.Name
If x(5) = "" Then x(5) = "unterschiedlich"
''''''''''
' 14. 12. 2016
If Selection.Font.Subscript = True Then
x(6) = "tiefgestellt"
ElseIf Selection.Font.Superscript = True Then
x(6) = "hochgestellt"
Else
x(6) = "weder hoch- noch tiefgestellt"
End If
If Selection.Range.HighlightColorIndex = 0 Then
x(7) = "keine farbige Textmarkierung"
Else
x(7) = "die Textstelle ist farbig markiert"
End If
''''''''''
' 21. 9. 2016
76
If Selection.Font.Position > 9999 Then
Strpos = vbCrLf & vbCrLf & "Die vertikale Position der Zeichen ist unterschiedlich."
ElseIf Selection.Font.Position <> 0 Then
Strpos = vbCrLf & vbCrLf & "Die vertikale Position des Zeichens ist " _
& Selection.Font.Position & "."
Else
Strpos = ""
End If
'''''''''
''' MsgBox "Die Schriftattribute sind: " & vbCrLf _
''''''''
Fkt_Schriftattribute_ausgeben = "Die Schriftattribute sind: " & vbCrLf _
& "Schriftart: " & x(5) & "," & vbCrLf _
& "Schriftgröße: " & x(1) & ", " & vbCrLf _
& x(2) & "," & vbCrLf _
& x(3) & "," & vbCrLf _
& x(4) & "," & vbCrLf _
& x(6) & "," & vbCrLf _
& x(7) & ";" & vbCrLf _
& "Schriftfarbe (ColorIndex): " _
& Fkt_FarbIndex_Farbe & "." _
& Strpos
End Function
' *********************************************************************-
Private Function Fkt_FarbIndex_Farbe()
' H. Chris Gast 15. August 2012, 7. April 2014, 8. Januar 2015, 22. September 2016.
' Dies Makro gibt die Text-Grundfarbe an der Cursor-Stelle zurück.
Dim StrFarbe As String
'
Select Case Selection.Font.ColorIndex
Case 0
StrFarbe = " keine Farbe"
Case 1
StrFarbe = " Schwarz"
Case 2
StrFarbe = " Blau"
Case 3
StrFarbe = " Türkis (eigentlich eher hellblau)"
Case 4
StrFarbe = " Hellgrün"
Case 5
StrFarbe = " Rosa"
Case 6
StrFarbe = " Rot"
Case 7
StrFarbe = " Gelb"
Case 8
StrFarbe = " Weiß"
Case 9
StrFarbe = " Dunkelblau"
Case 10
StrFarbe = " Blaugrün"
Case 11
StrFarbe = " Grün"
Case 12
StrFarbe = " Violett"
Case 13
StrFarbe = " Dunkelrot"
Case 14
77
StrFarbe = " Dunkelgelb"
Case 15
StrFarbe = " Grau-50"
Case 16
StrFarbe = " Grau-25"
Case Else
StrFarbe = "unbekannte Farbe oder mehrere Farben"
End Select
Fkt_FarbIndex_Farbe = StrFarbe
End Function
' ---------------------------------------------------------------------------------------------------------
78
7 Ersatz der Schriftarten Symbol und Wingdings durch Cambria
7.1 Problemstellung und Kurzbeschreibung
Sonderschriftarten wie Symbol und Wingdings sind nicht Unicode-kompatibel, was dazu
führt, dass Leser im Internet oder Empfänger der Datei nach einer Übertragung mit Verlust
der Formatierung falsche Buchstaben lesen würden, was meines Erachtens schlimmer ist, als
wenn sie nur leere Rechtecke ("Kästchen") zu sehen bekämen.
Das hier erstellte Word-Makro (siehe Abschnitt 7.6) wandelt wahlweise in der gesamten Datei
oder nur in der Markierung alle Zeichen der Schriftart "Symbol" (mit einer Ausnahme) und
den größten Teil der Zeichen der Schriftart "Wingdings" in Unicode-Zeichen um. Beim
Ersetzen in der gesamten Datei erfolgt die Ersetzung nicht nur in der Hauptkomponente des
Dokuments, sondern auch in den Fußnoten, Kopfzeilen und Fußzeilen 26. Das Makro
funktioniert in Word 2000 bis Word 2010.
Ich habe für das neue Ersetzungs-Makro (August 2014) die auf dem Windows-Computer
bereits vorhandenen Schriftarten (Fonts) Cambria, Times New Roman, Arial und
Arial Unicode bevorzugt. Ferner verwende ich die in Word 2010 neu vorhandene Schriftart
"Segoe UI Symbol".
Damit lassen sich jedoch nicht alle Wingdings-Zeichen ersetzen. Ich verwendete deshalb auch
die kostenlos downloadbare Schriftart (Font) Symbola [10]. Bei Bedarf kann man das hier
entwickelte Makro passend ändern, wenn man möglichst viele Zeichen mit anderen Schriftarten wiedergeben will, wie zum Beispiel mit "RomanCyrillic_Std "[11] oder mit Code 2001
[12], oder man lässt alle Ersetzungen aus, die nicht mit den vorhandenen Schriftarten möglich
sind.
Die von mir bisher verwendeten zusätzlichen Fonts wie "DejaVu" usw. wurden jetzt durch die
Einführung von "Cambria", "Cambria Math" und "Segoe UI Symbol" überflüssig, mit
Ausnahme von "Symbola". Verwendet man "Symbola", wird auch "Segoe UI Symbol"
überflüssig.
Für die Analyse von Sonderzeichen bei der Erstellung dieser Arbeit verwendete ich mein
Makro für Zeichenanalyse, siehe Abschnitt 6.
Hinweis: Steuerzeichen (Code kleiner als dezimal 032 bzw. hexadezimal 0x20) sind im
Aussehen relativ unabhängig von der Schriftart. Hier kann einfach allen Steuerzeichen die
Grundschriftart zugewiesen werden, es braucht kein "Mapping" nach Abschnitt 7 zu erfolgen.
7.2 Ersatz ("Mapping") von Symbol-Zeichen durch Unicode-Zeichen
Die Zeichen der Schriftart (Font) Symbol können fast vollständig durch Zeichen der
Schriftart "Cambria" ersetzt werden. 27 Mit Rosa markierte ich das einzige fehlende Zeichen.
In der folgenden Tabelle sind die gesuchten Zeichen in Schriftgröße 14 der betreffenden
Schriftart dargestellt, der erklärende Text dagegen in 10 Punkt Arial.
26
27
Kopf- und Fußzeilen von zusätzlichen "Sections" oder von Textfeldern in Kopf- und Fußzeilen
werden von meinem Makro nicht erfasst, da dieser Fall nicht zu erwarten ist.
Weitgehend verwendete Quellen: [20] und [21].
79
Bei den Zeichen, für die je nach Bedeutung unterschiedlicher Ersatz zu wählen ist, machte ich
in drei Fällen im Makro die Auswahl davon abhängig, ob das Zeichen kursiv oder steil
geschrieben ist: Formelzeichen werden kursiv, Einheiten und Einheiten-Zusätze werden stets
steil geschrieben. Bei einigen anderen Fällen (spezielle Klammern und das
Durchmesserzeichen) versuchte ich, die wahrscheinlichere Variante zu wählen.
Tabelle 7.1: Alle Zeichen der Schriftart Symbol mit Unicode-Entsprechungen
(1 von 9)
Schriftart DezimalSymbol
code
29
30
31
80
PUA 29
Unicode-Name
Unicode
(dez)
Unicode
(hex.)
geigneter Font
32
0x20
61472
NO-BREAK
SPACE 30
160
0x00A0
Cambria
!
33
0x21
61473
EXCLAMATION
MARK
33
0x0021
Cambria
∀
34
0x22
61474 FOR ALL
8704
0x2200
Cambria
#
35
0x23
61475 NUMBER SIGN
35
0x0023
Cambria
∃
36
0x24
61476 THERE EXISTS
8707
0x2203
Cambria
%
37
0x25
61477 PERCENT SIGN
37
0x0025
Cambria
&
38
0x26
61478 AMPERSAND
38
0x0026
Cambria
∋
39
0x27
61479
CONTAINS AS
MEMBER 31
8715
0x220B
Cambria
(
40
0x28
61480
LEFT
PARENTHESIS
40
0x0028
Cambria
)
41
0x29
61481
RIGHT
PARENTHESIS
41
0x0029
Cambria
∗
42
0x2A
61482
ASTERISK
OPERATOR
8727
0x2217
Cambria
43
0x2B
61483 PLUS SIGN
43
0x002B
Cambria
44
0x2C
61484 COMMA
44
0x002C
Cambria
45
0x2D
61485 MINUS SIGN
8722
0x2212
Cambria
46
0x2E
61486 FULL STOP
46
0x002E
Cambria
47
0x2F
61487 SOLIDUS
47
0x002F
Cambria
48
0x30
61488 DIGIT ZERO
48
0x0030
Cambria
49
0x31
61489 DIGIT ONE
49
0x0031
Cambria
+
,
−
.
/
0
1
28
Hexcode 28
Hexadezimaler Code. Eigentlich "F020" usw. in der "Private Use Area". Es werden bei Schriftart
"Symbol" auch dann die richtigen Symbol-Zeichen angezeigt, wenn nur die letzten beiden
Hexziffern stimmen.
Dezimaler Code in der Private-Use-Area (siehe [1]).
Hier trifft nur "No-Break Space" (Festes Leerzeichen) wie in der Adobe-Liste zu, nicht das
einfache Leerzeichen wie in der Apple-Liste [21].
Die Apple-Liste verwendet hier: "SMALL CONTAINS AS MEMBER" (0x220D). Ich habe mich hier
aber an die Adobe-Liste gehalten. [20].
Tabelle 7.1 (2 von 9)
Schriftart DezimalSymbol
code
2
3
4
5
Hexcode 28
PUA 29
Unicode-Name
Unicode
(dez)
Unicode
(hex.)
geigneter Font
50
0x32
61490 DIGIT TWO
50
0x0032
Cambria
51
0x33
61491 DIGIT THREE
51
0x0033
Cambria
52
0x34
61492 DIGIT FOUR
52
0x0034
Cambria
53
0x35
61493 DIGIT FIVE
53
0x0035
Cambria
6
54
0x36
61494 DIGIT SIX
54
0x0036
Cambria
7
55
0x37
61495 DIGIT SEVEN
55
0x0037
Cambria
8
56
0x38
61496 DIGIT EIGHT
56
0x0038
Cambria
9
57
0x39
61497 DIGIT NINE
57
0x0039
Cambria
:
58
0x3A
61498 COLON
58
0x003A
Cambria
;
59
0x3B
61499 SEMICOLON
59
0x003B
Cambria
<
60
0x3C
61500 LESS-THAN SIGN
60
0x003C
Cambria
=
61
0x3D
61501 EQUALS SIGN
61
0x003D
Cambria
>
62
0x3E
61502
62
0x003E
Cambria
?
63
0x3F
61503 QUESTION MARK
63
0x003F
Cambria
≅
64
0x40
61504
APPROXIMATELY
EQUAL TO
8773
0x2245
Cambria
Α
65
0x41
61505
GREEK CAPITAL
LETTER ALPHA
913
0x0391
Cambria
Β
66
0x42
61506
GREEK CAPITAL
LETTER BETA
914
0x0392
Cambria
Χ
67
0x43
61507
GREEK CAPITAL
LETTER CHI
935
0x03A7
Cambria
∆
68
0x44
GREEK CAPITAL
61508 LETTER DELTA
INCREMENT
916
0x0394
Cambria
8710
0x2206
Cambria
GREATER-THAN
SIGN
Ε
69
0x45
61509
GREEK CAPITAL
LETTER EPSILON
917
0x0395
Cambria
Φ
70
0x46
61510
GREEK CAPITAL
LETTER PHI
934
0x03A6
Cambria
Γ
71
0x47
61511
GREEK CAPITAL
LETTER GAMMA
915
0x0393
Cambria
Η
72
0x48
61512
GREEK CAPITAL
LETTER ETA
919
0x0397
Cambria
Ι
73
0x49
61513
GREEK CAPITAL
LETTER IOTA
921
0x0399
Cambria
ϑ
74
0x4A
61514
GREEK THETA
SYMBOL
977
0x03D1
Cambria
81
Tabelle 7.1 (3 von 9)
Schriftart DezimalSymbol
code
PUA 29
Unicode-Name
Unicode
(dez)
Unicode
(hex.)
geigneter Font
Κ
75
0x4B
61515
GREEK CAPITAL
LETTER KAPPA
922
0x039A
Cambria
Λ
76
0x4C
61516
GREEK CAPITAL
LETTER LAMDA
923
0x039B
Cambria
Μ
77
0x4D
61517
GREEK CAPITAL
LETTER MU
924
0x039C
Cambria
Ν
78
0x4E
61518
GREEK CAPITAL
LETTER NU
925
0x039D
Cambria
Ο
79
0x4F
61519
GREEK CAPITAL
927
LETTER OMICRON
0x039F
Cambria
Π
80
0x50
61520
GREEK CAPITAL
LETTER PI
928
0x03A0
Cambria
Θ
81
0x51
61521
GREEK CAPITAL
LETTER THETA
920
0x0398
Cambria
Ρ
82
0x52
61522
GREEK CAPITAL
LETTER RHO
929
0x03A1
Cambria
Σ
83
0x53
61523
GREEK CAPITAL
LETTER SIGMA
931
0x03A3
Cambria
Τ
84
0x54
61524
GREEK CAPITAL
LETTER TAU
932
0x03A4
Cambria
Υ
85
0x55
61525
GREEK CAPITAL
LETTER UPSILON
933
0x03A5
Cambria
ς
86
0x56
GREEK SMALL
61526 LETTER FINAL
SIGMA
962
0x03C2
Cambria
0x57
GREEK CAPITAL
61527 LETTER OMEGA
OHM SIGN
937
0x03A9
Cambria
8486
0x2126
Cambria
Ω
82
Hexcode 28
87
Ξ
88
0x58
61528
GREEK CAPITAL
LETTER XI
926
0x039E
Cambria
Ψ
89
0x59
61529
GREEK CAPITAL
LETTER PSI
936
0x03A8
Cambria
Ζ
90
0x5A
61530
GREEK CAPITAL
LETTER ZETA
918
0x0396
Cambria
[
91
0x5B
61531
LEFT SQUARE
BRACKET
91
0x005B
Cambria
∴
92
0x5C
61532 THEREFORE
8756
0x2234
Cambria
]
93
0x5D
61533
93
0x005D
Cambria
⊥
94
0x5E
61534 UP TACK
8869
0x22A5
Cambria Math
_
95
0x5F
61535 LOW LINE
95
0x005F
Cambria
RIGHT SQUARE
BRACKET
Tabelle 7.1 (4 von 9)
Schriftart DezimalSymbol
code
96
Hexcode 28
0x60
PUA 29
61537

33
34
35
RADICAL
EXTENDER 32
Ersatz-Vorschlag:
Macron
GREEK SMALL
LETTER ALPHA
GREEK SMALL
LETTER BETA
GREEK SMALL
LETTER CHI
GREEK SMALL
LETTER DELTA
GREEK SMALL
LETTER EPSILON
(korrigiert) 34
GREEK PHI
SYMBOL
GREEK SMALL
LETTER GAMMA
GREEK SMALL
LETTER ETA
GREEK SMALL
LETTER IOTA
(korrigiert) 35
GREEK SMALL
LETTER PHI
Unicode
(dez)
Unicode
(hex.)
geigneter Font
----
----
0175
0x00AF
Times New
Roman 33
945
0x03B1
Cambria
946
0x03B2
Cambria
967
0x03C7
Cambria
948
0x03B4
Cambria
949
0x03B5
Cambria
981
0x03D5
Cambria
947
0x03B3
Cambria
951
0x03B7
Cambria
953
0x03B9
Cambria
966
0x03C6
Cambria
α
97
0x61
61537
β
98
0x62
61538
χ
99
0x63
61539
δ
100
0x64
61540
ε
101
0x65
61541
φ
102
0x66
61542
γ
103
0x67
61543
η
104
0x68
61544
ι
105
0x69
61545
ϕ
106
0x6A
61546
κ
107
0x6B
61547
GREEK SMALL
LETTER KAPPA
954
0x03BA
Cambria
λ
108
0x6C
61548
GREEK SMALL
LETTER LAMDA
955
0x03BB
Cambria
0x6D
GREEK SMALL
61549 LETTER MU
MICRO SIGN
956
0x03BC
Cambria
181
00B5
Cambria
µ
32
Unicode-Name
109
ν
110
0x6E
61550
GREEK SMALL
LETTER NU
957
0x03BD
Cambria
ο
111
0x6F
61551
GREEK SMALL
959
LETTER OMICRON
0x03BF
Cambria
π
112
0x70
61552
GREEK SMALL
LETTER PI
960
0x03C0
Cambria
θ
113
0x71
61553
GREEK SMALL
LETTER THETA
952
0x03B8
Cambria
ρ
114
0x72
61554
GREEK SMALL
LETTER RHO
961
0x03C1
Cambria
Kein entsprechendes Unicode-Zeichen vorhanden.
Hier ist am besten der Formeleditor zu verwenden, im neuen Makro (2014) deshalb weggelassen.
Die ursprünglichen Unicode-Zeichen für phi und phi-Symbol wurden später vertauscht [23].
Die ursprünglichen Unicode-Zeichen für phi und phi-Symbol wurden später vertauscht [23].
83
Tabelle 7.1 (5 von 9)
Schriftart DezimalSymbol
code
84
Unicode
(dez)
Unicode
(hex.)
geigneter Font
0x73
61555
GREEK SMALL
LETTER SIGMA
963
0x03C3
Cambria
τ
116
0x74
61556
GREEK SMALL
LETTER TAU
964
0x03C4
Cambria
υ
117
0x75
61557
GREEK SMALL
LETTER UPSILON
965
0x03C5
Cambria
ϖ
118
0x76
61558
GREEK PI
SYMBOL
982
0x03D6
Cambria
ω
119
0x77
61559
GREEK SMALL
LETTER OMEGA
969
0x03C9
Cambria
ξ
120
0x78
61560
GREEK SMALL
LETTER XI
958
0x03BE
Cambria
ψ
121
0x79
61561
GREEK SMALL
LETTER PSI
968
0x03C8
Cambria
ζ
122
0x7A
61562
GREEK SMALL
LETTER ZETA
950
0x03B6
Cambria
123
0x7B
61563
LEFT CURLY
BRACKET
123
0x007B
Cambria
124
0x7C
61564 VERTICAL LINE
124
0x007C
Cambria
125
0x007D
Cambria
126
0x007E
Cambria
8364
0x20AC
Cambria
978
0x03D2
Cambria
8242
0x2032
Cambria
RIGHT CURLY
61565
BRACKET
61566 TILDE 36
125
0x7D
126
0x7E
37
160
0xA0
EURO SIGN
61600 (bzw. nicht
definiert)
ϒ
161
0xA1
61601 WITH HOOK
GREEK UPSILON
SYMBOL
162
0xA2
61602 PRIME
163
0xA3
8804
0x2264
Cambria
164
0xA4
61603 EQUAL TO
61604 FRACTION SLASH
8260
0x2044
Cambria
165
0xA5
61605 INFINITY
8734
0x221E
Cambria
402
0x0192
Cambria
9827
0x2663
Times New
Roman
LESS-THAN OR
ƒ
166
0xA6
LATIN SMALL
61606 LETTER F WITH
HOOK
♣
167
0xA7
61607 BLACK CLUB SUIT
♦
168
0xA8
61608 SUIT
9830
0x2666
Cambria Math
169
0xA9
61609 BLACK HEART SUIT
9829
0x2665
Times New
Roman 38
170
0xAA
61610 BLACK SPADE SUIT
9824
0x2660
Cambria
171
0xAB
61611 LEFT RIGHT ARROW 8596
0x2194
Cambria
♥
♠
↔
38
Unicode-Name
115
′
≤
⁄
∞
37
PUA 29
σ
{
|
}
∼
36
Hexcode 28
BLACK DIAMOND
Bei manchen Fonts ist hier besser der TILDE OPERATOR zu verwenden, dez. 8764, hex.
0x223C.
Das Eurozeichen ist bei mir in Symbol nicht vorhanden (Word 2000 und Word 2010).
In Cambria gibt es nur das weiße Herz, ♡ (Code: 0x2661).
Tabelle 7.1 (6 von 9)
Schriftart DezimalSymbol
code
←
→
↓
°
±
″
≥
×
∝
∂
•
÷
≠
≡
≈
…


↵
ℵ
ℑ
Hexcode 28
PUA 29
Unicode-Name
LEFTWARDS
172
0xAC
173
0xAD
61612 ARROW
61613 UPWARDS ARROW
174
0xAE
61614 ARROW
175
0xAF
176
Unicode
(dez)
Unicode
(hex.)
geigneter Font
8592
0x2190
Cambria
8593
0x2191
Cambria
8594
0x2192
Cambria
8595
0x2193
Cambria
0xB0
61615 ARROW
61616 DEGREE SIGN
176
0x00B0
Cambria
177
0xB1
61617 PLUS-MINUS SIGN
177
0x00B1
Cambria
178
0xB2
61618 DOUBLE PRIME
8243
0x2033
Cambria
179
0xB3
61619
8805
0x2265
Cambria
180
0xB4
215
0x00D7
Cambria
181
0xB5
61621 PROPORTIONAL TO
8733
0x221D
Cambria
182
0xB6
PARTIAL
61622 DIFFERENTIAL
8706
0x2202
Cambria
183
0xB7
61623 BULLET
8226
0x2022
Cambria
184
0xB8
61624 DIVISION SIGN
247
0x00F7
Cambria
185
0xB9
61625 NOT EQUAL TO
8800
0x2260
Cambria
186
0xBA
61626 IDENTICAL TO
8801
0x2261
Cambria
187
0xBB
61627 ALMOST EQUAL TO
8776
0x2248
Cambria
188
0xBC
61628 ELLIPSIS
8230
0x2026
Cambria
9168
0x23D0
124
0x007C
9135
0x23AF
8212
0x2014
Cambria
8629
0x21B5
Cambria
8501
0x2135
Cambria Math
8465
0x2111
Cambria Math
8476
0x211C
Cambria Math
8472
0x2118
Cambria
RIGHTWARDS
DOWNWARDS
GREATER-THAN OR
EQUAL TO
MULTIPLICATION
61620 SIGN
HORIZONTAL
VERTICAL LINE
EXTENSION
189
0xBD
61629 (for arrows)
besser:
Senkrechter Strich
HORIZONTAL LINE
EXTENSION
190
0xBE
191
0xBF
192
0xC0
61630 (for arrows)
besser:
Geviertstrich
DOWNWARDS
ARROW WITH
61631
CORNER
LEFTWARDS
61632 ALEF SYMBOL
BLACK-LETTER
61633
CAPITAL I
BLACK-LETTER
61634
CAPITAL R
SCRIPT CAPITAL
61635
P
Cambria
193
0xC1
ℜ
194
0xC2
℘
195
0xC3
⊗
196
0xC4
61636 CIRCLED TIMES
8855
0x2297
Cambria
⊕
197
0xC5
61637 CIRCLED PLUS
8853
0x2295
Cambria
85
Tabelle 7.1 (7 von 9)
Schriftart DezimalSymbol
code
∅
∩
∪
⊃
⊇
⊄
⊂
⊆
∈
∉
∠
∇
39
86
198
Hexcode 28
0xC6
PUA 29
Unicode-Name
Unicode
(dez)
Unicode
(hex.)
geigneter Font
8709
0x2205
Arial Unicode 39
DIAMETER SIGN 8960
0x2300
Cambria Math
61638 EMPTY SET
199
0xC7
61639 INTERSECTION
8745
0x2229
Cambria
200
0xC8
61640 UNION
8746
0x222A
Cambria
201
0xC9
61641 SUPERSET OF
8835
0x2283
Cambria
202
0xCA
61642
SUPERSET OF OR
8839
EQUAL TO
0x2287
Cambria
203
0xCB
61643 NOT A SUBSET OF 8836
0x2284
Cambria
204
0xCC
61644 SUBSET OF
8834
0x2282
Cambria
205
0xCD
61645
8838
0x2286
Cambria
206
0xCE
61646 ELEMENT OF
8712
0x2208
Cambria
207
0xCF
61647
NOT AN ELEMENT
8713
OF
0x2209
Cambria
208
0xD0
61648 ANGLE
8736
0x2220
Cambria
209
0xD1
61649 NABLA
8711
0x2207
Cambria Math

210
0xD2
0x00AE
Cambria

211
0xD3
0x00A9
Cambria

212
0xD4
0x2122
Cambria
∏
213
0xD5
61653 N-ARY PRODUCT
8719
0x220F
Cambria
√
214
0xD6
61654 SQUARE ROOT
8730
0x221A
Cambria
⋅
215
0xD7
61655 DOT OPERATOR
8901
0x22C5
Cambria
¬
216
0xD8
61656 NOT SIGN
172
0x00AC
Cambria
∧
217
0xD9
61657 LOGICAL AND
8743
0x2227
Cambria
∨
218
0xDA
61658 LOGICAL OR
8744
0x2228
Cambria
⇔
219
0xDB
61659
LEFT RIGHT
DOUBLE ARROW
8660
0x21D4
Cambria
⇐
220
0xDC
61660
LEFTWARDS
DOUBLE ARROW
8656
0x21D0
Cambria
⇑
221
0xDD
61661
UPWARDS
DOUBLE ARROW
8657
0x21D1
Cambria
⇒
222
0xDE
61662
RIGHTWARDS
DOUBLE ARROW
8658
0x21D2
Cambria
⇓
223
0xDF
61663
DOWNWARDS
DOUBLE ARROW
8659
0x21D3
Cambria
SUBSET OF OR
EQUAL TO
REGISTERED
61650 SIGN
174
(Serifenschrift)
COPYRIGHT SIGN
61651
169
(Serifenschrift)
TRADE MARK
61652 SIGN
8482
(Serifenschrift)
In Cambria sieht das Empty-Set-Zeichen als Durchmesserzeichen nicht rund genug aus und
kommt deshalb nicht in Frage. Verboten ist auch das skandinavische Umlautzeichen "Ø". Es
bleibt nur das (leider etwas kleine) Durchmesserzeichen mit Cambria Math.
Tabelle 7.1 (8 von 9)
Schriftart DezimalSymbol
code
◊
224
Hexcode 28
0xE0
PUA 29
Unicode-Name
61664 LOZENGE
LEFT-POINTING
ANGLE BRACKET
〈
225
0xE1
61665 LESS-THAN SIGN 40
MATHEMATICAL
LEFT ANGLE
BRACKET
40
REGISTERED
61666 SIGN,
(sans serif)
COPYRIGHT SIGN,
61667
(sans serif)
TRADE MARK
61668 SIGN,
(sans serif)
N-ARY
61669
SUMMATION
LEFT
61670 PARENTHESIS
UPPER HOOK
LEFT
61671 PARENTHESIS
EXTENSION
Unicode
(dez)
Unicode
(hex.)
geigneter Font
9674
0x25CA
Cambria
9001
0x2329
Cambria
060
U+003C
Cambria
10216
U+27E8
Cambria Math
174
0x00AE
Arial,
Cambria
169
0x00A9
8482
0x2122
Arial,
Cambria
8721
0x2211
Cambria
9115
0x239B
Cambria Math
9116
0x239C
Cambria Math

226
0xE2

227
0xE3

228
0xE4
∑
229
0xE5

230
0xE6

231
0xE7

232
0xE8
LEFT
61672 PARENTHESIS
LOWER HOOK
9117
0x239D
Cambria Math

233
0xE9
LEFT SQUARE
61673 BRACKET UPPER
CORNER
9121
0x23A1
Cambria Math

234
0xEA
LEFT SQUARE
61674 BRACKET
EXTENSION
9122
0x23A2
Cambria Math

235
0xEB
LEFT SQUARE
61675 BRACKET LOWER 9123
CORNER
0x23A3
Cambria Math

236
0xEC
LEFT CURLY
61676 BRACKET UPPER
HOOK
9127
0x23A7
Cambria Math

237
0xED
LEFT CURLY
61677 BRACKET MIDDLE 9128
PIECE
0x23A8
Cambria Math

238
0xEE
LEFT CURLY
61678 BRACKET LOWER 9129
HOOK
0x23A9
Cambria Math

239
0xEF
61679
CURLY BRACKET
EXTENSION
0x23AA
Cambria Math
9130
Arial,
Cambria
Genausogut möglich ist auch das einfache Zeichen für "Kleiner-Gleich".
Apple hat hier "LEFT ANGLE BRACKET" (0x3008) [21], diese Klammer gehört aber in den
Bereich für ostasiatische Sprachen.
87
Tabelle 7.1 (9 von 9)
Schriftart DezimalSymbol
code
240
〉
∫
⌠
41
42
88
241
Hexcode 28
0xF0
0xF1
PUA 29
Unicode-Name
Unicode
(dez)
Unicode
(hex.)
geigneter Font
61680 (nicht definiert) 41
61681
RIGHT-POINTING
ANGLE BRACKET
9002
0x232A
Cambria
GREATER-THAN
42
SIGN
003E
062
Cambria
MATHEMATICAL
RIGHT ANGLE
BRACKET
10217
U+27E9
Cambria Math
8747
0x222B
Cambria
8992
0x2320
Cambria
9134
0x23AE
Cambria Math
8993
0x2321
Cambria
9118
0x239E
Cambria Math
9119
0x239F
Cambria Math
9120
0x23A0
Cambria Math
9124
0x23A4
Cambria Math
9125
0x23A5
Cambria Math
9126
0x23A6
Cambria Math
9131
0x23AB
Cambria Math
9132
0x23AC
Cambria Math
9133
0x23AD
Cambria Math
242
0xF2
61682 INTEGRAL
243
0xF3
61683

244
0xF4
61684
⌡
245
0xF5
61685

246
0xF6
61686

247
0xF7
61687

248
0xF8
61688

249
0xF9
61689

250
0xFA
RIGHT SQUARE
61690 BRACKET
EXTENSION

251
0xFB

252
0xFC

253
0xFD

254
0xFE
TOP HALF
INTEGRAL
INTEGRAL
EXTENSION
BOTTOM HALF
INTEGRAL
RIGHT
PARENTHESIS
UPPER HOOK
RIGHT
PARENTHESIS
EXTENSION
RIGHT
PARENTHESIS
LOWER HOOK
RIGHT SQUARE
BRACKET UPPER
CORNER
RIGHT SQUARE
61691 BRACKET LOWER
CORNER
RIGHT CURLY
61692 BRACKET UPPER
HOOK
RIGHT CURLY
61693 BRACKET MIDDLE
PIECE
RIGHT CURLY
61694 BRACKET LOWER
HOOK
Apple hat hier das Apple-Logo [21]. Die Schriftart "SymbolPS" hat hier das Eurozeichen.
Hier entschied ich mich für die erste Variante. Das normale Zeichen für "Größer-Gleich" kann
ebensogut verwendet werden. Apple verwendet hier "RIGHT ANGLE BRACKET" (0x3009)
[21]; diese Klammer gehört aber in den Bereich für ostasiatische Sprachen.
7.2.1 Auswertung der geeigneten Ersatz-Schriftarten für "Symbol"
Nur ein Zeichen der Sonderschriftart "Symbol" (Wurzelzeichen-Verlängerung) hat keine
Unicode-Entsprechung, hierfür eignet sich als optisch halbwegs passender Ersatz das Makron
oder der "Kombinierende Überstrich" ("combining overline"). Zwei Zeichen (vertikale und
horizontale LINE EXTENSION) lassen sich nur in schlechter Qualität mit Unicodezeichen
wiedergeben; hierfür empfehle ich den optisch besser passenden Ersatz mit dem Geviertstrich
bzw. dem Senkrechtem Strich. Im Prinzip kann folglich die Schriftart "Symbol" vollständig
durch Unicode-Zeichen ersetzt werden.
Von den 193 Zeichen der Sonderschriftart "Symbol" lassen sich bis auf 2 Zeichen alle mit
Cambria bzw. Cambria Math wiedergeben: (Stand Juni 2014):
— Die bei Cambria bzw. Cambria Math fehlenden 2 Spielkartenzeichen "Kreuz" und "Herz"
lassen sich mit Times New Roman darstellen;
Weitere 5 Zeichen sehen in Cambria unbefriedigend aus:
— Das Makron als Ersatz für den (fast nie gebrauchten) Wurzelzeichen-Verlängerer erhält in
Cambria eine falsche Position, auf eine Ersetzung habe ich deshalb jetzt in der neuen
Makro-Version verzichtet (Juni 2014). Hier empfehle ich die Verwendung eines FormelEditors, siehe auch [6].
— Das Zeichen für "Leere Menge ist in Cambria nicht brauchbar (verzerrt), hierfür wäre
"Arial Unicode" besser. Fast immer ist jedoch das Durchmesserzeichen gemeint, welches
sich sehr gut mit Cambria darstellen lässt.
— Die drei "Sans-Serif"-Zeichen habe ich mit Arial ersetzt.
Die neuen Schriftarten (Fonts) "Calibri" und "Candara" habe ich nicht getestet.
**************************************************************************
7.2.2 Unicode-Ersatzschriftarten ohne Cambria (Stand 2011)
Vor der Einführung von der Schriftart Cambria waren nicht alle Symbol-Zeichen mit den
damals vorhandenen Schriftarten von Word 2003 unter Windows XP ersetzbar. Ich musste
damals weitere Schriftarten aus dem Internet suchen und wählte DejaVu.
184
172
128
Zeichen mit RomanCyrillic_Std;
(Nur 9 Zeichen von 193 Zeichen haben keine Entsprechung in RomanCyrillic_Std)
Zeichen mit Arial-Unicode;
(Nur 21 Zeichen von 193 Zeichen sind nicht mit Arial Unicode darstellbar.)
Zeichen mit Times New Roman oder Arial;
Von den Zeichen, die nicht mit Times New Roman bzw. Arial darstellbar sind, lassen sich wie folgt
mit Unicode-Zeichen wiedergeben:
42
33
52
Zeichen mit Arial Unicode (im Makro nur verwendet, wo DejaVu Serif nicht möglich war);
Zeichen mit RomanCyrillic_Std (im Makro nicht verwendet);
Zeichen mit DejaVu Serif oder DejaVu Sans; davon 13 Zeichen ausschließlich mit DejaVu
Serif oder DejaVu Sans; in OpenOffice funktioniert dies nur mit DejaVu Sans.
7 Zeichen nur mit Lucida Sans Unicode oder Arial Unicode, aber nicht mit Times New Roman
und DejaVu Serif;
3 Zeichen nur mit Arial Unicode oder RomanCyrillic_Std, aber nicht mit Times New Roman,
DejaVu Serif oder Lucida Sans Unicode;
Die einzige sinnvolle Art, eine Wurzel im Text darzustellen, bleibt aber der Formel-Editor:
(Einfügen → Objekt → Microsoft Formel-Editor 3.0):
αβχ .
89
7.3 Ersatz ("Mapping") für die Wingdings-Zeichen durch Cambria
Für Wingdings habe ich noch keinen vollständigen Ersatz gefunden 43. Rosa sind Felder
markiert, für die ein Unicode-Ersatz noch fehlt (Stand 28. September 2014).
In der folgenden Tabelle sind die jeweiligen Sonderzeichen in Schriftgröße 14 dargestellt, der
übrige Text in Arial 10 Punkt. In Roter Schrift sind die Zeichen dargestellt, die sich nicht mit
den in Word 2010 vorhandenen Schriftarten darstellen lassen.
Tabelle 7.2: Alle Zeichen der Schriftart Wingdings mit Unicode-Entsprechungen
(1 von 10)
Wingdings- dez hex 44 PUA 45
Zeichen
Name des
Zeichens 46
Unicode Unicode
(hex)
(dez)
Font
32
0x20
61472
Space
U+0020
32
Cambria

33
0x21
61473
Pencil
U+270F
9999
Arial Unicode

34
0x22
61474
Black scissors
U+2702
9986
Arial Unicode

35
0x23
61475
Upper blade scissors
U+2701
9985
Arial Unicode

36
0x24
61476
Eyeglasses
U+1F453 128083

37
0x25
61477
Bell
U+1F514 128276

38
0x26
61478
Open book
U+1F4D6 128214

39
0x27
61479
CANDLE
U+1F56F 128367
Symbola

40
0x28
61480
Black telephone
U+260E
9742
Arial Unicode

41
0x29
61481
Telephone location sign
U+2706
9990
Arial Unicode

42
0x2A
61482
Envelope
U+2709
9993
Arial Unicode

43
0x2B
61483
STAMPED ENVELOPE
U+1F583 128387

44
0x2C 61484
Closed mailbox with
lowered flag
U+1F4EA 128234

45
0x2D 61485
Closed mailbox with raised
flag
U+1F4EB 128235
43
44
45
46
90
Segoe UI
Symbol;
Symbola
Segoe UI
Symbol;
Symbola
Segoe UI
Symbol;
Symbola
Symbola
Segoe UI
Symbol;
Symbola
Segoe UI
Symbol;
Symbola
Die Gegenüberstellung in dieser Tabelle ist großenteils einer Liste von Alan Wood [22] entnommen, im Herbst 2014 erweitert um viele neue Zeichen, die mit "Symbola" darstellbar sind.
Hexadezimaler Code. Eigentlich "F020" usw. in der "Private Use Area". Es werden bei Schriftart
"Wingdings" auch dann die richtigen Symbol-Zeichen angezeigt, wenn nur die letzten beiden
Hexziffern stimmen.
Dezimaler Code in der Private-Use-Area.
Die Namen der Zeichen sind, soweit vorhanden, den Unicode-Zeichen entnommen. Die
ursprünglichen Wingdings-Namen weichen oft davon ab.
Tabelle 7.2 (2 von 10)
Wingdings- dez hex 44 PUA 45
Zeichen
Name des
Zeichens 46
Unicode Unicode
(hex)
(dez)
Font

46
0x2E
61486

47
0x2F
61487

48
0x30
61488
File folder
U+1F4C1 128193

49
0x31
61489
Open file folder
U+1F4C2 128194

50
0x32
61490
Page facing up
U+1F4C4 128196

51
0x33
61491
PAGE
U+1F5CF 128463
Symbola

52
0x34
61492
PAGES
U+1F5D0 128464
Symbola

53
0x35
61493
Filing cabinet

54
0x36
61494
Hourglass
U+231B
8987
Cambria

55
0x37
61495
Keyboard
U+2328
9000
Cambria

56
0x38
61496
Mouse

57
0x39
61497
Trackball

58
0x3A
61498
Personal computer

59
0x3B
61499
Hard disk

60
0x3C 61500
Floppy disk

61
0x3D 61501
5¼" Floppy disk

62
0x3E
61502

63
0x3F

64

OPEN MAILBOX WITH
RAISED FLAG
OPEN MAILBOX WITH
LOWERED FLAG
U+1F4EC 128236
Symbola
U+1F4ED 128237
Symbola
Segoe UI
Symbol;
Symbola
Segoe UI
Symbol;
Symbola
Segoe UI
Symbol;
Symbola
U+1F4BB 128187
Segoe UI
Symbol;
Symbola
U+1F4BE 128190
Segoe UI
Symbol;
Symbola
Tape drive
U+2707
9991
Arial Unicode
61503
Writing hand
U+2
9997
Arial Unicode
0x40
61504
Writing left hand
65
0x41
61505
Victory hand
U+270C
9996
Arial Unicode

66
0x42
61506
OK hand sign
U+1F44C 128076

67
0x43
61507
Thumbs up sign
U+1F44D 128077

68
0x44
61508
Thumbs down sign
U+1F44E 128078

69
0x45
61509
White left pointing index
U+261C
9756
Segoe UI
Symbol;
Symbola
Segoe UI
Symbol;
Symbola
Segoe UI
Symbol;
Symbola
Arial Unicode
91
Tabelle 7.2 (3 von 10)
Wingdings- dez hex 44 PUA 45
Zeichen
92
Name des
Zeichens 46
Unicode Unicode
(hex)
(dez)
Font

70
0x46
61510
White right pointing index
U+261E
9758
Arial Unicode

71
0x47
61511
White up pointing index
U+261D
9757
Arial Unicode

72
0x48
61512
White down pointing index
U+261F
9759
Arial Unicode

73
0x49
61513
Open hand

74
0x4A
61514
White smiling face
U+263A
9786

75
0x4B
61515
Neutral face
U+1F610 128528

76
0x4C 61516
White frowning face
U+2639

77
0x4D 61517
Bomb
U+1F4A3 128 163

78
0x4E
61518
Skull and crossbones
U+2620
9760
Arial Unicode

79
0x4F
61519
White flag
U+2690
9872
Segoe UI
Symbol;
Symbola

80
0x50
61520
WHITE PENNANT
U+1F3F1 127985
Symbola

81
0x51
61521
Airplane
U+2708
9992
Arial Unicode

82
0x52
61522
White sun with rays
U+263C
9788

83
0x53
61523
Droplet
U+1F4A7 128 167

84
0x54
61524
Snowflake
U+2744

85
0x55
61525
WHITE LATIN CROSS
U+1F546 128326

86
0x56
61526
Shadowed white Latin cross U+271E
10 014
Arial Unicode

87
0x57
61527
CELTIC CROSS
1F548
128328
Symbola

88
0x58
61528
Maltese cross
U+2720
10 016
Arial Unicode

89
0x59
61529
Star of David
U+2721
10 017
Arial Unicode

90
0x5A
61530
Star and crescent
U+262A
9770
Arial Unicode

91
0x5B
61531
Yin Yang
U+262F
9775
Arial Unicode

92
0x5C 61532
Devanagari Om
U+0950
2384
Arial Unicode

93
0x5D 61533
Wheel of Dharma
U+2638
9784
Arial Unicode

94
0x5E
Aries
U+2648
9800
Arial Unicode
61534
9785
10 052
Arial Unicode;
Segoe UI
Symbol
Segoe UI
Symbol;
Symbola
Arial Unicode;
Segoe UI
Symbol
Segoe UI
Symbol;
Symbola
Times New
Roman
Segoe UI
Symbol;
Symbola
Arial Unicode
Symbola
Tabelle 7.2 (4 von 10)
Wingdings- dez hex 44 PUA 45
Zeichen
Name des
Zeichens 46
Unicode Unicode
(hex)
(dez)
Font

95
0x5F
61535
Taurus
U+2649
9801
Arial Unicode

96
0x60
61536
Gemini
U+264A
9802
Arial Unicode

97
0x61
61537
Cancer
U+264B
9803
Arial Unicode

98
0x62
61538
Leo
U+264C
9804
Arial Unicode

99
0x63
61539
Virgo
U+264D
9805
Arial Unicode

100
0x64
61540
Libra
U+264E
9806
Arial Unicode

101
0x65
61541
Scorpio
U+264F
9807
Arial Unicode

102
0x66
61542
Sagittarius
U+2650
9808
Arial Unicode

103
0x67
61543
Capricorn
U+2651
9809
Arial Unicode

104
0x68
61544
Aquarius
U+2652
9810
Arial Unicode

105
0x69
61545
Pisces
U+2653
9811
Arial Unicode

106
0x6A
61546
Ampersand
(italic, lower-case)
U+0026

38
Cambria
107
0x6B
61547
Ampersand (italic)
U+0026

108
0x6C 61548
Black circle
U+25CF
9679
Times New
Roman

109
0x6D 61549
Shadowed white circle
U+274D
10061
Arial Unicode

110
0x6E
61550
Black square
U+25A0
9632
Times New
Roman;
Cambria Math

111
0x6F
61551
Ballot Box
("White square", dez. 9633, U+2610
ist zu klein)
9744
Arial Unicode

112
0x70
61552
BOLD WHITE SQUARE

113
0x71
61553

114
0x72
61554

115
0x73
61555

116
0x74
61556
Black lozenge

117
0x75
61557
Black diamond

118
0x76
61558

119
0x77
61559

120
0x78
61560
X in a rectangle box

121
0x79
61561
U+1F790 128912
Lower right shadowed white
U+2751
square
Upper right shadowed white
U+2752
square
BLACK MEDIUM
U+2B27
LOZENGE
Symbola
10065
Arial Unicode
10066
Arial Unicode
11047
Symbola;
Code2000
U+29EB
10731
Cambria
U+25C6
9670
Arial Unicode
10070
Arial Unicode
11045
Symbola;
Code 2000
U+2327
8999
Cambria
APL functional symbol quad
U+2353
up caret
9043
Cambria
Black diamond minus white
U+2756
X
BLACK MEDIUM
U+2B25
DIAMOND
93
Tabelle 7.2 (5 von 10)
Wingdings- dez hex 44 PUA 45
Zeichen
94
Name des
Zeichens 46
Unicode Unicode
(hex)
(dez)
Font

122
0x7A
61562
Place of interest sign
U+2318
8984
Cambria

123
0x7B
61563
White florette
U+2740
10048
Arial Unicode

124
0x7C 61564
Black florette
U+273F
10047
Arial Unicode

125
0x7D 61565
U+275D
10077
Arial Unicode

126
0x7E
61566
U+275E
10078
Arial Unicode
�
127
0x7F
61567
(eventuell im Makro noch
vergößern?)
U+25AF
9647
Arial Unicode

128
0x80
61568
Circled digit zero
U+24EA
9450
Cambria

129
0x81
61569
Circled digit one
U+2460
9312
Cambria

130
0x82
61570
Circled digit two
U+2461
9313
Cambria

131
0x83
61571
Circled digit three
U+2462
9314
Cambria

132
0x84
61572
Circled digit four
U+2463
9315
Cambria

133
0x85
61573
Circled digit five
U+2464
9316
Cambria

134
0x86
61574
Circled digit six
U+2465
9317
Cambria

135
0x87
61575
Circled digit seven
U+2466
9318
Cambria

136
0x88
61576
Circled digit eight
U+2467
9319
Cambria

137
0x89
61577
Circled digit nine
U+2468
9320
Cambria

138
0x8A
61578
Circled number ten
U+2469
9321
Cambria
U+24FF
9471
Cambria;
RomanCyrillic_Std;
Code 2000;
Everson;
Symbola
U+2776
10102
Cambria
U+2777
10103
Cambria
U+2778
10104
Cambria
U+2779
10105
Cambria
U+277A
10106
Cambria
U+277B
10107
Cambria
U+277C
10108
Cambria

139
0x8B

140
0x8C 61580

141
0x8D 61581

142
0x8E
61582

143
0x8F
61583

144
0x90
61584

145
0x91
61585

146
0x92
61586
61579
Heavy double turned
comma quotation mark
ornament
Heavy double comma
quotation mark ornament
White vertical rectangle
Negative circled
digit zero
Dingbat negative circled
digit one
Dingbat negative circled
digit two
Dingbat negative circled
digit three
Dingbat negative circled
digit four
Dingbat negative circled
digit five
Dingbat negative circled
digit six
Dingbat negative circled
digit seven
Tabelle 7.2 (6 von 10)
Wingdings- dez hex 44 PUA 45
Zeichen
47
Name des
Zeichens 46

147
0x93
61587

148
0x94
61588

149
0x95
61589

150
0x96
61590
Bud and leaf north east

151
0x97
61591
Bud and leaf north west

152
0x98
61592
Bud and leaf south west

153
0x99
61593
Bud and leaf south east

154
0x9A
61594
Bold vine leaf north east

155
0x9B
61595
Bold vine leaf north west

156
0x9C 61596
Bold vine leaf south west

157
0x9D 61597
Bold vine leaf south east

158
0x9E
61598

159
0x9F

160

Dingbat negative circled
digit eight
Dingbat negative circled
digit nine
Dingbat negative circled
number ten
Unicode Unicode
(hex)
(dez)
Font
U+277D
10109
Cambria
U+277E
10110
Cambria
U+277F
10111
Cambria
Middle dot
U+00B7
183
Cambria
61599
Bullet
U+2022
8226
Cambria
0xA0
61600
Black small square 47
U+25AA
9642
Times New
Roman
161
0xA1
61601
White circle
U+25CB
9675
Cambria

162
0xA2
61602
Heavy large circle
U+2B55
11093
Segoe UI
Symbol
Symbola

163
0xA3
61603
HEAVY WHITE CIRCLE
U+1F787 128903
Symbola

Sun
U+2609
9737
Arial Unicode
164
0xA4
61604
CIRCLED BULLET
U+29BF
10687
Cambria

165
0xA5
61605
TARGET
U+1F78B 128907
Symbola

166
0xA6
61606
(nur ähnlich)
Shadowed white circle
U+274D
10061
Arial Unicode

167
0xA7
61607
Black small square
U+25AA
9642

168
0xA8
61608
White medium square
U+25FB
9723

169
0xA9
61609
LIGHT THREE POINTED
BLACK STAR
U+1F7C0 128960
Symbola

170
0xAA 61610
Black four pointed star
U+2726
10022
Arial Unicode

171
0xAB 61611
Black star
U+2605
9733
Arial Unicode
47
Times New
Roman
Times New
Roman,
Arial Unicode
Zwei Wingdingszeichen werden mit demselben Unicode-Zeichen wiedergegeben.
95
Tabelle 7.2 (7 von 10)
Wingdings- dez hex 44 PUA 45
Zeichen
96
Name des
Zeichens 46
Unicode Unicode
(hex)
(dez)
Font

172
0xAC 61612
Six pointed black star
U+2736
10038
Arial Unicode
-
173
0xAD 61613
Eight pointed black star
U+2734
10036
Arial Unicode

174
0xAE 61614
Twelve pointed black star
U+2739
10041
Arial Unicode

175
0xAF 61615
Eight pointed pinwheel star
U+2735
10037
Arial Unicode

176
0xB0
61616
Square register mark

177
0xB1
61617
Position indicator
U+2316
8982
Cambria

178
0xB2
61618
White concave-sided
diamond
U+27E1
10209
Cambria

179
0xB3
61619
Square lozenge
U+2311
8977
Cambria

180
0xB4
61620
UNCERTAINTY SIGN
U+2BD1
11217
Symbola

181
0xB5
61621
Circled white star
U+272A
10026
Arial Unicode

182
0xB6
61622
Shadowed white star
U+2730
10032
Arial Unicode

183
0xB7
61623
Clock face
one o clock
U+1F550 128336

184
0xB8
61624
Clock face
two o clock
U+1F551 128337

185
0xB9
61625
Clock face
three o clock
U+1F552 128338

186
0xBA 61626
Clock face
four o clock
U+1F553 128339

187
0xBB 61627
Clock face
five o clock
U+1F554 128340

188
0xBC 61628
Clock face
six o clock
U+1F555 128341

189
0xBD 61629
Clock face
seven o clock
U+1F556 128342

190
0xBE 61630
Clock face
eight o clock
U+1F557 128343

191
0xBF 61631
Clock face
nine o clock
U+1F558 128344

192
0xC0 61632
Clock face
ten o clock
U+1F559 128345

193
0xC1 61633
Clock face eleven o clock
U+1F55A 128346
Segoe UI
Symbol;
Symbola
Segoe UI
Symbol;
Symbola
Segoe UI
Symbol;
Symbola
Segoe UI
Symbol;
Symbola
Segoe UI
Symbol;
Symbola
Segoe UI
Symbol;
Symbola
Segoe UI
Symbol;
Symbola
Segoe UI
Symbol;
Symbola
Segoe UI
Symbol;
Symbola
Segoe UI
Symbol;
Symbola
Segoe UI
Symbol;
Symbola
Tabelle 7.2 (8 von 10)
Wingdings- dez hex 44 PUA 45
Zeichen

Name des
Zeichens 46
Unicode Unicode
(hex)
(dez)
Font
U+1F55B 128347
Segoe UI
Symbol;
Symbola
2BB0
11184
Symbola
2BB1
11185
Symbola
0xC5 61637
RIBBON ARROW UP LEFT 2BB2
11186
Symbola
198
0xC6 61638
RIBBON ARROW UP
RIGHT
2BB3
11187
Symbola

199
0xC7 61639
RIBBON ARROW LEFT UP 2BB4
11188
Symbola

200
0xC8 61640
2BB5
11189
Symbola

201
0xC9 61641
2BB6
11190
Symbola

202
0xCA 61642
2BB7
11191
Symbola

203
0xCB 61643
Quilt square 2

204
0xCC 61644
Black quilt square 2

205
0xCD 61645

206
0xCE 61646

207
0xCF 61647

208
0xD0 61648

209
0xD1 61649

210

194
0xC2 61634

195
0xC3 61635

196
0xC4 61636

197

Clock face twelve o clock
RIBBON ARROW DOWN
LEFT
RIBBON ARROW DOWN
RIGHT
RIBBON ARROW RIGHT
UP
RIBBON ARROW LEFT
DOWN
RIBBON ARROW RIGHT
DOWN
TURNED SOUTH WEST
POINTING LEAF
TURNED NORTH WEST
POINTING LEAF
Leaf counterclockwise
south east
Leaf counterclockwise north
east
U+1F655 128597
Symbola
U+1F654 128596
Symbola
U+1F657 128599
Symbola
U+1F656 128598
Symbola
Leaf north west
U+1F650 128592
Symbola
0xD2 61650
Leaf south west
U+1F651 128593
Symbola
211
0xD3 61651
Leaf north east
U+1F652 128594
Symbola

212
0xD4 61652
Leaf south east
U+1F653
128595 Symbola

213
0xD5 61653
Erase to the left
U+232B
9003
Arial Unicode

214
0xD6 61654
Erase to the right
U+2326
8998
Cambria Math

215
0xD7 61655
Three-D top-lighted
leftwards arrowhead

216
0xD8 61656
U+27A2
10146
Arial Unicode

217
0xD9 61657

218
0xDA 61658

219
0xDB 61659
U+2B88
11144
Symbola

220
0xDC 61660
U+27B2
10162
Arial Unicode
Three-D top-lighted
rightwards arrowhead
Three-D right-lighted
upwards arrowhead
Three-D left-lighted
downwards arrowhead
LEFTWARDS BLACK
CIRCLED WHITE ARROW
Circled heavy white
rightwards arrow
97
Tabelle 7.2 (9 von 10)
Wingdings- dez hex 44 PUA 45
Zeichen
Name des
Zeichens 46
RIGHTWARDS BLACK
CIRCLED WHITE ARROW
98

221
0xDD 61661

222
0xDE 61662

223
0xDF 61663

224
0xE0
61664

225
0xE1
61665

226
0xE2
61666

227
0xE3
61667

228
0xE4
61668

229
0xE5
61669

230
0xE6
61670

231
0xE7
61671

232
0xE8
61672

233
0xE9
61673

234
0xEA 61674

235
0xEB 61675

236
0xEC 61676

237
0xED 61677

238
0xEE 61678

239
0xEF 61679

240
0xF0

241

UPWARDS BLACK
CIRCLED WHITE ARROW
DOWNWARDS BLACK
CIRCLED WHITE ARROW
WIDE-HEADED
LEFTWARDS LIGHT BARB
ARROW
WIDE-HEADED
RIGHTWARDS LIGHT
BARB ARROW
WIDE-HEADED
UPWARDS LIGHT BARB
ARROW
WIDE-HEADED
DOWNWARDS LIGHT
BARB ARROW
WIDE-HEADED NORTH
WEST BARB ARROW
WIDE-HEADED NORTH
EAST BARB ARROW
WIDE-HEADED SOUTH
WEST BARB ARROW
WIDE-HEADED SOUTH
EAST BARB ARROW
WIDE-HEADED
LEFTWARDS HEAVY
BARB ARROW
Heavy wide-headed
rightwards arrow
HEAVY WIDE-HEADED
UPWARDS ARROW
HEAVY WIDE-HEADED
DOWNWARDS ARROW
HEAVY WIDE-HEADED
NORTH WEST ARROW
HEAVY WIDE-HEADED
NORTH EAST ARROW
HEAVY WIDE-HEADED
SOUTH WEST ARROW
HEAVY WIDE-HEADED
SOUTH EAST ARROW
Unicode Unicode
(hex)
(dez)
Font
U+2B8A
11146
Symbola
U+2B89
11145
Symbola
U+2B8B
11147
Symbola
U+1F860 129120
Symbola
U+1F862 129122
Symbola
U+1F861 129121
Symbola
U+1F863 129123
Symbola
U+1F86C 129132
Symbola
U+1F86D 129133
Symbola
U+1F86F 129135
Symbola
U+1F86E 129134
Symbola
1F878
129144
Symbola
U+2794
10132
Arial Unicode
1F879
129145
Symbola
1F873
129139
Symbola
1F874
129140
Symbola
1F875
129141
Symbola
1F877
129143
Symbola
1F876
129142
Symbola
Leftwards white arrow
U+21E6
8678
Cambria
61680
Rightwards white arrow
U+21E8
8680
Cambria
0xF1
61681
Upwards white arrow
U+21E7
8679
Cambria
242
0xF2
61682
Downwards white arrow
U+21E9
8681
Cambria

243
0xF3
61683
Left right white arrow
U+2B04
11012
Cambria

244
0xF4
61684
Up down white arrow
U+21F3
8691
Cambria
Tabelle 7.2 (10 von 10)
Wingdings- dez hex 44 PUA 45
Zeichen

Name des
Zeichens 46
Unicode Unicode
(hex)
(dez)
Font
(nicht ganz entsprechend)
245
0xF5
61685
NORTH WEST DOUBLE
U+21D6
8662
Cambria Math
U+21D7
8663
Cambria Math
U+21D9
8665
Cambria Math
U+21D8
8664
Cambria Math
White rectangle
U+25AD
9645
Cambria Math
Times New
Roman
ARROW
NORTH EAST DOUBLE

246
0xF6
61686

247
0xF7
61687

248
0xF8
61688
249
0xF9
61689
250
0xFA 61690
White small square
U+25AB
9643

251
0xFB 61691
Ballot X
U+2717
10007
Arial Unicode

252
0xFC 61692
Check mark
U+2713
10003
Arial Unicode
Ballot box with X
(font-weight: bold)
U+2612
9746
Arial Unicode
X IN A RECTANGLE BOX
U+2327
8999
Cambria
U+2611
9745
Arial Unicode



253
0xFD 61693
ARROW
SOUTH WEST DOUBLE
ARROW
SOUTH EAST DOUBLE
ARROW

254
0xFE 61694
Ballot box with check
(font-weight: bold)

255
0xFF
Windows logo
61695
7.3.1 Auswertung der geeigneten Ersatz-Schriftarten für "Wingdings"
Von den 224 Zeichen der Schriftart Wingdings lassen sich 156 Zeichen durch UnicodeZeichen ersetzen, die im Computer mit Word 2010 vorhanden sind:
— 46 mit Cambria;
— 6 mit Cambria Math (die nicht mit Cambria darstellbar sind);
— 5 weitere Zeichen mit Times New Roman oder Arial, die nicht mit Cambria darstellbar sind;
— 112 Zeichen mit Arial Unicode, davon 66 Zeichen, die nicht mit Cambria darstellbar sind (im
Makro werden 60 Zeichen mit Arial Unicode wiedergegeben);
— 30 Zeichen mit Segoe UI Symbol, die nicht mit den obigen Fonts darstellbar sind;
Für den Ersatz von weiteren Wingdings-Zeichen ist, soweit Unicode-Entsprechungen
existieren, ein zusätzlicher Font nötig wie "Symbola" [10], der aber im Internet zum
kostenlosen Download angeboten wird. Bei Verwendung von "Symbola" wird übrigens
"Segoe UI Symbol" überflüssig. Es lassen sich damit die meisten der noch fehlenden
Wingdings-Zeichen ersetzen (in der obigen Tabelle 3.2 in roter Schrift).
Für 22 Wingdings-Zeichen habe ich noch keine Ersatzzeichen gefunden. Ob es dazu
überhaupt welche gibt, weiß ich nicht.
99
7.4 Einige gelöste Probleme
7.4.1 Erzeugung von Zeichen einer höherer Unicode-Ebene
Der Makro-Befehl "Chr(#)" ist nur bis zum dezimalen Code 254 geeignet. Für Zeichen mit
mit höherem Dezimalcode bis 65 535 ist der Befehl "ChrW(#)" geeignet. Für Zeichen aus
höheren Unicode-Ebenen ist zu tricksen, dafür kann man in Word die sogenannten
"Surrogate" nutzen.
Tabelle 7.3: Einige Unicode-Bereiche
Ebene
Unicode
(hexadezimal)
0 bis FF
Unicode
(dezimal)
0 bis 255
00 00 bis FF FF
0 bis 65535
Surrogat 1 (High
Surrogates )
D8 00 bis DB FF
55 296 bis
56 319
Surrogat 2 (Low
Surrogates )
DC 00 bis DF FF
56 320 bis
57 343
Unicode Blöcke
ASCII-Bereich
Ebene 0: BMP
(Basic Multilingual Plane)
Befehl
Chr(#)
...
0
ChrW(#)
...
1
Ebene 1: SMP
(Supplementary
Multilingual Plane)
65 536 bis
1 00 00 bis 1 FF FF
131 071
ChrW(#)
funktioniert hier
nicht!
Der Unicode-Wert wird in zwei 16-Bit-Codewerte, sogenannte "Surrogate", zerlegt. Dieses
war in ISO/IEC 10646:2003, Anhang C 48, beschrieben. Ich programmierte hieraus eine
Funktion "ChrXXL(#)".
7.4.2 Fehlende Freiheit zur Wahl der Schriftart bei einigen Zeichen seit der
Installation des Kompatibilitäts-Pack
Bei einigen Zeichen kann in Word die Schriftart nicht mehr frei gewählt werden.
Möglicherweise ist das eine Folge der Installation des Kompatibilitäts-Pack für ".docx"Dateien in Word 2000.
Am krassesten ist dies in Word 2000 bei "NEGATIVE CIRCLED DIGIT ZERO", wo
Word 2000 zwangsweise Arial Unicode zugeordnet, obwohl Arial Unicode dieses Zeichen
nicht hat (Stand: 10. August 2014), und selbst von Hand lässt sich hier keine andere Schriftart
zuordnen (obwohl vier (4!) bei mir vorhandene Schriftarten dieses Zeichen haben und es auch
bis Frühjahr 2014 funktionierte!).
48
100
Inzwischen ersetzt, aber in der Neuausgabe findet sich die Rechenformel nicht mehr in dieser
Form.

139 0x8B 61579
NEGATIVE CIRCLED
U+24FF
DIGIT ZERO
9471
⓿
Cambria;
RomanCyrillic Std;
Code 2000;
Everson
Bild 7.1: Auszug aus Tabellen 7.2: "NEGATIVE CIRCLED DIGIT ZERO"
Jedoch auch in Word 2010 kann ich bei einigen Zeichen die Schriftart nicht mehr per Makro
wählen. Es funktioniert dort immerhin noch die Zuweisung per Hand.
Abhilfe: Schutz per Feldfunktion "Symbol-Feld"
Sonderzeichen können mitsamt Schriftart und Schriftgröße mittels einer Feldfunktion gegen
versehentliche Veränderungen von Schriftart und Schriftgröße geschützt werden, und es hilft
auch, wenn Word bei einigen Sonderzeichen jetzt keine freie Wahl des Fonts mehr erlaubt
(Stand August bis November 2014).
ANMERKUNG: Die im Folgenden gezeigten Feld-Inhalte werden auf dem Bildschirm an der
Cursorstelle jeweils mit Shift + F9 angezeigt oder mittels Anklicken mit rechter Maustaste und
Wählen "Feldfunktion aus/ein".
b) Feldergebnis, nach nochmaligem Drücken von Strg + F9:
Das Zeichen Omega kann sein:
Ω,Ω,Ω;
bzw. mit Unicode:
Ω,Ω, Ω.
Bild 7.2: Screenshot von Buchstaben, die mit Feldfunktion geschützt sind
Will man Unicode-Zeichen festlegen (d. h. Codes über dezimal 255 nach ISO/IEC 10646), ist
im Feld zusätzlich der Schalter "\u" zu setzen. Verwendet man dabei hexadezimale Codes, ist
"0x" vor den Zahlenwert zu setzen (siehe auch das Beispiel des letzten Omega in Bild 7.2).
Die wichtigesten Schalter der Feldfunktion
\f
Der gewünschte Name der Schriftart, die das einzufügende Zeichen enthält.
\s
Die gewünschte Schriftgröße in Punkt (optional).
\u
Für Unicode nötiger Schalter (für alle Zeichen mit Codes über dezimal 255). Legt fest, dass
Unicode-Zeichen verwendet werden.
Man sieht im Bild oben, dass man für die Schriftart "Symbol" keinen Schalter "/u" setzt, weil
diese kein Unicode ist.
101
7.4.3 Dokumentvorlage mit fertigen Makros und Buttons
Die Makros aus Abschnitt 7.6 und aus Abschnitt 8 habe ich in meiner fertig downloadbaren
Dokumentvorlage ergänzt, in dem ich bereits das Makro zur Analyse von Schrift- und
Sonderzeichen untergebracht hatte, siehe [2] und Impressum.
Das folgende Bild zeigt die Symbolleiste dieser Dokumentvorlage in Word 2000 und
Word 2003. In Word 2007 und höher sind diese Symbolleisten über das Ribbon-Tab "AddIns" zugänglich.
Bild 7.3: Screenshot der Dokumentvorlage "Unicode-Makros-kompakt.dot"
Ich selbst verwende allerdings meistens lieber Tastenkürzel.
7.5 Problem bei fehlender Schriftart "Symbola"
Wenn der Anwender eine der verwendeten Fonts (Schriftarten) nicht hat, muss er das Makro
entsprechend abändern oder sich die Schriftart aus dem Internet downloaden.
Um dem Anwender der fertigen Dokumentvorlage mit Makro (siehe 7.4.3) dessen
Anwendung zu erleichtern, habe ich im Makro eine Abfrage eingebaut, so dass beim Fehlen
der zu installierenden Schriftart "Symbola" keine Unicode-Zeichen erzeugt werden, die nur
mit "Symbola" darstellbar sind. Nicht in Unicode darstellbare Zeichen werden entsprechend
eingefärbt.
Dafür habe ich in der Dokumentvorlage drei zusätzliche Unterprozeduren eingebaut:
' Wenn Symbola installiert, dieses verwenden:
If Fkt_FontIsInstalled("Symbola") = True Then
''MsgBox "Es ist Symbola vorhanden."
Call Wingdings_Symbola(ys) ' Unterprozedur für Ersatz mit Symbola ohne Segoe
Else
''MsgBox "Es wird Segoe UI Symbol verwendet."
Call Wingdings_Segoe(ys)
' Unterprozedur für Ersatz nur mit Segoe
End If
Private Function Fkt_FontIsInstalled(FontName As String) As Boolean
' Quelle: Mehrere Internet-Quellen (herber.de und ms-office-formum.net),
' Download 21.12.2014.
Dim sFond As New StdFont
sFond.Name = FontName
Fkt_FontIsInstalled = StrComp(FontName, sFond.Name, vbTextCompare) = 0
End Function
102
7.6 Das fertige Makro zum Ersatz der Windows-Sonderschriftarten
"Symbol" und "Wingdings" durch Unicode-Zeichen
' Makromodul "Symbol_Wingdings_in_Unicode"
Option Explicit
' Makro zum Entfernen der Fonts "Symbol" und "Wingdings" für Word 2000 und höher.
' Dipl.-Ing. H. Chris Gast, Berlin (c) 2010/2011, neu August 2014, Stand 8. Juni 2015.
' http://www.siebener-kurier.de/chris-aufsaetze
'
' Funktioniert von Word 2000 bis Word 2010, Windows XP und Windows 7.
' Dieses Makro ersetzt gründlich alle Symbol- und die Wingdings-Zeichen, soweit möglich.
'
' Die ersetzen Symbol- und die Wingdings-Zeichen werden gelb markiert,
' die nicht-ersetzten werden rot markiert.
' Unerkannte Zeichen (zum Beipiel Webdings) und Windows-Sonderzeichen
' mit kombinierenden Zeichen werden dunkelrosa markiert.
'
' Dieses Makro erfasst auch Fälle von Word-Dokumenten, wo das bisherige Makro von 2009 versagte.
'
' Das vorübergehende Abschalten der Bildschirm-Aktalisierung beschleunigt das Makro.
'
' Zeitmessung, auf eine Stelle gerundet.
'
' "mü" und "Omega" werden je nach steil oder kursiv unterschiedlich ersetzt.
'
' Bei einigen ersetzten Zeichen habe ich jetzt die Schriftart (Font) durch Feldfunktion geschützt,
' weil bei diesen die Font-Zuweisung seit Installation des Kompatibilitätspack für ".docx"
' nicht mehr funktioniert (2014). Dies machte ich jedoch (noch) nicht in allen Fällen.
'
' Wenn es die Schriftart "Symbola" auf dem Computer gibt, wird diese beim Ersatz
' von Wingdingszeichen bevorzugt (Bezugsquelle: George Douros, http://users.teilar.gr/~g1951d).
'
Private jSymbWingErsetztes As Integer ' ersetzte Windows-Sonderzeichen
Private jNichtersetztes As Integer ' nicht-ersetzte Windows-Sonderzeichen
Private jUnerkanntes As Integer
' unklare Zeichen
Sub Symbol_Wingdings_in_Unicode_im_gesamten_Dokument()
' Dipl.-Ing Hanna-Chris Gast, 2011, neu August 2014, 23. November 2014, 8. Juni 2015.
' Rahmenprozedur, ruft alle Dokumentkomponenten auf
' (außer Kopf- und Fußzeilen in weiteren Sections).
' ********************************************************
Dim rng0 As Range ' Cursorposition vor Beginn des Makros
Dim Ansichtstyp1 As Integer
Dim Rng1 As Range ' jeweilige Dokumentkomponente
' **********************************************
'
Zeitmessen für die Makromodul-Dauer
Dim Zeit1 As Single
Dim Zeit2 As Single
Dim Zeitdauer As Single
Zeit1 = Timer
' **********************************************
' Ursprüngliche Markierung merken:
Set rng0 = Selection.Range
' **********************************************
StatusBar = " Bitte warten - das Makro läuft."
' **********************************************
' Zur Beschleunigung Bildschirmaktualisierung während des Programms abstellen:
103
Application.ScreenUpdating = False
Options.Pagination = False
' **********************************************
' Zuerst die vorhandene Bildschirmansicht speichern und ggf. Bildschirm auf "Normalansicht" stellen:
Ansichtstyp1 = (ActiveWindow.View.Type)
If ActiveWindow.View.Type = wdNormalView = False Then
ActiveWindow.View.Type = wdNormalView
End If
' **********************************************
''' Zuerst alle_Markierfarben beseitigen im Hauptteil, in Fußnoten und in Kopfzeilen usw.
''' (erfasst nicht Kopf- und Fußzeilen weiterer Sections).
'' For Each Rng1 In ActiveDocument.StoryRanges
''
Rng1.HighlightColorIndex = wdNoHighlight
''
Rng1.Font.Shading.BackgroundPatternColor = wdColorAutomatic
''
Rng1.Font.Color = wdColorAutomatic
'' Next Rng1
' **********************************************
' Zählung der Kombinierten Zeichen auf Null stellen:
jUnerkanntes = 0
jSymbWingErsetztes = 0
jNichtersetztes = 0
' **********************************************
' Aufruf der eigentlichen Suche in allen Dokumentkomponenten
' (Kopf- und Fußzeilen in weiteren Sections werden nicht erfasst):
For Each Rng1 In ActiveDocument.StoryRanges
Call Symbol_Wingdings_in_Cambria(Rng1)
Next Rng1
' **********************************************
' In Hauptkomponente zurückkehren:
ActiveDocument.StoryRanges(wdMainTextStory).Select
If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
ActiveWindow.View.Type = wdPrintView
End If
' **********************************************
' Markierfarbe wieder zurückstellen:
Options.DefaultHighlightColorIndex = wdYellow
' Alte Cursorposition wieder herstellen:
rng0.Select
' Ansichtstyp zurückstellen, Seitenumbrüche und Bildschirm wieder anzeigen:
ActiveWindow.View.Type = Ansichtstyp1
Options.Pagination = True
Application.ScreenUpdating = True
' Alte Cursorposition wieder herstellen:
rng0.Select
' ************************************
' Im Suchen/Ersetzen-Menü alles zurückstellen
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
' **************************************
' Zeitmessen für die Makromodul-Dauer:
104
Zeit2 = Timer
Zeitdauer = Format((Zeit2 - Zeit1), "##,##0.000")
Zeitdauer = Round(Zeitdauer, 1)
' *************************************
' Protokoll:
If jUnerkanntes > 0 Then
' es gab Zeichen, die nicht erkannt wurden, etwa weitere Windows-Sonderschriftarten.
MsgBox "Die " & jSymbWingErsetztes _
& " ersetzten Symbol- und Wingdings-Zeichen wurden gelb, " _
& vbCrLf & "die " & jNichtersetztes & " nicht ersetzten Zeichen wurden rot markiert." _
& vbCrLf & "Es gab " & jUnerkanntes & " unerkannte Zeichen (rosa gefärbt)." _
& vbCrLf & vbCrLf & "Die Rechenzeit betrug " & Zeitdauer & " Sekunden."
Else
' alle Zeichen wurden erkannt.
MsgBox "Die " & jSymbWingErsetztes _
& " ersetzten Symbol- und Wingdings-Zeichen wurden gelb, " _
& vbCrLf & "die " & jNichtersetztes & " nicht ersetzten Zeichen rot markiert." _
& vbCrLf & vbCrLf & "Die Rechenzeit betrug " & Zeitdauer & " Sekunden."
End If
End Sub
' ---------------------------------------------------------------------------------------------------------
Sub Symbol_Wingdings_in_Unicode_nur_Markierten_Text()
' Dipl.-Ing Hanna-Chris Gast, 26. September 2014.
Dim rng0 As Range
Set rng0 = Selection.Range
Call Symbol_Wingdings_in_Cambria(rng0)
rng0.Select
End Sub
' ---------------------------------------------------------------------------------------------------------
Private Sub Symbol_Wingdings_in_Cambria(Rng1)
' Hanna-Chris Gast, 2011, neu August 2014, September 2014, 8. Juni + 3. August 2015.
' Im jeweiligen Range bzw. Markierung (und nur dort!) alle Symbol- und Wingdings-Zeichen
' durch Unicode-Zeichen soweit wie möglich durch Unicode ersetzen,
' ansonsten rot markieren.
' Unklare Zeichen werden dunkelrosa markiert.
Dim chara As Variant
Dim fs As String
Dim ys As Long
' Vorab in allen Dokument-Komponenten Schriftart "SymbolPS" durch "Symbol" ersetzen
' (dies ist für Computer ohne diese Schriftart wichtig):
Rng1.Find.ClearFormatting
Rng1.Find.Font.NameAscii = "SymbolPS"
Rng1.Find.Replacement.ClearFormatting
Rng1.Find.Replacement.Font.Name = "Symbol"
With Rng1.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
'' .Wrap = wdFindContinue
.Format = True ' Wichtig!
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Rng1.Find.Execute Replace:=wdReplaceAll
' ************************************
105
' Jedes einzelne Zeichen wird mit "Einfügen-Symbol" danach abgefragt,
' ob es ein Windows-Sonderzeichen ist:
For Each chara In Rng1.Characters
' ******
If Asc(chara.Text) < 32 Then
' Steuerzeichen in einer normale Schriftart setzen(3. August 2015):
chara.Font.Name = ActiveDocument.Styles(wdStyleNormal).Font.Name
ElseIf chara.Text = "(" Or chara.Text Like "[" & ChrW(61472) & "-" & ChrW(61695) & "]" Then
chara.Select
With Dialogs(wdDialogInsertSymbol)
fs = .Font
ys = .charNum
End With
'
If fs <> "(normaler Text)" And fs <> "" _
Or ys < 0 And chara.Text = "(" Then
ys = (ys + 4096 + 61440)
If fs = "Symbol" Or fs = "SymbolPS" Then
jSymbWingErsetztes = jSymbWingErsetztes + 1
Call Symbol_U(ys)
ElseIf fs = "Wingdings" Then
jSymbWingErsetztes = jSymbWingErsetztes + 1
Call Wingdings_U(ys)
Else
' sonstige Windows-Sonderschriftart:
'' chara.Font.Color = wdColorRed
Selection.Range.HighlightColorIndex = wdPink
jUnerkanntes = jUnerkanntes + 1
''' Else
''' '' MsgBox "Achtung, unerkannte Schriftart!"
''' fs = "???"
''' Selection.Range.HighlightColorIndex = wdRed ' rot
''' jUnerkanntes = jUnerkanntes + 1
''' ' ((färbte mir fälschlich alle "Klammer-Auf"-Zeichen!))
End If
End If
End If
' ******
Next chara
' ******************************************************************
' Windows-Sonderzeichen mit einem diakritischen Unicode-Zeichen suchen und rot markieren
' (diese zusätzliche Abfrage ist nur ab Word 2003 nötig, da dort der obige
' Ersatz durch Unicode-Zeichen nicht funktioniert):
Rng1.Select
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "?[" & ChrW(768) & "-" & ChrW(879) & "]"
.Replacement.Text = ""
.Highlight = False
.Forward = True
.MatchWildcards = True ' ist hier unbedingt nötig!!!
Do While .Execute
' (tue, solange etwas gefunden wird)
If InStr(Rng1, Selection) = 0 Then Exit Do
If Dialogs(wdDialogInsertSymbol).Font <> "(normaler Text)" Then
Selection.Range.HighlightColorIndex = wdPink ' wdRed
jUnerkanntes = jUnerkanntes + 1
End If
Loop
End With
' **************************
' und nun Windows-Sonderzeichen mit 2 diakritischen Zeichen (für Word 2003 aufwärts):
106
Rng1.Select
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "?[" & ChrW(768) & "-" & ChrW(879) & "][" & ChrW(768) & "-" & ChrW(879) & "]"
.Replacement.Text = ""
.Highlight = False
.Forward = True
.MatchWildcards = True ' ist hier unbedingt nötig!!!
Do While .Execute
' (tue, solange etwas gefunden wird)
If InStr(Rng1, Selection) = 0 Then Exit Do
If Dialogs(wdDialogInsertSymbol).Font <> "(normaler Text)" Then
Selection.Range.HighlightColorIndex = wdPink
jUnerkanntes = jUnerkanntes + 1
End If
Loop
End With
' **************************
' Restliche (unzulässige?) Zeichen in der Private-Use-Area rot markieren,
' aber keine normale "Klammer auf" wie in der Schleife oben:
Rng1.Select
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "[" & ChrW(61473) & "-" & ChrW(61695) & "]"
.Replacement.Text = ""
.Highlight = False
.Forward = True
.MatchWildcards = True ' ist hier unbedingt nötig!!!
Do While .Execute
' (tue, solange etwas gefunden wird)
If InStr(Rng1, Selection) = 0 Then Exit Do
fs = Dialogs(wdDialogInsertSymbol).Font
' Abfrage, ob Symbol, Wingdings oder sonstige Sonderschrift:
' Wenn Schriftart unklar, Fragezeichen setzen und rot markieren.
If fs = "(normaler Text)" Or fs = "" Then
'' MsgBox "Achtung!"
fs = "???"
Selection.Range.HighlightColorIndex = wdPink '' wdRed ' rot
jUnerkanntes = jUnerkanntes + 1
End If
Loop
End With
End Sub
' ---------------------------------------------------------------------------------------------------------
Private Sub Symbol_U(ys)
' H. Chris Gast, April 2011, für Cambria August 2014, 23. November 2014, 8. Juni 2015.
' Mit dieser Unterprozedur werden Symbol-Zeichen durch Cambria-Zeichen ersetzt,
' soweit möglich, bei zwei Zeichen durch Times New Roman.
' Mit Feldfunktionen wird bei einigen Zeichen die Schriftart erzwungen.
Select Case ys
Case Is = 61472
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(160)
' NO-BREAK SPACE
Case Is = 61473
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(33)
' EXCLAMATION MARK
107
Case Is = 61474
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8704)
' FOR ALL
Case Is = 61475
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(35)
' NUMBER SIGN
Case Is = 61476
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8707)
' THERE EXISTS
Case Is = 61477
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(37)
' PERCENT SIGN
Case Is = 61478
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(38)
' AMPERSAND
Case Is = 61479
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8715)
' CONTAINS AS MEMBER
Case Is = 61480
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(40)
' LEFT PARENTHESIS
Case Is = 61481
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(41)
' RIGHT PARENTHESIS
Case Is = 61482
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8727)
' ASTERISK OPERATOR
Case Is = 61483
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(43)
' PLUS SIGN
Case Is = 61484
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(44)
' COMMA
Case Is = 61485
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8722)
' MINUS SIGN
Case Is = 61486
Selection.Font.Name = "Cambria"
108
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(46)
' FULL STOP
Case Is = 61487
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(47)
' SOLIDUS
Case Is = 61488
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(48)
' DIGIT ZERO
Case Is = 61489
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(49)
' DIGIT ONE
Case Is = 61490
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(50)
' DIGIT TWO
Case Is = 61491
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(51)
' DIGIT THREE
Case Is = 61492
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(52)
' DIGIT FOUR
Case Is = 61493
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(53)
' DIGIT FIVE
Case Is = 61494
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(54)
' DIGIT SIX
Case Is = 61495
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(55)
' DIGIT SEVEN
Case Is = 61496
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(56)
' DIGIT EIGHT
Case Is = 61497
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(57)
' DIGIT NINE
Case Is = 61498
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(58)
109
' COLON
Case Is = 61499
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(59)
' SEMICOLON
Case Is = 61500
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(60)
' LESS-THAN SIGN
Case Is = 61501
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(61)
' EQUALS SIGN
Case Is = 61502
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(62)
' GREATER-THAN SIGN
Case Is = 61503
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(63)
' QUESTION MARK
Case Is = 61504
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8773)
' APPROXIMATELY EQUAL TO
Case Is = 61505
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(913)
' GREEK CAPITAL LETTER ALPHA
Case Is = 61506
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(914)
' GREEK CAPITAL LETTER BETA
Case Is = 61507
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(935)
' GREEK CAPITAL LETTER CHI
Case Is = 61508
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
''Selection.TypeText Text:=ChrW(8710)
' GREEK CAPITAL LETTER DELTA oder INCREMENT
' Das Delta-Zeichen ist immer steil, ein Formelzeichen ist kursiv:
If Selection.Font.Italic = True Then
Selection.TypeText Text:=ChrW(916)
' GREEK CAPITAL LETTER OMEGA (als Formelzeichen kursiv)
Else
Selection.TypeText Text:=ChrW(8710)
' Das "Increment" ist stets steil.
End If
Case Is = 61509
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
110
Selection.TypeText Text:=ChrW(917)
' GREEK CAPITAL LETTER EPSILON
Case Is = 61510
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(934)
' GREEK CAPITAL LETTER PHI
Case Is = 61511
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(915)
' GREEK CAPITAL LETTER GAMMA
Case Is = 61512
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(919)
' GREEK CAPITAL LETTER ETA
Case Is = 61513
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(921)
' GREEK CAPITAL LETTER IOTA
Case Is = 61514
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(977)
' GREEK THETA SYMBOL
Case Is = 61515
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(922)
' GREEK CAPITAL LETTER KAPPA
Case Is = 61516
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(923)
' GREEK CAPITAL LETTER LAMDA
Case Is = 61517
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(924)
' GREEK CAPITAL LETTER MU
Case Is = 61518
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(925)
' GREEK CAPITAL LETTER NU
Case Is = 61519
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(927)
' GREEK CAPITAL LETTER OMICRON
Case Is = 61520
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(928)
' GREEK CAPITAL LETTER PI
Case Is = 61521
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(920)
' GREEK CAPITAL LETTER THETA
111
Case Is = 61522
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(929)
' GREEK CAPITAL LETTER RHO
Case Is = 61523
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(931)
' GREEK CAPITAL LETTER SIGMA
Case Is = 61524
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(932)
' GREEK CAPITAL LETTER TAU
Case Is = 61525
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(933)
' GREEK CAPITAL LETTER UPSILON
Case Is = 61526
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(962)
' GREEK SMALL LETTER FINAL SIGMA
Case Is = 61527
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
'' Selection.TypeText Text:=ChrW(937)
' GREEK CAPITAL LETTER OMEGA oder OHM SIGN, dez. 8486
' Das Ohmzeichen ist immer steil, ein Formelzeichen kursiv:
If Selection.Font.Italic = True Then
Selection.Text = ChrW(937)
' GREEK CAPITAL LETTER OMEGA
Else
Selection.Text = ChrW(8486)
' OHM SIGN, dez. 8486
' Abhilfe, weil Word hier fälschlich exotische Fonts verwendet:
Call Markiertes_mit_Feldfunktion_schuetzen
End If
Case Is = 61528
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(926)
' GREEK CAPITAL LETTER XI
Case Is = 61529
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(936)
' GREEK CAPITAL LETTER PSI
Case Is = 61530
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(918)
' GREEK CAPITAL LETTER ZETA
Case Is = 61531
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(91)
' LEFT SQUARE BRACKET
Case Is = 61532
Selection.Font.Name = "Cambria"
112
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8756)
' THEREFORE
Case Is = 61533
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(93)
' RIGHT SQUARE BRACKET
Case Is = 61534
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8869)
' UP TACK
Case Is = 61535
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(95)
' LOW LINE
Case Is = 61537
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(945)
' GREEK SMALL LETTER ALPHA
Case Is = 61538
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(946)
' GREEK SMALL LETTER BETA
Case Is = 61539
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(967)
' GREEK SMALL LETTER CHI
Case Is = 61540
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(948)
' GREEK SMALL LETTER DELTA
Case Is = 61541
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(949)
' GREEK SMALL LETTER EPSILON
Case Is = 61542
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(981)
' korrigiert, GREEK PHI SYMBOL
Case Is = 61543
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(947)
' GREEK SMALL LETTER GAMMA
Case Is = 61544
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(951)
' GREEK SMALL LETTER ETA
Case Is = 61545
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(953)
113
' GREEK SMALL LETTER IOTA
Case Is = 61546
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(966)
' korrigiert, GREEK SMALL LETTER PHI
Case Is = 61547
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(954)
' GREEK SMALL LETTER KAPPA
Case Is = 61548
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(955)
' GREEK SMALL LETTER LAMDA
Case Is = 61549
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
'' Selection.TypeText Text:=ChrW(956)
' GREEK SMALL LETTER MU, könnte auch MICRO SIGN, dez. 181, sein.
' Formelzeichen werden kursiv geschrieben, das Mikrozeichen steil:
If Selection.Font.Italic = True Then
Selection.TypeText Text:=ChrW(956)
' GREEK CAPITAL LETTER MU
Else
Selection.TypeText Text:="µ"
End If
Case Is = 61550
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(957)
' GREEK SMALL LETTER NU
Case Is = 61551
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(959)
' GREEK SMALL LETTER OMICRON
Case Is = 61552
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(960)
' GREEK SMALL LETTER PI
Case Is = 61553
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(952)
' GREEK SMALL LETTER THETA
Case Is = 61554
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(961)
' GREEK SMALL LETTER RHO
Case Is = 61555
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(963)
' GREEK SMALL LETTER SIGMA
Case Is = 61556
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(964)
114
' GREEK SMALL LETTER TAU
Case Is = 61557
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(965)
' GREEK SMALL LETTER UPSILON
Case Is = 61558
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(982)
' GREEK PI SYMBOL
Case Is = 61559
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(969)
' GREEK SMALL LETTER OMEGA
Case Is = 61560
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(958)
' GREEK SMALL LETTER XI
Case Is = 61561
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(968)
' GREEK SMALL LETTER PSI
Case Is = 61562
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(950)
' GREEK SMALL LETTER ZETA
Case Is = 61563
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(123)
' LEFT CURLY BRACKET
Case Is = 61564
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(124)
' VERTICAL LINE
Case Is = 61565
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(125)
' RIGHT CURLY BRACKET
Case Is = 61566
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
''Selection.TypeText Text:=ChrW(8764) ' ergibt fälschlich exotischen Font
' TILDE Operator wegen Gleichheit mit Letex
' eigentlich reicht die normale Tilde:
Selection.Text = ChrW(126)
' ***
Case Is = 61600
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8364)
' EURO SIGN, bzw. nicht definiert
Case Is = 61601
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
115
Selection.TypeText Text:=ChrW(978)
' GREEK UPSILON WITH HOOK SYMBOL
Case Is = 61602
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
'Selection.TypeText Text:=ChrW(8242)
Selection.Text = ChrW(8242)
Selection.Font.Name = "Cambria"
''If Selection.Font.Name <> "Cambria" Then MsgBox "!!!": End
' Abhilfe, weil Word hier fälschlich exotische Fonts verwendet:
Call Markiertes_mit_Feldfunktion_schuetzen
' PRIME
Case Is = 61603
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.Text = ChrW(8804)
' LESS-THAN OR EQUAL TO
' Abhilfe, weil Word hier fälschlich exotische Fonts verwendet:
Call Markiertes_mit_Feldfunktion_schuetzen
' ***
Case Is = 61604
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8260)
' FRACTION SLASH
Case Is = 61605
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.Text = ChrW(8734)
' INFINITY
' Abhilfe, weil Word hier fälschlich exotische Fonts verwendet:
Call Markiertes_mit_Feldfunktion_schuetzen
' ***
Case Is = 61606
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(402)
' LATIN SMALL LETTER F WITH HOOK
Case Is = 61607
Selection.Font.Name = "Times New Roman"
Selection.Range.HighlightColorIndex = wdTeal
Selection.TypeText Text:=ChrW(9827)
' BLACK CLUB SUIT
Case Is = 61608
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9830)
' BLACK DIAMOND SUIT
Case Is = 61609
Selection.Font.Name = "Times New Roman"
Selection.Range.HighlightColorIndex = wdTeal
Selection.TypeText Text:=ChrW(9829)
' BLACK HEART SUIT
Case Is = 61610
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9824)
' BLACK SPADE SUIT
Case Is = 61611
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8596)
116
' LEFT RIGHT ARROW
Case Is = 61612
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8592)
' LEFTWARDS ARROW
Case Is = 61613
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8593)
' UPWARDS ARROW
Case Is = 61614
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8594)
' RIGHTWARDS ARROW
Case Is = 61615
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8595)
' DOWNWARDS ARROW
Case Is = 61616
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(176)
' DEGREE SIGN
Case Is = 61617
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(177)
' PLUS-MINUS SIGN
Case Is = 61618
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.Text = ChrW(8243)
' DOUBLE PRIME
' Abhilfe, weil Word hier fälschlich exotische Fonts verwendet:
Call Markiertes_mit_Feldfunktion_schuetzen
Case Is = 61619
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
'Selection.TypeText Text:=ChrW(8805)
Selection.Text = ChrW(8805)
' GREATER-THAN OR EQUAL TO
' Abhilfe, weil Word hier fälschlich exotische Fonts verwendet:
Call Markiertes_mit_Feldfunktion_schuetzen
Case Is = 61620
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(215)
' MULTIPLICATION SIGN
Case Is = 61621
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8733)
' PROPORTIONAL TO
Case Is = 61622
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8706)
' PARTIAL DIFFERENTIAL
Case Is = 61623
117
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8226)
' BULLET
Case Is = 61624
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(247)
' DIVISION SIGN
Case Is = 61625
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8800)
' NOT EQUAL TO
Case Is = 61626
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8801)
' IDENTICAL TO
Case Is = 61627
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.Text = ChrW(8776)
' ALMOST EQUAL TO
' Abhilfe, weil Word hier fälschlich exotische Fonts verwendet:
Call Markiertes_mit_Feldfunktion_schuetzen
' ***
Case Is = 61628
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8230)
' HORIZONTAL ELLIPSIS
Case Is = 61629
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(124)
' Vertical line extension for arrows
Case Is = 61630
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8212)
' horizontal line extension for arrows
Case Is = 61631
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8629)
' DOWNWARDS ARROW WITH CORNER LEFTWARDS
Case Is = 61632
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8501)
' ALEF SYMBOL
Case Is = 61633
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8465)
' BLACK-LETTER CAPITAL I
Case Is = 61634
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8476)
' BLACK-LETTER CAPITAL R
118
Case Is = 61635
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8472)
' SCRIPT CAPITAL P
Case Is = 61636
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8855)
' CIRCLED TIMES
Case Is = 61637
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8853)
' CIRCLED PLUS
Case Is = 61638
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.Text = ChrW(8960)
' DIAMETER SIGN (es könnte auch EMPTY SET ChrW(8709), das Zeichen für leere Menge
' sein, für das Cambria ungeeignet ist.
Case Is = 61639
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8745)
' INTERSECTION
Case Is = 61640
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8746)
' UNION
Case Is = 61641
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8835)
' SUPERSET OF
Case Is = 61642
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8839)
' SUPERSET OF OR EQUAL TO
Case Is = 61643
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8836)
' NOT A SUBSET OF
Case Is = 61644
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8834)
' SUBSET OF
Case Is = 61645
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8838)
' SUBSET OF OR EQUAL TO
Case Is = 61646
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8712)
' ELEMENT OF
Case Is = 61647
119
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8713)
' NOT AN ELEMENT OF
Case Is = 61648
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8736)
' ANGLE
Case Is = 61649
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8711)
' NABLA
Case Is = 61650
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(174)
' REGISTERED SIGN,Serifenschrift
Case Is = 61651
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(169)
' COPYRIGHT SIGN,Serifenschrift
Case Is = 61652
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8482)
' TRADE MARK SIGN, Serifenschrift
Case Is = 61653
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8719)
' N-ARY PRODUCT
Case Is = 61654
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8730)
' SQUARE ROOT
Case Is = 61655
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8901)
' DOT OPERATOR
Case Is = 61656
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(172)
' NOT SIGN
Case Is = 61657
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8743)
' LOGICAL AND
Case Is = 61658
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8744)
' LOGICAL OR
Case Is = 61659
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
120
Selection.TypeText Text:=ChrW(8660)
' LEFT RIGHT DOUBLE ARROW
Case Is = 61660
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8656)
' LEFTWARDS DOUBLE ARROW
Case Is = 61661
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8657)
' UPWARDS DOUBLE ARROW
Case Is = 61662
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8658)
' RIGHTWARDS DOUBLE ARROW
Case Is = 61663
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8659)
' DOWNWARDS DOUBLE ARROW
Case Is = 61664
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9674)
' LOZENGE
Case Is = 61665
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9001)
' LEFT-POINTING ANGLE BRACKET
' (LESS-THAN SIGN = dez. 060)
' (MATHEMATICAL LEFT ANGLE BRACKET, dez. 10216)
Case Is = 61666
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdTeal
Selection.TypeText Text:=ChrW(174)
' REGISTERED SIGN,sans serif
Case Is = 61667
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdTeal
Selection.TypeText Text:=ChrW(169)
' COPYRIGHT SIGN,sans serif
Case Is = 61668
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdTeal
Selection.TypeText Text:=ChrW(8482)
' TRADE MARK SIGN, sans serif
Case Is = 61669
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8721)
' N-ARY SUMMATION
Case Is = 61670
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9115)
' LEFT PARENTHESIS UPPER HOOK
Case Is = 61671
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
121
Selection.TypeText Text:=ChrW(9116)
' LEFT PARENTHESIS EXTENSION
Case Is = 61672
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9117)
' LEFT PARENTHESIS LOWER HOOK
Case Is = 61673
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9121)
' LEFT SQUARE BRACKET UPPER CORNER
Case Is = 61674
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9122)
' LEFT SQUARE BRACKET EXTENSION
Case Is = 61675
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9123)
' LEFT SQUARE BRACKET LOWER CORNER
Case Is = 61676
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9127)
' LEFT CURLY BRACKET UPPER HOOK
Case Is = 61677
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9128)
' LEFT CURLY BRACKET MIDDLE PIECE
Case Is = 61678
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9129)
' LEFT CURLY BRACKET LOWER HOOK
Case Is = 61679
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9130)
' CURLY BRACKET EXTENSION
Case Is = 61681
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9002)
' RIGHT-POINTING ANGLE BRACKET,
' (GREATER-THAN SIGN = dez. 62)
' (MATHEMATICAL RIGHT ANGLE BRACKET = dez. 10217)
Case Is = 61682
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8747)
' INTEGRAL
Case Is = 61683
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8992)
' TOP HALF INTEGRAL
Case Is = 61684
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
122
Selection.TypeText Text:=ChrW(9134)
' INTEGRAL EXTENSION
Case Is = 61685
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8993)
' BOTTOM HALF INTEGRAL
Case Is = 61686
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9118)
' RIGHT PARENTHESIS UPPER HOOK
Case Is = 61687
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9119)
' RIGHT PARENTHESIS EXTENSION
Case Is = 61688
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9120)
' RIGHT PARENTHESIS LOWER HOOK
Case Is = 61689
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9124)
' RIGHT SQUARE BRACKET UPPER CORNER
Case Is = 61690
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9125)
' RIGHT SQUARE BRACKET EXTENSION
Case Is = 61691
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9126)
' RIGHT SQUARE BRACKET LOWER CORNER
Case Is = 61692
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9131)
' RIGHT CURLY BRACKET UPPER HOOK
Case Is = 61693
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9132)
' RIGHT CURLY BRACKET MIDDLE PIECE
Case Is = 61694
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9133)
' RIGHT CURLY BRACKET LOWER HOOK
Case Else
' nicht ersetztes Zeichen:
Selection.Range.HighlightColorIndex = wdRed
' Nichtersetztes zählen:
jSymbWingErsetztes = jSymbWingErsetztes - 1
''jUnerkanntes = jUnerkanntes + 1
' (geändert 8.6.2015)
jNichtersetztes = jNichtersetztes + 1
End Select
End Sub
123
' ---------------------------------------------------------------------------------------------------------
Private Sub Wingdings_U(ys)
' Erstellt von H. Chris Gast, 2011 + 2012, neu für Cambria August 2014, Stand 21. Dezember 2014.
' Mit dieser Unterprozedur werden Wingdings-Zeichen durch entsprechende Cambria-Zeichen ersetzt,
' soweit möglich.
' Bei einigen Zeichen wird Cambria per Feldfunktion erzwungen (November 2014)
' Weitere Zeichen mit Font "Symbola" ergänzt 18. Dezember 2014.
' Abfrage ergänzt, ob Font "Symbola" vorhanden ist, 21. Dezember 2014.
' **************************
' Zeichen, die sich durch die Schriftart "Cambria" darstellen lassen:
Select Case ys
Case Is = 61472
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(32)
' Space = einfaches Leerzeichen
Case Is = 61494
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8987)
' Hourglass
Case Is = 61495
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9000)
' Keyboard
Case Is = 61546
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(38)
' Ampersand, lower-case
Case Is = 61547
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(38)
' Ampersand
Case Is = 61556
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10731)
' Black lozenge
Case Is = 61560
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8999)
' X in a rectangle box
Case Is = 61561
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9043)
' APL functional symbol quad up caret
Case Is = 61562
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8984)
' Place of interest sign
Case Is = 61568
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.Text = ChrW(9450)
124
' Circled digit zero
' Abhilfe, weil Word hier fälschlich exotische Fonts verwendet:
Call Markiertes_mit_Feldfunktion_schuetzen
' ***
Case Is = 61569
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9312)
' Circled digit one
Case Is = 61570
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9313)
' Circled digit two
Case Is = 61571
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9314)
' Circled digit three
Case Is = 61572
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9315)
' Circled digit four
Case Is = 61573
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9316)
' Circled digit five
Case Is = 61574
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9317)
' Circled digit six
Case Is = 61575
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9318)
' Circled digit seven
Case Is = 61576
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9319)
' Circled digit eight
Case Is = 61577
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9320)
' Circled digit nine
Case Is = 61578
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9321)
' Circled number ten
Case Is = 61580
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10102)
' Dingbat negative circled digit one
Case Is = 61581
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
125
Selection.TypeText Text:=ChrW(10103)
' Dingbat negative circled digit two
Case Is = 61582
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10104)
' Dingbat negative circled digit three
Case Is = 61583
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10105)
' Dingbat negative circled digit four
Case Is = 61584
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10106)
' Dingbat negative circled digit five
Case Is = 61585
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10107)
' Dingbat negative circled digit six
Case Is = 61586
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10108)
' Dingbat negative circled digit seven
Case Is = 61587
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10109)
' Dingbat negative circled digit eight
Case Is = 61588
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10110)
' Dingbat negative circled digit nine
Case Is = 61589
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10111)
' Dingbat negative circled number ten
Case Is = 61598
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(183)
' Middle dot
Case Is = 61599
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8226)
' Bullet
Case Is = 61601
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9675)
' White circle
Case Is = 61604
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10687)
' CIRCLED BULLET oder "Sun", dez. 9737
126
Case Is = 61617
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8982)
' Position indicator
Case Is = 61618
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10209)
' White concave-sided diamond
Case Is = 61619
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8977)
' Square lozenge
Case Is = 61654
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8998)
' Erase to the right
Case Is = 61679
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8678)
' Leftwards white arrow
Case Is = 61680
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8680)
' Rightwards white arrow
Case Is = 61681
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8679)
' Upwards white arrow
Case Is = 61682
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8681)
' Downwards white arrow
Case Is = 61683
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(11012)
' Left right white arrow
Case Is = 61684
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8691)
' Up down white arrow
Case Is = 61693
Selection.Font.Name = "Cambria"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8999)
' X in a rectangle box (bzw. Ballot box with x, dez. 9746)
' ****************************************************
' Zeichen,die sich mit "Cambria Math" darstellen lassen:
Case Is = 61550
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9632)
' Black square
127
Case Is = 61579
With Selection
.Font.Name = "Cambria" ''"Cambria Math"
.Text = ChrW(9471)
.Range.HighlightColorIndex = wdYellow
.Font.Name = "Cambria" ''"Cambria Math"
End With
' Negative circled digit zero
' Abhilfe, weil Word hier fälschlich exotische Fonts verwendet:
Call Markiertes_mit_Feldfunktion_schuetzen
' ***
Case Is = 61685
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8662)
' NORTH WEST DOUBLE ARROW, nicht ganz entsprechend
Case Is = 61686
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8663)
' NORTH EAST DOUBLE ARROW
Case Is = 61687
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8665)
' SOUTH WEST DOUBLE ARROW
Case Is = 61688
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(8664)
' SOUTH EAST DOUBLE ARROW
Case Is = 61689
Selection.Font.Name = "Cambria Math"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9645)
' White rectangle
' ***************************************************
' Zeichen, die sich durch die Schriftart "Times New Roman" darstellen lassen:
Case Is = 61522
Selection.Font.Name = "Times New Roman"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9788)
' White sun with rays
Case Is = 61548
Selection.Font.Name = "Times New Roman"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9679)
' Black circle
Case Is = 61600
Selection.Font.Name = "Times New Roman"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9642)
' Black small square (etwas vergrößert)
Case Is = 61607
Selection.Font.Name = "Times New Roman"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9642)
' Black small square
Case Is = 61690
Selection.Font.Name = "Times New Roman"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9643)
128
' White small square
' ***************************************************
' Zeichen, die sich durch die Schriftart "Arial Unicode" darstellen lassen:
Case Is = 61473
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9999)
' Pencil
Case Is = 61474
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9986)
' Black scissors
Case Is = 61475
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9985)
' Upper blade scissors
Case Is = 61480
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
' Das schwarze Telefon sieht in "Arial Unicode" sonst zu klein aus:
Selection.Font.Size = Selection.Font.Size + 3
Selection.TypeText Text:=ChrW(9742)
' Black telephone
Case Is = 61481
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9990)
' Telephone location sign
Case Is = 61482
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9993)
' Envelope
Case Is = 61502
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9991)
' Tape drive
Case Is = 61503
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9997)
' Writing hand
Case Is = 61505
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9996)
' Victory hand
Case Is = 61509
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9756)
' White left pointing index
Case Is = 61510
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9758)
' White right pointing index
Case Is = 61511
Selection.Font.Name = "Arial Unicode MS"
129
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9757)
' White up pointing index
Case Is = 61512
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9759)
' White down pointing index
Case Is = 61514
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
'Selection.TypeText Text:=ChrW(9786) ' es gab hier Probleme mit der Schriftart.
Selection.Text = ChrW(9786)
Selection.Font.Size = Selection.Font.Size + 4 ' etwas größer
Selection.Font.Name = "Arial Unicode MS"
' White smiling face
Case Is = 61516
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.Text = ChrW(9785)
Selection.Font.Size = Selection.Font.Size + 4 ' etwas größer
' White frowning face
Case Is = 61518
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9760)
' Skull and crossbones
Case Is = 61521
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9992)
' Airplane
Case Is = 61524
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10052)
' Snowflake
Case Is = 61526
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10014)
' Shadowed white Latin cross
Case Is = 61528
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10016)
' Maltese cross
Case Is = 61529
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10017)
' Star of David
Case Is = 61530
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9770)
' Star and crescent
Case Is = 61531
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9775)
' Yin Yang
130
Case Is = 61532
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(2384)
' Devanagari Om
Case Is = 61533
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9784)
' Wheel of Dharma
Case Is = 61534
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9800)
' Aries
Case Is = 61535
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9801)
' Taurus
Case Is = 61536
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9802)
' Gemini
Case Is = 61537
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9803)
' Cancer
Case Is = 61538
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9804)
' Leo
Case Is = 61539
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9805)
' Virgo
Case Is = 61540
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9806)
' Libra
Case Is = 61541
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9807)
' Scorpio
Case Is = 61542
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9808)
' Sagittarius
Case Is = 61543
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9809)
' Capricorn
Case Is = 61544
Selection.Font.Name = "Arial Unicode MS"
131
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9810)
' Aquarius
Case Is = 61545
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9811)
' Pisces
Case Is = 61549
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10061)
' Shadowed white circle
Case Is = 61551
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9744)
' eigentlich "White square" (dez. 9633), besser passt "Ballot Box".
Case Is = 61553
Selection.Font.Name = " Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10065)
' Lower right shadowed white square
Case Is = 61554
Selection.Font.Name = " Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10066)
' Upper right shadowed white square
Case Is = 61557
Selection.Font.Name = " Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9670)
' Black diamond
Case Is = 61558
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10070)
' Black diamond minus white X
Case Is = 61563
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10048)
' White florette
Case Is = 61564
Selection.Font.Name = " Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10047)
' Black florette
Case Is = 61565
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10077)
' Heavy double turned comma quotation mark ornament
Case Is = 61566
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10078)
' Heavy double comma quotation mark ornament
Case Is = 61567
Selection.Font.Name = "Segoe UI Symbol" '' "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9647)
132
' (eventuell vergrößern, in Word 2000 wird Arial Unicode gewählt)
' White vertical rectangle
Case Is = 61606
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10061)
' SHADOWED WHITE CIRCLE, nur ähnlich
Case Is = 61608
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9723)
' White medium square
Case Is = 61610
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10022)
' Black four pointed star
Case Is = 61611
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9733)
' Black star
Case Is = 61612
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10038)
' Six pointed black star
Case Is = 61613
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10036)
' Eight pointed black star
Case Is = 61614
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10041)
' Twelve pointed black star
Case Is = 61615
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10037)
' Eight pointed pinwheel star
Case Is = 61621
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10026)
' Circled white star
Case Is = 61622
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10032)
' Shadowed white star
Case Is = 61653
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9003)
' Erase to the left
Case Is = 61656
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10146)
' Three-D top-lighted rightwards arrowhead
133
Case Is = 61660
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10162)
' Circled heavy white rightwards arrow
Case Is = 61672
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10132)
' Heavy wide-headed rightwards arrow
Case Is = 61691
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10007)
' Ballot X
Case Is = 61692
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(10003)
' Check mark
Case Is = 61694
Selection.Font.Name = "Arial Unicode MS"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9745)
' Ballot box with check
' *************************************************
Case Else
' ich empfehle, "Symbola" zu installieren, ansonsten
' in Word 2010 "Segoe UI Symbol" zu verwenden.
' Wenn Symbola installiert, dieses verwenden:
If Fkt_FontIsInstalled("Symbola") = True Then
''MsgBox "Es ist Symbola vorhanden."
Call Wingdings_Symbola(ys) ' Unterprozedur für Ersatz mit Symbola ohne Segoe
Else
''MsgBox "Es wird Segoe UI Symbol verwendet."
Call Wingdings_Segoe(ys) ' Unterprozedur für Ersatz nur mit Segoe
End If
End Select
End Sub
' ---------------------------------------------------------------------------------------------------------
Private Sub Wingdings_Segoe(ys)
' Zeichen, die sich durch die Schriftart "Segoe UI Symbol" darstellen lassen:
Select Case ys
Case Is = "61476"
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128083)
' Eyeglasses
Case Is = "61477"
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128276)
' Bell
Case Is = "61478"
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128214)
' Open book
Case Is = "61484"
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
134
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128234)
' Closed mailbox with lowered flag
Case Is = "61485"
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128235)
' Closed mailbox with raised flag
Case Is = 61488
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128193)
' File folder
Case Is = "61489"
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128194)
' Open file folder
Case Is = "61490"
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128196)
' Page facing up
Case Is = "61498"
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128187)
' Personal computer
Case Is = "61500"
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128190)
' Floppy disk
Case Is = "61506"
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128076)
' OK hand sign
Case Is = "61507"
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128077)
' Thumbs up sign
Case Is = "61508"
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128078)
' Thumbs down sign
Case Is = "61515"
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128528)
' Neutral face
Case Is = "61517"
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128163)
' Bomb
Case Is = 61519
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9872)
135
' White flag
Case Is = "61523"
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128167)
' Droplet
Case Is = 61602
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(11093)
' Heavy large circle
Case Is = 61623
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128336)
' Clock face one o clock
Case Is = 61624
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128337)
' Clock face two o clock
Case Is = 61625
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128338)
' Clock face three o clock
Case Is = 61626
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128339)
' Clock face four o clock
Case Is = 61627
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128340)
' Clock face five o clock
Case Is = 61628
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128341)
' Clock face six o clock
Case Is = 61629
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128342)
' Clock face seven o clock
Case Is = 61630
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128343)
' Clock face eight o clock
Case Is = 61631
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128344)
' Clock face nine o clock
Case Is = 61632
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128345)
' Clock face ten o clock
Case Is = 61633
136
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128346)
' Clock face eleven o clock
Case Is = 61634
Selection.Font.Name = "Segoe UI Symbol" ' "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128347)
' Clock face twelve o clock
' '''''''''''''''''''''''''''''''''''''''''
Case Else
Selection.Range.HighlightColorIndex = wdRed
' Nichtersetztes zählen:
jSymbWingErsetztes = jSymbWingErsetztes - 1
jNichtersetztes = jNichtersetztes + 1
End Select
End Sub
' ---------------------------------------------------------------------------------------------------------
Private Sub Wingdings_Symbola(ys)
' Zeichen, die sich durch die Fonts "Segoe UI Symbol" oder "Symbola" darstellen lassen:
Select Case ys
Case Is = "61476"
Selection.Font.Name = "Symbola" ' "Segoe UI Symbol"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128083)
' Eyeglasses
Case Is = "61477"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128276)
' Bell
Case Is = "61478"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128214)
' Open book
Case Is = "61484"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128234)
' Closed mailbox with lowered flag
Case Is = "61485"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128235)
' Closed mailbox with raised flag
Case Is = 61488
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128193)
' File folder
Case Is = "61489"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128194)
' Open file folder
Case Is = "61490"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128196)
137
' Page facing up
Case Is = "61498"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128187)
' Personal computer
Case Is = "61500"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128190)
' Floppy disk
Case Is = "61506"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128076)
' OK hand sign
Case Is = "61507"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128077)
' Thumbs up sign
Case Is = "61508"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128078)
' Thumbs down sign
Case Is = "61515"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128528)
' Neutral face
Case Is = "61517"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128163)
' Bomb
Case Is = 61519
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(9872)
' White flag
Case Is = "61523"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128167)
' Droplet
Case Is = 61602
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(11093)
' Heavy large circle
Case Is = 61623
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128336)
' Clock face one o clock
Case Is = 61624
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128337)
' Clock face two o clock
Case Is = 61625
138
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128338)
' Clock face three o clock
Case Is = 61626
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128339)
' Clock face four o clock
Case Is = 61627
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128340)
' Clock face five o clock
Case Is = 61628
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128341)
' Clock face six o clock
Case Is = 61629
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128342)
' Clock face seven o clock
Case Is = 61630
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128343)
' Clock face eight o clock
Case Is = 61631
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128344)
' Clock face nine o clock
Case Is = 61632
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128345)
' Clock face ten o clock
Case Is = 61633
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128346)
' Clock face eleven o clock
Case Is = 61634
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128347)
' Clock face twelve o clock
' ************************************
' Für die folgenden Zeichen gibt es in Word 2010 keine passenden Fonts;
' ich fand als freien Download den Font "Symbola" am besten geeignet:
' ***********************************************
' Font "Symbola""
Case Is = "61486"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128236)
' Open mailbox with raised flag
Case Is = "61486"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
139
Selection.TypeText Text:=ChrXXL(128236)
' Open mailbox with raised flag
Case Is = "61479"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128367)
' CANDLE
Case Is = "61483"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128387)
' STAMPED ENVELOPE
Case Is = "61486"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128236)
' OPEN MAILBOX WITH RAISED FLAG
Case Is = "61487"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128237)
' OPEN MAILBOX WITH LOWERED FLAG
Case Is = "61491"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128463)
' PAGE
Case Is = "61492"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128464)
' PAGES
Case Is = "61520"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(127985)
' WHITE PENNANT
Case Is = "61525"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128326)
' WHITE LATIN CROSS
Case Is = "61527"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128328)
' CELTIC CROSS
Case Is = "61552"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128912)
' BOLD WHITE SQUARE
Case Is = "61603"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128903)
' HEAVY WHITE CIRCLE
Case Is = "61605"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128907)
' TARGET
140
Case Is = "61609"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128960)
' LIGHT THREE POINTED BLACK STAR
Case Is = "61620"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(11217)
' UNCERTAINTY SIGN
Case Is = "61635"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(11184)
' RIBBON ARROW DOWN LEFT
Case Is = "61636"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(11185)
' RIBBON ARROW DOWN RIGHT
Case Is = "61637"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(11186)
' RIBBON ARROW UP LEFT
Case Is = "61638"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(11187)
' RIBBON ARROW UP RIGHT
Case Is = "61639"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(11188)
' RIBBON ARROW LEFT UP
Case Is = "61640"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(11189)
' RIBBON ARROW RIGHT UP
Case Is = "61641"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(11190)
' RIBBON ARROW LEFT DOWN
Case Is = "61642"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(11191)
' RIBBON ARROW RIGHT DOWN
Case Is = "61645"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128597)
' TURNED SOUTH WEST POINTING LEAF
Case Is = "61646"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128596)
' TURNED NORTH WEST POINTING LEAF
Case Is = "61647"
Selection.Font.Name = "Symbola"
141
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128599)
' Leaf counterclockwise south east
Case Is = "61648"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128598)
' Leaf counterclockwise north east
Case Is = "61649"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128592)
' Leaf north west
Case Is = "61650"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128593)
' Leaf south west
Case Is = "61651"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128594)
' Leaf north east
Case Is = "61652"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(128595)
' Leaf south east
Case Is = "61659"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(11144)
' LEFTWARDS BLACK CIRCLED WHITE ARROW
Case Is = "61661"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(11145)
' UPWARDS BLACK CIRCLED WHITE ARROW
Case Is = "61662"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(11147)
' DOWNWARDS BLACK CIRCLED WHITE ARROW
Case Is = "61663"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(129120)
' WIDE-HEADED LEFTWARDS LIGHT BARB ARROW
Case Is = "61664"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(129122)
' WIDE-HEADED RIGHTWARDS LIGHT BARB ARROW
Case Is = "61665"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(129121)
' WIDE-HEADED UPWARDS LIGHT BARB ARROW
Case Is = "61666"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(129123)
142
' WIDE-HEADED DOWNWARDS LIGHT BARB ARROW
Case Is = "61667"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(129132)
' WIDE-HEADED NORTH WEST BARB ARROW
Case Is = "61668"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(129133)
' WIDE-HEADED NORTH EAST BARB ARROW
Case Is = "61669"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(129135)
' WIDE-HEADED SOUTH WEST BARB ARROW
Case Is = "61670"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(129134)
' WIDE-HEADED SOUTH EAST BARB ARROW
Case Is = "61671"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(129144)
' WIDE-HEADED LEFTWARDS HEAVY BARB ARROW
Case Is = "61673"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(129145)
' HEAVY WIDE-HEADED UPWARDS ARROW
Case Is = "61674"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(129139)
' HEAVY WIDE-HEADED DOWNWARDS ARROW
Case Is = "61675"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(129140)
' HEAVY WIDE-HEADED NORTH WEST ARROW
Case Is = "61676"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(129141)
' HEAVY WIDE-HEADED NORTH EAST ARROW
Case Is = "61677"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(129143)
' HEAVY WIDE-HEADED SOUTH WEST ARROW
Case Is = "61678"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrXXL(129142)
' HEAVY WIDE-HEADED SOUTH EAST ARROW
Case Is = "61559"
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(11045)
' BLACK MEDIUM DIAMOND
Case Is = "61555"
143
Selection.Font.Name = "Symbola"
Selection.Range.HighlightColorIndex = wdYellow
Selection.TypeText Text:=ChrW(11047)
' BLACK MEDIUM LOZENGE
' '''''''''''''''''''''''''''''''''''''''''
Case Else
'' Selection.Font.Color = wdColorRed
Selection.Range.HighlightColorIndex = wdRed
' Nichtersetztes zählen:
jSymbWingErsetztes = jSymbWingErsetztes - 1
jNichtersetztes = jNichtersetztes + 1
End Select
End Sub
' ---------------------------------------------------------------------------------------------------------
Private Function ChrXXL(Code2) As String
' Dipl.-Ing Hanna-Chris Gast, 2011.
' Unterfunktion für Zeichen höherer Ebenen, passend für Word 2000 und höher
' Berechnung nach nach ISO/IEC 10646:2003, Anhang C:
Dim Surrogat1
Dim Surrogat2
Surrogat1 = Hex(Int((Code2 - 65536) / 1024) + 55296)
Surrogat2 = Hex((Code2 - 65536) - (Int((Code2 - 65536) / 1024) * 1024) + 56320)
ChrXXL = ChrW("&H" & Surrogat1) & ChrW("&H" & Surrogat2)
End Function
' ---------------------------------------------------------------------------------------------------------
Private Sub Markiertes_mit_Feldfunktion_schuetzen()
' H. Chris Gast, 20. November 2014.
' Manchmal wird statt "Cambria" eine exotische Schriftart zugewiesen.
' Dies kann mit einer Feldfunktion verhindert werden.
Dim strX As String
Dim IntAsc As Integer
Dim aChr As Variant ' nicht "Characters"!
' ***
For Each aChr In Selection.Range.Characters
aChr.Select
strX = Selection.Text
IntAsc = AscW(strX)
If IntAsc > 800 Then
Selection.Text = ""
Selection.Fields.Add Range:=Selection.Range, _
Type:=wdFieldEmpty, _
PreserveFormatting:=False
Selection.Text = "SYMBOL " & IntAsc & " \f Cambria \u"
Else
Selection.Font.Name = "Cambria"
End If
Next aChr
ActiveWindow.View.ShowFieldCodes = True
ActiveWindow.View.ShowFieldCodes = False
'' Selection.Range.HighlightColorIndex = wdTurquoise
End Sub
' ---------------------------------------------------------------------------------------------------------
Private Function Fkt_FontIsInstalled(FontName As String) As Boolean
' Quelle: Mehrere Internet-Quellen (herber.de und ms-office-formum.net),
' Download 21.12.2014.
Dim sFond As New StdFont
144
sFond.Name = FontName
Fkt_FontIsInstalled = StrComp(FontName, sFond.Name, vbTextCompare) = 0
End Function
' ---------------------------------------------------------------------------------------------------------
145
8 Makro zum verbesserten Einfügen von "Nur Text"
8.1 Kurzbeschreibung für den Anwender von "Inhalt_einfügen"
Es gibt in Word seit Word 2000 kein Tastenkürzel mehr für "Nur_den_Text_übernehmen"
("Inhalt-Einfügen") wie in Word 97. Dafür schrieb ich mir schon vor vielen Jahren ein Makro.
Beim Befehl für "Inhalt-Einfügen" wird der Feste Bindestrich fälschlich durch ein
Leerzeichen ersetzt, was nicht akzeptable ist.
Anmerkung 1: Word verwendet für den Festen Bindestrich (NON-BREAKING HYPHEN) das
Steuerzeichen mit dem dezimalen Code "30". Der Code des eigentlichen Unicode-Zeichens dafür hat
den dezimalen Code 8209. Dieses ist aber mit den Standard-Schriftarten von Word wie
Times New Roman, Arial oder Cambria nicht darstellbar.
Ferner wird bei der Funktion "Inhalt-Einfügen" in Word 2010 der Silbentrennstrich (englisch:
"Soft Hyphen") am Zeilenende durch durch einen normalen Bindestrich und ansonsten durch
das "Nicht-Zeichen" (englisch "not sign", Code 0172) ersetzt, das auf dem Bildschirm
zwar genauso aussieht wie der bedingte Silbentrennstrich, aber im Druckbild leider sichtbar
bleibt ( ¬ ). Dies passiert sogar auch, wenn die Anzeige der Steuerzeichen abgeschaltet ist.
Anmerkung 2: Word verwendet für den "Bedingten Bindestrich" (SOFT HYPHEN) das Steuerzeichen
mit dem dezimalen Code "31". Der Code des eigentlichen Unicode-Zeichens hat den dezimalen Wert
173, dieser funktioniert aber in Word nicht.
Weiterer Vorteil der neuen Makros:
Ein einzelner Zeilenumbruch oder ein Seitenwechsel oder eine Absatzmarke lassen sich
ebenfalls einfügen. Sie werden zu einer Absatzmarke mit der Formatierung des Zieles.
Manko: Gegenüber der Text-Einfüge-Funktion von Word beginnen Aufzählungen bei den
beiden Makros leider nach der Einfügung von vorne mit "a)" bzw. "1)".
"Sub Inhalt_einfügen_korrigiert()", Tastenkürzel Strg + i) 49
Ich verbesserte das Makro zum Inhalt-Einfügen um die Funktion, dass "Feste Bindestriche" durch
normale Bindestriche ersetzt werden und "Bedingte Trennstriche" ersatzlos gelöscht werden. Es
werden ferner Zeichen der Windows-Sonderschriftarten zur Warnung dunkelrosa markiert, aber
nicht alle (um Rechenzeit zu sparen).
"Sub Inhalt_einfügen_erweitert()", Tastenkürzel Strg + Shift + i
Es bietet sich an, dieses Einfüge-Makro mit dem Makro zum Ersatz von Symbol- und WingdingsZeichen zu verbinden. Beim "Inhalt-Einfügen" (bzw. Rechtsklick, "Einfügeoptionen:
"Nur_den_Text_übernehmen") ist es sehr unpraktisch, wenn aus einem Alpha ein lateinisches "a"
oder auch nur ein Kästchen wird. Nicht ersetzte Windows-Sonderzeichen werden dunkelrosa
markiert.
Ferner fand ich es unpraktisch, dass aus Zahlen wie "10 hoch 3" die Zahl "103" wird. Deshalb
erweiterte ich das Makro zum Inhalt-Einfügen mit Erhalt von Exponenten und Indizes,
Bei der Gelegentheit baute ich auch eine Unterprozedur ein, die UTF8-Codes aus Internetadressen
großenteils decodiert.
Aus "https://de.wikipedia.org/wiki/%C3%9Cbersetzung" wird dann "
"https://de.wikipedia.org/wiki/Übersetzung"
49
146
Für Anwender englischer Office-Versionen beißt sich das mit dem dortigen Tastenkürzel für
"italic". Diese Anwender müssen dem Makro halt ein anderes Tastenkürzel zuweisen.
Einfaches Makro "Inhalte_einfügen" (Nachbildung der Funktion von Word):
Nach Anleitung aus einer Computer-Zeitschrift.
Gewähltes Tastenkürzel: Strg + i wie in Word 97.
Sub Inhalte_einfügen()
Selection.PasteSpecial Link:=False, DataType:=wdPasteText, _
Placement:=wdInLine, DisplayAsIcon:=False
End Sub
Wendet man das Makro an, ohne vorher nach dem Einschalten des Computers irgendetwas in
die Zwischenablage kopiert zu haben, gibt es die Fehlermeldung 4605. Kopiert man vorher
unsichtbaren Text ("ausgeblendet") in die Zwischenablage, gibt es den Fehler 4198. Hat man
ein Bild in der Zwischenablage, gibt es den Fehler 5342. Dies könnte man, wenn man
unbedingt will, durch eine Fehlerabfrage wie folgt umgehen (ich selbst brauche es nicht):
Sub Inhalt_einfügen()
' Makro erweitert um Fehlerbehandlung am 7.Okt. 2012
On Error GoTo Fehlermeldung
Selection.PasteSpecial DataType:=wdPasteText
Fehlermeldung:
If Err <> 0 Then
MsgBox ("Die Zwischenablage enthielt keinen brauchbaren Text.")
End If
End Sub
**************************************************************************
8.2 Makros "Inhalt_einfügen_korrigiert"
mit Tastenkürzel Strg + i
Feste Bindestriche wie in "E-Modul" bleiben im Makro als normale Bindestriche erhalten,
und Bedingte Trennstriche werden ersatzlos gelöscht. 50
Ansonsten ersetzt das Makro nur die normale Funktion von Inhalt-Einfügen. Der Inhalt von
Fußnoten und Textfeldern geht verloren, ebenso Hoch- und Tiefstellungen sowie alle weiteren
Formatierungen.
' Modul "Inhalt_einfuegen"
'
Option Explicit
Sub Inhalt_einfügen_korrigiert()
' Hanna-Chris Gast, 2010, 2014, Mai bis 25. August 2015, 14. + 23. September 2015.
' Inhalt einfügen, aber Feste Bindestriche als Bindestriche retten
' und Bedingte Trennstriche löschen.
' Funktioniert von Word 2000 bis Word 2010, Windows XP und Windows 7.
' Zugeordnetes Tastenkürzel: Strg + i.
'
' Neue Version mit ggf. unsichtbarer Zwischendatei, in der die Striche bearbeitet werden.
' Kein Flackern des Bildschirms mehr!
50
Bei gleichzeitiger Anwesenheit von OMML-Formeln wird auf diese Besonderheit zugunsten des
Quelltextes der Formeln verzichtet.
147
'
' Problem und Lösung:
' In Word 2000 geht der Bedingte Silbentrennstrich beim "Inhalt einfügen" verloren,
' in Word 2010 wird (Stand Mai 2015) der Silbentrennstrich durch falsche Zeichen
' ersetzt, teils durch normalen Bindestrich und teils durch das "Nicht-Zeichen (NOT SIGN)",
' Code 0172, das zwar auf dem Bildschirm genauso aussieht, aber im Druckbild völlig
' unakzeptabel ist. Das Makro löscht deshalb den Bedingten Silbentrennstrich ersatzlos.
'
' Die Zwischendatei ist unsichtbar, damit das Makro schneller läuft.
' Bei auftretenden Fehlern wird diese durch die Fehlerbehandlung geschlossen,
' da unsichtbare offene Dateien sonst lästig sind.
'
' Zeichen einiger Sonderschriftarten, die nicht Unicode-kompatibel sind, werden dunkelrosa gefärbt.
'
' Offenes Manko:
' Wenn Striche korrigiert werden, dann beginnen Nummerierungen in der Kopie mit a) bzw. 1) usw.
' statt mit der ursprünglichen Nummer.
'
' Kompromisslösung für OMML-Formeln:
' Um den Quelltext von OMML-Formeln anzeigen zu können, wird bei Vorhandensein solcher Formel
' auf die Korrektur von Strichen und auf den Hinweis auf Sonderzeichen verzichtet.
' ********************
Dim Dok1 As Word.Document
Dim Dok2 As Word.Document
Dim BlUmbruch As Boolean: BlUmbruch = False
Dim B_Strich As Boolean: B_Strich = False
Dim aField As Field
Dim k As Integer: k = 0
' ********************
WordBasic.DisableAutoMacros 1 ' Disables auto macros
' ********************
' Lästiges "Flackern" des Bildschirms verhindern:
StatusBar = "Bitte warten - das Makro läuft."
Application.ScreenUpdating = False
Options.Pagination = False
' ***********************************************************************
' Zwischen-Dokument erstellen:
Set Dok1 = ActiveDocument
Set Dok2 = Documents.Add(DocumentType:=wdNewBlankDocument, Visible:=False)
Dok2.Activate
' Falls in der Normal-dot ein Briefkopf vorhanden ist, diesen löschen:
Selection.WholeStory
Selection.Delete
' ****************
' In neuem Zwischendokument Text aus Zwischenablage einfügen,
' dabei prüfen, ob die Zwischenablage nicht leer ist und auch Text enthält:
On Error GoTo Zeile_Zwischenablage_leer
Selection.Paste
On Error GoTo Zeile_Fehler
' ****************
' Prüfen, ob etwas eingefügt wurde:
Selection.WholeStory
Selection.MoveEnd Unit:=wdCharacter, Count:=-1
If Len(Selection) = 1 And 10 <= Asc(Selection) And Asc(Selection) <= 14 Then
BlUmbruch = True
End If
' ************************************
' Enhält der Text eine ehemalige Omml-Formel?
If Val(Application.Version) >= 14 _
And Selection.Fields.Count > 0 Then
For Each aField In Selection.Fields
If aField.Code Like "*QUOTE " & ChrW(1) & "*" Then
148
' Feldtyp ist 35 und enthält Grafik (18.9.2015).
''MsgBox "Rückkonvertiertes Word-2010-Bild!"
k=k+1
End If
Next aField
''MsgBox "Es gibt in der Markierung " & k & " in Grafik konvertierte Word-2010-Bild(er)."
End If
' ************************************
' Feste Bindestriche durch normales Bindestrich-Minus ersetzen:
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^~"
.Replacement.Text = "-"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
If Selection.Find.Found = True Then B_Strich = True
' **********************************************
' Bedingte Silben-Trennstriche (Steuerzeichen) alle beseitigen
' (Word 2010 ersetzt sie sonst falsch durch das "Nicht-Zeichen 0172):
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = ChrW(31)
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
If Selection.Find.Found = True Then B_Strich = True
' ***********************************************
' Sonderschrift "BSsymb9" codieren:
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Font.Name = "BSsymb9"
.Text = ""
.Replacement.Font.Name = "Arial"
.Replacement.Text = "<!BSsymb9-Zeichen!>"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
149
'
'
'
'
'
'
'
'
Selection.Find.Execute Replace:=wdReplaceAll
If Selection.Find.Found = True Then B_Strich = True
******************************************************************
If B_Strich = False _
Or k > 0 Then
' Zwischendatei schließen:
Dok2.Close (wdDoNotSaveChanges)
' Im ursprünglichen Ziel-Dokument bearbeiteten Text einfügen:
Dok1.Activate
Selection.PasteSpecial DataType:=wdPasteText
GoTo Zeile_Schließen
End If
******************************************************************
Alles in der Zwischendatei markieren und kopieren,
dann als "Inhalt" in derselben Zwischensdatei einfügen,
sofern brauchbarer Text vorhanden ist:
Selection.WholeStory
Selection.MoveEnd Unit:=wdCharacter, Count:=-1
''''''''''
If Selection.Type > 6 Then
Application.Visible = True
WordBasic.DisableAutoMacros 0
Dok2.Close (wdDoNotSaveChanges)
Dok1.Activate
MsgBox "Es ist nur ein Bild markiert, kein einfügbarer Text!"
Set Dok1 = Nothing
Set Dok2 = Nothing
Exit Sub
End If
''''''''''
If Selection.Type = 1 Then
' Es ist nichts Sichtbares mehr vorhanden.
Application.Visible = True
WordBasic.DisableAutoMacros 0
Dok2.Close (wdDoNotSaveChanges)
Dok1.Activate
MsgBox "Es ist nichts Sichtbares zum Einfügen vorhanden."
Set Dok1 = Nothing
Set Dok2 = Nothing
Exit Sub
ElseIf BlUmbruch = False Then
' Markierung ausschneiden:
Selection.Cut
' "Inhalt" einfügen in der Zwischendatei:
Selection.PasteSpecial Link:=False, DataType:=wdPasteText, _
Placement:=wdInLine, DisplayAsIcon:=False
Else
Selection.TypeParagraph
End If
*****************************************************************
Nicht-ersetzte Zeichen der Windows-Sonderschriftarten
in der "Private Use Area", (PUA), dunkelrosa färben:
Options.DefaultHighlightColorIndex = wdPink
ActiveDocument.Range.Select
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Replacement.Highlight = True
.Replacement.Font.ColorIndex = wdAuto
.Text = "[" & ChrW(57344) & "-" & ChrW(63743) & "]"
' Arial und Times New Roman enthalten in der Private Use Area
' einige Sonderzeichen, die hier sonst irreführen würden:
150
.Replacement.Font.Name = "Courier New"
.Replacement.Text = ""
.Forward = True
''.Wrap = wdFindContinue ' darf hier nicht sein!!!
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Options.DefaultHighlightColorIndex = wdYellow
' **********************************************
' BSsymb9-Warnung mit dunkelrosa Markierung versehen(1.8.2015):
Options.DefaultHighlightColorIndex = wdPink
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "<!BSsymb9-Zeichen!>"
.Replacement.Highlight = True
.Replacement.Text = ""
''.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Options.DefaultHighlightColorIndex = wdYellow
' **********************************************
' Alles in der Zwischendatei markieren und in die Zieldatei kopieren
' (außer Absatzmarke am Schluss):
Selection.WholeStory
Selection.MoveEnd Unit:=wdCharacter, Count:=-1
Selection.Copy
' Zwischendatei schließen:
Dok2.Close (wdDoNotSaveChanges)
' Im ursprünglichen Ziel-Dokument bearbeiteten Text einfügen:
Dok1.Activate
Selection.Paste
' **********************************************
Zeile_Schließen:
' **********************************************
' Automakros wieder zulassen:
WordBasic.DisableAutoMacros 0
' Im Suchen/Ersetzen-Menü alles zurückstellen
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
151
End With
' Bildschirm wieder einschalten:
Options.Pagination = True
StatusBar = False
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
' ***********************************************
' Angabe, wenn auf nötige Korrekturen verzichtet wurde
' (Warteschleife ist hier nötig):
Dim tt As Single
tt = Timer
Do While Timer < tt + 0.1 'Sekunden
DoEvents
Loop
' ***
If B_Strich = True _
And k > 0 Then
MsgBox "Es wurde auf eine Korrektur von Strichen bzw. Sonderschriftarten verzichtet, " _
& "um den Quelltext der OMML-Formel(n) richtig anzuzeigen."
End If
' Makro ist hier zuende:
Exit Sub
' *******************************************************************
' Fehlerroutinen:
Zeile_Zwischenablage_leer:
Application.Visible = True
WordBasic.DisableAutoMacros 0
Dok2.Close (wdDoNotSaveChanges)
Dok1.Activate
MsgBox "Die Zwischenablage (Clipboard) ist leer!", vbExclamation
'' Set Dok1 = Nothing
'' Set Dok2 = Nothing
Exit Sub
' ************************************
Zeile_Fehler:
Application.Visible = True
WordBasic.DisableAutoMacros 0
Dok2.Close (wdDoNotSaveChanges)
Dok1.Activate
MsgBox "Fehler in Sub Fehlerbehandlung" & vbCrLf & "Fehlernummer: " & Err.Number & _
vbCrLf & "Fehlerbeschreibung: " & Err.Description, vbCritical
' Für die Fehlersuche hier testweise die Fehlerstelle wieder aufsuchen:
'' Resume
End Sub
' ---------------------------------------------------------------------------------------------------------
152
8.3 Makro "Inhalt_einfügen_erweitert" mit Strg + Shift + i
Feste Bindestriche wie in "E-Modul" bleiben als normale Bindestriche erhalten, und Bedingte
Trennstriche werden ersatzlos gelöscht.
Zusätzlich bleiben hier Hoch- und Tiefstellungen erhalten, und Höher- bzw. Tieferstellungen
werden in Hoch- oder Tiefstellung umgewandelt. Textfelder werden in normalen Text
umgewandelt. Der Inhalt von Fußnoten und Bildern sowie sonstiger Shapes geht verloren. Es
wird aber in grüner Schrift in spitzen Klammern darauf hingewiesen.
Besonderheit dieses Makros: UTF8-Codes werden decodiert.
Sub Inhalt_einfügen_erweitert()
' Hanna-Chris Gast, 2010, 2014, Mai bis August 2015, 23. September 2015, 13. Oktober 2015.
' Version a012d8_Inhalt_einfügen_verbessert_und_UTF8_decodiert()
' Version mit unsichtbarer Zwischendatei, in der alle Befehle ablaufen.
' Funktioniert von Word 2000 bis Word 2010, Windows XP und Windows 7.
' Dies Makro wandelt Symbol- und Wingdingszeichen in Unicode um.
' Exponenten und Indizes bleiben erhalten. Dazu die Unterprozedur "c1" für
' krumme Höher-Tiefer-Position ergänzt 28. Juli 2015.
' Fußnoten verschwinden nicht mehr völlig ersatzlos. Es wird auf sie hingewiesen <!Fußnote!>.
' Feste Bindestriche werden zu Bindestriche, Bedingte Trennstriche werden gelöscht.
' Neu seit August 2015: UTF8-Codierungen in Internet-Adressen werden vom Makro decodiert.
' Neu seit Oktober 2015: Shapes werden umgewandelt in Text bzw. Bilder.
'
' Zugeordnetes Tastenkürzel: Strg + Shift + i.
'
' Durch Aufrufen eines anderen Makros werden Symbol- und Wingdings-Zeichen so weit wie möglich
' durch Unicode-Zeichen ersetzt. Der Rest dieser Zeichen und alle Zeichen in der "Private Use Area"
' (PUA) werden dunkelrosa markiert.
'
' Es hat sich als sinnvoll erwiesen, Exponenten und Indizes als solche zu erhalten, damit nicht
' aus "10 hoch 3" versehentlich "103" wird. Schließlich wird das "Inhalt-Einfügen" hauptsächlich
' benutzt, um lästige Formatvorlagen zu vermeiden, nicht wegen der Zeichenformatierungen.
'
' Beim einfachen "Inhalt einfügen" (...PasteSpecial...DataType:=wdPasteText...), geht in Word
' der "Geschützte Bindestrich" verloren, was nicht tolerierbar ist. In diesem Makro wird er
' durch einen einfachen Bindestrich ersetzt.
'
' In Word 2000 geht der Bedingte Silbentrennstrich beim "Inhalt einfügen" verloren,
' in Word 2010 wird (Stand Mai 2015) der Silbentrennstrich durch falsche Zeichen
' ersetzt, teils durch normalen Bindestrich und teils durch das "Nicht-Zeichen (NOT SIGN)",
' Code 0172, das zwar auf dem Bildschirm genauso aussieht, aber im Druckbild völlig
' unakzeptabel ist. Das Makro löscht deshalb den Bedingten Silbentrennstrich ersatzlos.
'
' Ich ersetze hier Tabstopps durch je drei Leerzeichen,
' dies kann vom Anwender gerne wieder zurückgeändert werden.
'
' Die Zwischendatei ist unsichtbar, damit das Makro schneller läuft.
' Bei auftretenden Fehlern wird diese durch die Fehlerbehandlung geschlossen,
' da unsichtbare offene Dateien sonst lästig sind.
' Es erfolgen keine Suchen-Ersetzen-Vorgänge mehr in der Zieldatei, wodurch das Makro
' etwas schneller läuft.
'
' Offenes Manko dieses Makros gegenüber der Word-eigenen Funktion "Inhalt-Einfügen":
' Nummerierungen beginnen in der Kopie neu mit a) bzw. 1) usw.
' ********************
153
Dim Stelle1 As Long
Dim rng1 As Range
Dim Rng2 As Range
Dim Dok1 As Word.Document
Dim Dok2 As Word.Document
Dim strUTF As String
Dim BlUmbruch As Boolean: BlUmbruch = False
'
' Stelle im Zieldokument merken, wo Beginn der Einfügung sein wird:
Stelle1 = Selection.Start
' ''''''''''''''''''''''''''''''
' 17.Juli 2015
WordBasic.DisableAutoMacros 1 ' Disables auto macros
' ''''''''''''''''''''''''
' Lästiges "Flackern" des Bildschirms verhindern:
StatusBar = "Bitte warten - das Makro läuft."
Application.ScreenUpdating = False
Options.Pagination = False
' ***************************************************************
' Zeitmessen für die Makro-Dauer in Sekunden
Dim Zeit1 As Single ' "Single" = Zahlen mit Dezimalen
Dim Zeit2 As Single
Dim Zeitdauer As Single
Zeit1 = Timer
' ***********************************************************************
' Zwischen-Dokument erstellen:
Set Dok1 = ActiveDocument
Set Dok2 = Documents.Add(DocumentType:=wdNewBlankDocument, Visible:=False)
Dok2.Activate
' Falls wie bei mir in der Normal-dot schon ein Briefkopf vorgesehen ist,
' diesen löschen:
Selection.WholeStory
Selection.Delete
' ****************
' In neuem Zwischendokument Text aus Zwischenablage einfügen,
' dabei prüfen, ob die Zwischenablage nicht leer ist und auch Text enthält:
On Error GoTo Zeile_Zwischenablage_leer
Selection.Paste
''On Error GoTo 0
On Error GoTo Zeile_Fehler
' ****************
Selection.WholeStory
' Prüfen, ob etwas eingefügt wurde:
Selection.WholeStory
Selection.MoveEnd Unit:=wdCharacter, Count:=-1
If Len(Selection) = 1 And 10 <= Asc(Selection) And Asc(Selection) <= 14 Then
BlUmbruch = True
End If
' ************************************
' alle vorhandenenFarbmarkierungen löschen:
Selection.Range.HighlightColorIndex = wdAuto
' ************************************
Call Shapes_beseitigen
' ************************************
' Seitenumbrüche, Abschnittswechsel usw. beseitigen
' dabei Formatvorlagen mit Nummerierung beseitigen:
Selection.WholeStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^12"
.Replacement.Text = "^p"
154
'
'
'
'
'
'
'
'
'
.Forward = True
.Wrap = wdFindContinue
.Format = False
.Replacement.Style = ActiveDocument.Styles(wdStyleNormal)
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "^14"
.Replacement.Text = "^p"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.Replacement.Style = ActiveDocument.Styles(wdStyleNormal)
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
************************************
Absatzmarken bezüglich hochtief resetten:
Selection.WholeStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Font.Position = 0
Selection.Find.Replacement.Font.Subscript = False
Selection.Find.Replacement.Font.Superscript = False
With Selection.Find
.Text = "^p"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
************************************
Aufzählungsfunktionen in Schriftzeichen umwandeln
(die Beseitigung von Seitenumbrüchen musste davor erfolge):
Selection.WholeStory
Selection.Range.ListFormat.ConvertNumbersToText
************************************
Tabellen beseitigen:
Dim aTable As Table
If Selection.Tables.Count > 0 Then
For Each aTable In Selection.Tables
aTable.Rows.ConvertToText Separator:=wdSeparateByTabs, _
NestedTables:=True
Next aTable
End If
************************************
Feste Bindestriche durch normales Bindestrich-Minus ersetzen:
155
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^~"
.Replacement.Text = "-"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
'
'''
'''
'''
'''
'''
'''
'
'
'
'
In Word 2003 wird bei einigen Windows-Einstellungen der "Mittelpunkt"
(en: "middle dot") fälschlich durch das Bullet-Zeichen ersetzt.
Dies passiert auch bei "Suchen - Ersetzen",
wenn man den "Mittelpunkt" nicht wie hier per Code "ChrW(183)" erzwingt.
Dies wird in diesem Makro durch Codierung und Decodierung umgangen.
Bei Word 2003 echte Bullet-Zeichen sichern durch Zwischentext:
'' Selection.Find.ClearFormatting
'' Selection.Find.Replacement.ClearFormatting
'' With Selection.Find
''
.Text = ChrW(8226)
''
.Replacement.Text = "<Bullet!-!Operator!>"
''
.Forward = True
''
.Wrap = wdFindContinue
''
.Format = False
''
.MatchCase = False
''
.MatchWholeWord = False
''
.MatchWildcards = False
''
.MatchSoundsLike = False
''
.MatchAllWordForms = False
'' End With
'' Selection.Find.Execute Replace:=wdReplaceAll
******************************************************************
Makro für Ersatz von Symbol und Wingdings ohne Rahmenmakro aufrufen:
Selection.WholeStory
Application.Run MacroName:="Symbol_Wingdings_in_Unicode_nur_Markierten_Text"
Problem: Windows-Sonderzeichen werden beim "Inhalt einfügen" falsch ersetzt.
Bei Roter Markierung den Zeichencode eindeutig in den PUA-Bereich verschieben:
Selection.Find.ClearFormatting
Selection.Find.Highlight = True
With Selection.Find
.Text = "^?"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
Do While .Execute
If Selection.Range.HighlightColorIndex = wdRed Then
On Error Resume Next
With Dialogs(wdDialogInsertSymbol)
Selection.Text = ChrW(.charNum + 4096 + 61440)
End With
156
Err.Clear
Selection.Font.Name = "Courier New"
Err.Clear
''On Error GoTo 0
On Error GoTo Zeile_Fehler
End If
Loop
End With
' ******************************************************************
' Exponenten und Indizes sollen erhalten bleiben:
' Zuerst Höher-tiefer durch hoch- und tiefstellen ersetzen:
'' Call c0_hoeher_tiefer_3_Punkt_ersetzen
' Damit auch Höher- und Tieferstellungen mit krummen Werten funktionieren:
Call c1_hoeher_tiefer_in_hochtief_Animation
' ************************************
' Exponenten codieren:
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = ""
.Font.Superscript = True
.Font.Subscript = False
.Replacement.Text = "<<Exponent:^&zzzxxx>>"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
' Indices codieren:
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = ""
.Font.Superscript = False
.Font.Subscript = True
.Replacement.Text = "<<Index:^&yyyxxx>>"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
' **********************************************
' Bedingte Silben-Trennstriche (Steuerzeichen) alle beseitigen
' (Word 2010 ersetzt sie sonst falsch durch das "Nicht-Zeichen 0172):
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = ChrW(31)
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
157
'
'
'
'
'
'
'
'
'
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
**********************************************
Tabstopps durch je drei Leerzeichen ersetzen:
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^t"
.Replacement.Text = " "
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
**********************************************
Fußnoten codieren:
Dim aFoot As Footnote
For Each aFoot In ActiveDocument.Footnotes
aFoot.Reference.Select
Selection.Text = "<!Fußnote!>"
Next aFoot
***********************************************
Sonderschrift "BSsymb9" codieren:
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Font.Name = "BSsymb9"
.Text = ""
.Replacement.Font.Name = "Arial"
.Replacement.Text = "<!BSsymb9-Zeichen!>"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
**********************************************
Auf Formeln und Bilder hinweisen:
Feste Bindestriche durch normales Bindestrich-Minus ersetzen:
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^1"
.Replacement.Text = "<!Formel oder Bild!>"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
158
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
'
'
'
'
'
'
'
'
'
'
'
'
******************************************************************
******************************************************************
Alles in der Zwischendatei markieren und kopieren,
dann als "Inhalt" inderselben Zwischensdatei einfügen,
sofern brauchbarer Text vorhanden ist:
Selection.WholeStory
Selection.MoveEnd Unit:=wdCharacter, Count:=-1
''''''''''
If Selection.Type > 6 Then
'' If Len(Selection) <= 2 And Asc(Selection) < 2 Then
Application.Visible = True
WordBasic.DisableAutoMacros 0
Dok2.Close (wdDoNotSaveChanges)
Dok1.Activate
MsgBox "Es ist nur ein Bild markiert, kein einfügbarer Text!"
Set Dok1 = Nothing
Set Dok2 = Nothing
Exit Sub
End If
''''''''''
If Selection.Type = 1 Then
' Es ist nichts Sichtbares zum Einfügen mehr vorhanden.
Application.Visible = True
WordBasic.DisableAutoMacros 0
Dok2.Close (wdDoNotSaveChanges)
Dok1.Activate
''Set Dok1 = Nothing
''Set Dok2 = Nothing
MsgBox "Es ist nichts Sichtbares zum Einfügen vorhanden."
Exit Sub
ElseIf BlUmbruch = False Then
' Ausschneiden:
Selection.Cut
' "Inhalt" einfügen in der Zwischendatei:
Selection.PasteSpecial Link:=False, DataType:=wdPasteText, _
Placement:=wdInLine, DisplayAsIcon:=False
Else
Selection.TypeParagraph
End If
*****************************************************************
*****************************************************************
Decodierungen:
**********************************************
UTF8 decodieren:
Selection.WholeStory
strUTF = Fkt_UTF8_decodieren
**********************************************
Set Rng2 = Dok2.Range
''' Multiplicationspunkte wiederherstellen:
''' Bei falscher (?) Kompatibilitäts-Einstellung von Windows entstehen
''' durch "Inhalt-Einfügen" Bullet-Zeichen statt Mittepunkt.
''' Dies muss korrigiert werden (aber nicht bei echten Bullet-Zeichen):
'' Rng2.Find.ClearFormatting
'' Rng2.Find.Replacement.ClearFormatting
'' With Rng2.Find
159
'
'
'
'
''
.Text = ChrW(8226)
''
.Replacement.Text = ChrW(183) ' Mittepunkt wiederhergestellt
''
.Forward = True
''
' .Wrap = wdFindContinue/ = wdFindAsk/ = wdFindStop
''
' Es darf nur der markierte Bereich durchsucht werden!
''
.Format = False
''
.MatchCase = False
''
.MatchWholeWord = False
''
.MatchWildcards = False
''
.MatchSoundsLike = False
''
.MatchAllWordForms = False
'' End With
'' Rng2.Find.Execute Replace:=wdReplaceAll
****************
''' echte Bullet-Zeichen wieder herstellen:
'' Rng2.Find.ClearFormatting
'' Rng2.Find.Replacement.ClearFormatting
'' With Rng2.Find
''
.Text = "<Bullet!-!Operator!>"
''
.Replacement.Text = ChrW(8226) ' echte Bullet-Zeichen wiederherstellen
''
.Forward = True
''
''.Wrap = wdFindStop
''
.Format = False
''
.MatchCase = False
''
.MatchWholeWord = False
''
.MatchWildcards = False
''
.MatchSoundsLike = False
''
.MatchAllWordForms = False
'' End With
'' Rng2.Find.Execute Replace:=wdReplaceAll
**********************************************
Hochstellung wieder decodieren:
Rng2.Find.ClearFormatting
Rng2.Find.Replacement.ClearFormatting
With Rng2.Find
.Text = "\<\<Exponent\:*zzzxxx\>\>"
.Replacement.Text = ""
.Replacement.Font.Superscript = True
.Replacement.Font.Subscript = False
.Forward = True
'' .Wrap = wdFindAsk
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Rng2.Find.Execute Replace:=wdReplaceAll
Tiefstellung wieder decodieren:
Rng2.Find.ClearFormatting
Rng2.Find.Replacement.ClearFormatting
With Rng2.Find
.Text = "\<\<Index\:*yyyxxx\>\>"
.Replacement.Text = ""
.Replacement.Font.Superscript = False
.Replacement.Font.Subscript = True
.Forward = True
'' .Wrap = wdFindAsk
.Format = True
.MatchCase = False
.MatchWholeWord = False
160
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Rng2.Find.Execute Replace:=wdReplaceAll
'
Rng2.Find.ClearFormatting
Rng2.Find.Replacement.ClearFormatting
With Rng2.Find
.Text = "yyyxxx>>"
.Replacement.Text = ""
.Forward = True
'.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Rng2.Find.Execute Replace:=wdReplaceAll
Rng2.Find.ClearFormatting
Rng2.Find.Replacement.ClearFormatting
With Rng2.Find
.Text = "zzzxxx>>"
.Replacement.Text = ""
.Forward = True
'.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Rng2.Find.Execute Replace:=wdReplaceAll
'
With Rng2.Find
.Text = "<<Exponent:"
.Replacement.Text = ""
.Forward = True
' .Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Rng2.Find.Execute Replace:=wdReplaceAll
With Rng2.Find
.Text = "<<Index:"
.Replacement.Text = ""
.Forward = True
' .Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
161
Rng2.Find.Execute Replace:=wdReplaceAll
' **********************************************
' Nicht-ersetzte Zeichen der Windows-Sonderschriftarten
' in der "Private Use Area", (PUA), dunkelrosa färben:
Options.DefaultHighlightColorIndex = wdPink
Rng2.Find.ClearFormatting
Rng2.Find.Replacement.ClearFormatting
With Rng2.Find
.Replacement.Highlight = True
.Replacement.Font.ColorIndex = wdAuto
.Text = "[" & ChrW(57344) & "-" & ChrW(63743) & "]"
.Replacement.Font.Name = "Courier New"
' Arial und Times New Roman enthalten in der Private Use Area
' einige Sonderzeichen, die hier sonst irritieren würden.
.Replacement.Text = ""
.Forward = True
''.Wrap = wdFindContinue ' darf hier nicht sein!!!
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Rng2.Find.Execute Replace:=wdReplaceAll
Options.DefaultHighlightColorIndex = wdYellow
' **********************************************
''' BSsymb9-Warnung mit dunkelrosa Markierung versehen(1.8.2015):
'' Options.DefaultHighlightColorIndex = wdPink
'' Rng2.Find.ClearFormatting
'' Rng2.Find.Replacement.ClearFormatting
'' With Rng2.Find
''
.Text = "<!BSsymb9-Zeichen!>"
''
.Replacement.Highlight = True
''
.Replacement.Text = ""
''
''.Wrap = wdFindContinue
''
.Format = True
''
.MatchCase = False
''
.MatchWholeWord = False
''
.MatchWildcards = False
''
.MatchSoundsLike = False
''
.MatchAllWordForms = False
'' End With
'' Rng2.Find.Execute Replace:=wdReplaceAll
'' Options.DefaultHighlightColorIndex = wdYellow
''''''''''''''''''''''''''''''''''''''''''''''
' Warnungen mit Markierung versehen:
''Options.DefaultHighlightColorIndex = wdYellow
Rng2.Find.ClearFormatting
Rng2.Find.Replacement.ClearFormatting
With Rng2.Find
.Text = "\<\!*\>"
'.Replacement.Highlight = True
.Replacement.Font.Color = wdColorGreen
.Replacement.Text = ""
''.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
162
'
'
'
'
'
'
'
'
'
'
'
'
'
'
'
'
End With
Rng2.Find.Execute Replace:=wdReplaceAll
''Options.DefaultHighlightColorIndex = wdYellow
**********************************************
Alles in der Zwischendatei markieren und in die Zieldatei kopieren
(außer Absatzmarke am Schluss):
Selection.WholeStory
Selection.Font.Animation = wdAnimationNone
Selection.MoveEnd Unit:=wdCharacter, Count:=-1
Selection.Copy
Zwischendatei schließen:
Dok2.Close (wdDoNotSaveChanges)
Im ursprünglichen Ziel-Dokument bearbeiteten Text einfügen:
Dok1.Activate
Selection.Paste
****
Das neu Eingefügte in der Ursprungsdatei mithilfe der Range-Funktion markieren:
Set rng1 = Selection.Range
rng1.SetRange Start:=Stelle1, End:=rng1.End
rng1.Select
**********************************************
17.Juli 2015
WordBasic.DisableAutoMacros 0 ' Automakros wieder zulassen.
**********************************************
Im Suchen/Ersetzen-Menü alles zurückstellen
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Bildschirm wieder einschalten:
Options.Pagination = True
StatusBar = False
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
**********************************************
Zeitmessen für die Makro-Dauer, Variante mit 2 Nachkommastellen:
Zeit2 = Timer
Zeitdauer = Format((Zeit2 - Zeit1), "##,##0.00")
****************
' Damit in Word 2010 die Messagebox nicht vor der letzten Aktualisierung angezeigt wird:
Dim tt As Single '' Double
tt = Timer
Do While Timer < tt + 0.1 'Sekunden
DoEvents
Loop
'
If Zeitdauer > 1# Or strUTF <> "" Then
MsgBox "Die Rechenzeit für verbessertes Inhalt-Einfügen war " & Zeitdauer _
& " Sekunden." & strUTF
End If
***********************************************
'' Set Dok1 = Nothing
163
'' Set Dok2 = Nothing
Exit Sub
' *******************************************************************
Zeile_Zwischenablage_leer:
Application.Visible = True
WordBasic.DisableAutoMacros 0
Dok2.Close (wdDoNotSaveChanges)
Dok1.Activate
MsgBox "Die Zwischenablage (Clipboard) ist leer!", vbExclamation
'' Set Dok1 = Nothing
'' Set Dok2 = Nothing
Exit Sub
' ************************************
Zeile_Fehler:
Application.Visible = True
WordBasic.DisableAutoMacros 0
Dok2.Close (wdDoNotSaveChanges)
Dok1.Activate
MsgBox "Fehler in Sub Fehlerbehandlung" & vbCrLf & "Fehlernummer: " & Err.Number & _
vbCrLf & "Fehlerbeschreibung: " & Err.Description, vbCritical
'' Set Dok1 = Nothing
'' Set Dok2 = Nothing
' Für Testzwecke die Fehlerstelle wieder aufsuchen:
'' Resume
End Sub
' ---------------------------------------------------------------------------------------------------------
Private Sub c0_hoeher_tiefer_3_Punkt_ersetzen()
' 3 Punkt höher- oder tiefergestelltes umwandeln:
Selection.WholeStory
' Höhergestelltes durch hoch- und tiefstellen ersetzen:
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.Font.Position = 3
With Selection.Find.Replacement.Font
.Position = 0
.Superscript = True
.Subscript = False
End With
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Replacement.Highlight = True
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
' ****
' 3 Punkt Tiefergestelltes überall durch Tiefstellung ersetzen:
Selection.Find.ClearFormatting
Selection.Find.Font.Position = -3
Selection.Find.Replacement.ClearFormatting
With Selection.Find.Replacement.Font
.Position = 0
.Superscript = False
164
.Subscript = True
End With
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Replacement.Highlight = True
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
' ********************
End Sub
' ---------------------------------------------------------------------------------------------------------
Private Sub c1_hoeher_tiefer_in_hochtief_Animation()
' Dipl.-Ing. Hanna-Chris Gast, 21. Juli 2015. 24. Juni 2015.
' Auszug aus "Sub a91d" in Datei 120c, Januar 2013.
' Optimiert für Word 2000, funktioniert auch gut in Word 2010.
'
' Es werden vertikale Positionen auch mit Nicht-Ganzen-Zahlen erfasst.
' Funktionsweise: Es werden dazu erst alle Zeichen mit "Position = 0" mittels Animation markiert,
' und dann alle nicht-markierten Zeichen abgefragt.
'
' In der Testphase werden hier noch alle geprüften Zeichen unterschiedlich farbig markiert
' und die Rechenzeit ausgegeben.
' ******************************************
Dim i As Integer
' laufende Zählung (Inhaltsverzeichnisse).
Dim j As Integer: j = 0 ' Anzahl der Exponenten.
Dim k As Integer: k = 0 ' Anzahl der Indizes.
Dim rng1 As Range
' Dokumentkomponenten.
Dim rng0 As Range
' ursprüngliche Markierung merken.
' *********************************************
' Ursprüngliche Markierung merken:
Set rng0 = Selection.Range
' *******************************************
' Für Testzwecke Animation anzeigen:
'' ActiveWindow.View.ShowAnimation = True
' ********************************************
' Auch die Fußnoten erfassen.
For Each rng1 In ActiveDocument.StoryRanges
If rng1.StoryType > 1 Then Exit For
' ***************************************
Options.DefaultHighlightColorIndex = wdYellow
' *******************
' ...
' ******************************************************
' Für "Höher/Tiefer zuerst alle Zeichen mit Position = 0
' durch Animation markieren:
' ******************************************************
rng1.Find.ClearFormatting
rng1.Find.Replacement.ClearFormatting
With rng1.Find
.Font.Position = 0
.Text = ""
.Replacement.Text = ""
165
.Replacement.Font.Animation = wdAnimationLasVegasLights
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
rng1.Find.Execute Replace:=wdReplaceAll
' Animation auf Einzelzeichen genau abgrenzen (spart Rechenzeit):
rng1.Find.ClearFormatting
rng1.Find.Replacement.ClearFormatting
With rng1.Find
.Font.Animation = wdAnimationNone
.Font.Position = 0
.Text = "^?"
.Replacement.Text = ""
.Replacement.Font.Animation = wdAnimationLasVegasLights
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
rng1.Find.Execute Replace:=wdReplaceAll
' Alle Felder animieren; dies geht nur in der Feldcode-Ansicht:
ActiveWindow.View.ShowFieldCodes = True
rng1.Find.ClearFormatting
rng1.Find.Replacement.ClearFormatting
'' rng1.Find.Replacement.Highlight = True
With rng1.Find
.Text = "^d"
.Replacement.Text = ""
.Replacement.Font.Animation = wdAnimationLasVegasLights
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
rng1.Find.Execute Replace:=wdReplaceAll
' zurückstellen in die Feldergebnis-Ansicht:
ActiveWindow.View.ShowFieldCodes = False
' *************************************************
' Alle Höher-Tiefer-gestellten Zeichen umwandeln:
rng1.Select
Selection.Collapse ' "HomeKey Unit:=wdStory" würde auf Hauptkomponente springen.
Zeile_Schleifenbeginn:
' ***************
With Selection.Find
.ClearFormatting
.Text = "^?" ' dadurch werden nur noch Zeichen, nicht mehr Tabellenmarken abgefragt.
.Replacement.Text = ""
.Forward = True
166
.Wrap = wdFindStop
.Format = True
.Font.Animation = wdAnimationNone
'' .Font.ColorIndex = wdAuto
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
' *********
If Selection.Find.Found = True Then
' ***********
' Exponenten:
' **********
If Selection.Font.Position > 1 Then
' Höhergestellt, möglicherweise fehlerhaft von DKE:
' Größenanpassung und Zeichenformatvorlagen beseitigen!
Selection.Font.Reset
Selection.Font.Superscript = True
Selection.Font.Subscript = False
Selection.Font.Position = 0 '3
' *****
j=j+1
Selection.Range.HighlightColorIndex = wdTurquoise
Selection.Font.Animation = wdAnimationLasVegasLights
' nur so werden Endlosschleifen in geschachtelten Tabellen vermieden.
Selection.Collapse wdCollapseEnd
' *********************************
' Indizes:
' ********************************
ElseIf Selection.Font.Position < 1 Then
' Tiefer gesetzt, möglicherweise fehlerhaft von DKE:
Selection.Font.Reset
Selection.Font.Superscript = False
Selection.Font.Subscript = True
Selection.Font.Position = -0
' ****
k=k+1
Selection.Range.HighlightColorIndex = wdDarkYellow
Selection.Font.Animation = wdAnimationLasVegasLights
' nur so werden Endlosschleifen in geschachtelten Tabellen vermieden.
Selection.Collapse wdCollapseEnd
Else
' Selection.Font.Position = 0
Selection.Range.HighlightColorIndex = wdRed
Selection.Font.Animation = wdAnimationLasVegasLights
Selection.Collapse wdCollapseEnd
End If
GoTo Zeile_Schleifenbeginn
End If
' **********************************************************
' Animation im ganzen StoryRange wieder beseitigen:
rng1.Font.Animation = wdAnimationNone
' Alle Felder aktualisieren:
rng1.Fields.Update
' ****************************
' Nächste Dokumentkomponente:
Next rng1
' ************************************
' ************************************
167
' Zum Schluss aufräumen:
' ************************************
' Alte Markierung wieder herstellen:
rng0.Select
' Speicher für Suchen-Ersetzen zurückstellen:
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = ""
.Replacement.Text = ""
End With
Application.DisplayAlerts = wdAlertsAll
'' Options.DefaultHighlightColorIndex = wdYellow
' **********************************
End Sub
' ---------------------------------------------------------------------------------------------------------
Private Function Fkt_UTF8_decodieren() As String
' H. Chris Gast, 10. Juni 2015, 2. + 24. + 27. Juli 2015, 12. + 26. + 27. August 2015.
' UTF8 in Internet-Dateinamen decodieren (erkennbar an den Prozentzeichen).
' Vierbyte-Code (beginnend mit "F") wird von dem Makro wegen der Seltenheit (noch)
' nicht erfasst.
' Es darf nur das jeweilige codierte Zeichen ersetzt werden, nicht Nachbarzeichen,
' die Windows-Sonderzeichen sein können.
''Dim Rng1 As Range
Dim strCode As String
Dim strErsatz As String
Dim strText As String
Dim i As Integer: i = 0
Dim k As Integer: k = 0
Dim strMisserfolg As String: strMisserfolg = ""
Dim Rng2 As Range
' **********************************************
Selection.HomeKey Unit:=wdStory
' **********************************************
' Schleife, um alle UTF-8-Zeichen in der Markierung (Rng1) zu erfassen:
' Zieladresse der Schleife:
Zeile_Schleife_Weitermachen:
' **************************
' Prozentzeichen suchen:
Selection.Find.ClearFormatting
With Selection.Find
.Text = "%"
.Replacement.Text = ""
.Forward = True
' .Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
If Selection.Find.Found = False Then GoTo Zeile_Ergebnis
' geht so oft nicht, sucht endlos weiter, deshalb auch mit "Rng1" abfragen:
'' If Selection.Range.End > Rng1.End Then
''
Rng1.Select
''
''Exit Sub
''
GoTo Zeile_Ergebnis
'' End If
168
' ************************
Set Rng2 = Selection.Range
' Das Zeichen hinter dem ersten gefundenen "Prozent" markieren:
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
' ***************
' 1. Buchstabe nach dem Prozentzeichen untersuchen:
If UCase(Selection.Text) = "C" Or UCase(Selection.Text) = "D" Then
' Zwei-Byte-Code:
Selection.MoveRight Unit:=wdCharacter, Count:=4, Extend:=wdExtend
Rng2.SetRange Start:=Rng2.Start, End:=Selection.End
strCode = Replace(Selection, "%", "")
strErsatz = ChrW(Fkt_zweiByte_Sequenz(strCode))
'strUTF_decodiert = Replace(strUTF_decodiert, "%" & Selection.Text, strErsatz)
Rng2.Text = strErsatz
Rng2.Font.Underline = True
i=i+1
ElseIf UCase(Selection.Text) = "E" Then
' Drei-Byte-Code:
Selection.MoveRight Unit:=wdCharacter, Count:=7, Extend:=wdExtend
Rng2.SetRange Start:=Rng2.Start, End:=Selection.End
strCode = Replace(Selection, "%", "")
strErsatz = ChrW(Fkt_dreiByte_Sequenz(strCode))
' strUTF_decodiert = Replace(strUTF_decodiert, "%" & Selection.Text, strErsatz)
Rng2.Text = strErsatz
Rng2.Font.Underline = True
i=i+1
ElseIf UCase(Selection.Text) = "F" Then
' Vier-Byte-Code oder unzulässig:
Selection.MoveRight Unit:=wdCharacter, Count:=10, Extend:=wdExtend
Rng2.SetRange Start:=Rng2.Start, End:=Selection.End
strCode = Replace(Selection, "%", "")
strErsatz = ChrXXL(Fkt_vierByte_Sequenz(strCode))
If strErsatz = "" Then
' kein zulässiger UTF8-Code:
MsgBox "unzulässiger UTF8-Code!", vbInformation
k=k+1
Selection.Collapse Direction:=wdCollapseEnd
Else
Rng2.Text = strErsatz
Rng2.Font.Underline = True
i=i+1
End If
'''''''''''''''''''''''''
Else
' einfaches ASCII-Zeichen:
If UCase(Selection.Text) Like "[0-9,A-B]" Then
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Rng2.SetRange Start:=Rng2.Start, End:=Selection.End
'' MsgBox "1-Byte-Sequenz"
strErsatz = ChrW(Val("&H" & Selection.Text & "&"))
''MsgBox "Der UTF-8-Code '" & Selection.Text & "' bedeutet '" _
& ChrW(Val("&H" & Selection.Text & "&")) & "'."
'strUTF_decodiert = Replace(strUTF_decodiert, "%" & Selection.Text, strErsatz)
Rng2.Text = strErsatz
Rng2.Font.Underline = True
i=i+1
Else
' kein UTF8-Code:
k=k+1
'' GoTo Zeile_Ergebnis
End If
169
End If
'' MsgBox "Der UTF-Code ist: " & Replace(Selection, "%", " ")
' **************************
' Schleife nach oben:
Selection.Collapse Direction:=wdCollapseEnd
GoTo Zeile_Schleife_Weitermachen
' **********************************************
Zeile_Ergebnis:
If i > 0 Then
' für verbessertes Inhalt-Einfügen:
Fkt_UTF8_decodieren = vbCrLf & vbCrLf _
& "Es wurden an " & i & " Stellen UTF8-Code decodiert (und unterstrichen)." & strMisserfolg
Else
Fkt_UTF8_decodieren = "" & strMisserfolg
End If
End Function
' ---------------------------------------------------------------------------------------------------------
Private Function Fkt_zweiByte_Sequenz(strCode As String) As Integer
' H. Chris Gast, Stand 2. Juli 2015.
Dim Z As String
Dim Y As String
Dim x As String
Dim strUCS As String
Dim IntUCS As Long
Z = UCase(Left(strCode, 2))
Y = UCase(Mid(strCode, 3, 2))
Dim i
Dim strText
Dim strÜberschrift
strÜberschrift = ""
' *****************
' Rechenformel nach ISO/IEC 10646:2003, Anhang D (nicht mehr in neueren Ausgaben!)
IntUCS = (Val("&H" & Z & "&") - 192) * 64 + (Val("&H" & Y & "&") - 128)
strText = "Der UTF-8-Code '" & Selection.Text & "' bedeutet '" _
& ChrW(IntUCS) & "'."
''i = MessageBoxW(0, StrPtr(strText), StrPtr(strÜberschrift), 0)
Fkt_zweiByte_Sequenz = IntUCS
End Function
' ---------------------------------------------------------------------------------------------------------
Private Function Fkt_dreiByte_Sequenz(strCode As String) As Integer
' H. Chris Gast, Stand 2. Juli 2015.
Dim Z As String
Dim Y As String
Dim x As String
Dim strUCS As String
Dim IntUCS As Long
Z = UCase(Left(strCode, 2))
Y = UCase(Mid(strCode, 3, 2))
x = Mid(strCode, 5, 2)
Dim i
Dim strText
Dim strÜberschrift
strÜberschrift = ""
' *****************
' Rechenformel nach ISO/IEC 10646:2003, Anhang D (nicht mehr in neueren Ausgaben!)
IntUCS = (Val("&H" & Z & "&") - 224) * 4096 + (Val("&H" & Y & "&") - 128) * 64 _
+ (Val("&H" & x & "&") - 128)
strText = "Der UTF-8-Code '" & Selection.Text & "' bedeutet '" _
170
& ChrW(IntUCS) & "'."
''i = MessageBoxW(0, StrPtr(strText), StrPtr(strÜberschrift), 0)
Fkt_dreiByte_Sequenz = IntUCS
End Function
' ---------------------------------------------------------------------------------------------------------
Private Function Fkt_vierByte_Sequenz(strCode As String) As Long
' H. Chris Gast, 26. August 2015.
Dim Z As String
Dim Y As String
Dim x As String
Dim w As String
Dim strUCS As String
Dim IntUCS As Long
Z = UCase(Left(strCode, 2))
Y = UCase(Mid(strCode, 3, 2))
x = UCase(Mid(strCode, 5, 2))
w = UCase(Mid(strCode, 7, 2))
Dim i
Dim strText
Dim strÜberschrift
strÜberschrift = ""
' *****************
' Rechenformel nach ISO/IEC 10646:2003, Anhang D (nicht mehr in neueren Ausgaben!)
'' z = F0 .. F7; y; x; w; (z-F0)*2 hoch 18 + (y-80)*2 hoch 12 +(x-80)*2 hoch 6 + (w-80);
'' nur bis "F4" gültig!
''''''''''''''''''''''''''''
If Val("&H" & Z & "&") > 244 Then
''MsgBox "unzulässiger UTF8-Code!", vbInformation
Fkt_vierByte_Sequenz = 0
Exit Function
End If
'' MsgBox "4-Byte-Sequenz.", vbInformation
IntUCS = (Val("&H" & Z & "&") - 240) * 262144 + (Val("&H" & Y & "&") - 128) * 4096 _
+ (Val("&H" & x & "&") - 128) * 64 + (Val("&H" & w & "&") - 128)
' *****************
Fkt_vierByte_Sequenz = IntUCS
' ******************
' Nur für Testzwecke!
'' strText = "Der UTF-8-Code '" & Selection.Text & "' bedeutet '" _
& ChrXXL(IntUCS) & "'."
'' i = MessageBoxW(0, StrPtr(strText), StrPtr(strÜberschrift), 0)
'' MsgBox IntUCS
End Function
' ---------------------------------------------------------------------------------------------------------
Private Function ChrXXL(Code2) As String
' Dipl.-Ing Hanna-Chris Gast, 2011.
' Unterfunktion für Zeichen höherer Ebenen, passend für Word 2000 und höher
' Berechnung nach nach ISO/IEC 10646:2003, Anhang C:
Dim Surrogat1
Dim Surrogat2
If Code2 = 0 Then
ChrXXL = ""
Exit Function
End If
Surrogat1 = Hex(Int((Code2 - 65536) / 1024) + 55296)
Surrogat2 = Hex((Code2 - 65536) - (Int((Code2 - 65536) / 1024) * 1024) + 56320)
ChrXXL = ChrW("&H" & Surrogat1) & ChrW("&H" & Surrogat2)
End Function
171
' ---------------------------------------------------------------------------------------------------------
Private Sub Shapes_beseitigen()
' H. Chris Gast, September 2012, Januar 2013, Januar 2015, 13. + 14. Oktober 2015.
' Makro beseitigt störende Shapes und wandelt sie ggf. um in Frames und InlineShapes.
' Erfasst nicht alle Grafiken, wenn pdf mit Adobe X in Word umgewandelt wurde.
Dim i As Integer
Dim IntType As Integer
For i = ActiveDocument.Shapes.Count To 1 Step -1
If ActiveDocument.Shapes(i).Type = msoTextBox Then ' 17
' Textfelder umwandlen in Textrahmen (Textbox in Frame)
ActiveDocument.Shapes(i).ConvertToFrame
ElseIf ActiveDocument.Shapes(i).Type = msoPicture Then ' 13
' frei positioniertes Bild (Picture) in normale Bildposition.
ActiveDocument.Shapes(i).ConvertToInlineShape
ElseIf ActiveDocument.Shapes(i).Type = msoLinkedPicture Then ' 11
' frei positioniertes verknüpftes Bild (Linked Picture).
On Error Resume Next
IntType = ActiveDocument.Shapes(i).Type
ActiveDocument.Shapes(i).ConvertToInlineShape
If Err.Number > 0 Then
''ActiveWindow.ScrollIntoView Selection.Range ' Sonst sieht man nichts!
'Testweise:
ActiveDocument.Shapes(i).Select
''Selection.Range.Paragraphs(1).Range.HighlightColorIndex = wdDarkRed
''MsgBox "Abbruch: Diese Grafik lässt sich nicht umwandeln!", vbCritical
ActiveDocument.Shapes(i).Delete
Selection.TypeText "<!Shape-Typ " & IntType & " gelöscht>"
Err.Clear
''Exit Sub
End If
On Error GoTo 0
Else
' AutoForm, Zeichnungsobjekt oder sonstige Grafikobjekte löschen.
IntType = ActiveDocument.Shapes(i).Type
ActiveDocument.Shapes(i).Select
ActiveDocument.Shapes(i).Delete
Selection.TypeText "<!Shape-Typ " & IntType & " gelöscht>"
End If
Next i
' ******
End Sub
' ---------------------------------------------------------------------------------------------------------
172
8.4
Makro "Bereinigt_Einfügen" mit AltGr + j
Hier werden neben "fett", "kursiv" und "unterstrichen" auch einige Absatz-Formatvorlagen
erhalten. Auch Bilder, Felder und Fußnoten bleiben erhalten. Es werden Symbol- und
Wingdings-Zeichen konvertiert, aber keine UTF8-Codes wie in 8.3. Es werden Textfelder
("Textbox") in normalen Text konvertiert, frei positionierte Bilder in normal positionierte
Bilder umgewandelt. Bei den übrigen Shapes wird in grüner Farbe auf das Löschen
hingewiesen.
' Makromodul "Bereinigt_einfuegen"
'
Option Explicit
Private Dok1 As Word.Document
Private Blhochtief As Boolean
Sub Bereinigt_einfügen()
' Dipl.-Ing. Hanna-Chris Gast, Juni bis August 2015, 14. September 2015, 13. Oktober 2015.
' Text mit Formaten und Bildern aus der Zwischenablage einfügen,
' jedoch mit begrenzter Anzahl von Styles.
' Funktioniert von Word 2000 bis Word 2010, Windows XP und Windows 7.
'
' Exponenten und Indizes mit Höher- und Tieferstellungen werden durch
' Hoch- und Tiefstellung ersetzt, mittels Unterprozedur c25 funktioniert
' dies auch bei Sonderstyles mit krummen Zahlen.
'
' Nur bei Überschriften und Anhangs-Titeln bleiben Nummerierungen erhalten,
' ansonsten werden sie eingefroren.
'
' Durch Aufrufen eines anderen Makros werden Symbol- und Wingdings-Zeichen so weit
' wie möglich durch Unicode-Zeichen ersetzt.
' Auch in Fußnoten werden jetzt Symbol- und Wingdingszeichen in Unicode umgewandelt.
'
' Rechenzeitbeschleunigung mittels unsichtbarem Zwischendokument.
'
' Schriftart und Zielschriftgrößen richten sich nach der Formatvorlage "Standard" im Zieldokument.
' Am Schluss per Absatz-Reset verbessertes Anpassung an Zieldokument.
'
' Shapes werden nach Möglichkeit in Bilder bzw. Text umgewandelt, ansonsten gelöscht.
' ************************************
' (Dok1 und Blhochtief sind weiter oben definiert)
Blhochtief = False
Dim BlFormel As Boolean: BlFormel = False
Dim Dok2 As Word.Document
Dim astyle As Style
Dim strStylesListe As String
Dim Stelle1 As Long
Dim rng1 As Range
Dim k As Integer
' ************************************
' Lästiges "Flackern" des Bildschirms verhindern:
StatusBar = "Bitte warten - das Makro läuft."
Application.ScreenUpdating = False
Options.Pagination = False
' ************************************
' Zeitmessen für die Makro-Dauer in Sekunden
Dim Zeit1 As Single ' "Single" = Zahlen mit Dezimalen
173
Dim Zeit2 As Single
Dim Zeitdauer As Single
Zeit1 = Timer
' ************************************
' Stelle im Zieldokument merken, wo Beginn der Einfügung sein wird:
Stelle1 = Selection.Start
' ************************************
Set Dok1 = ActiveDocument
' ************************************
' Automakros ausschalten, damit keine Zeit verloren wird durch Briefköpfe.
WordBasic.DisableAutoMacros 1 ' Disables auto macros
' ******************************************************************
' Zwischendokument erstellen:
'Set Dok2 = Documents.Add(DocumentType:=wdNewBlankDocument)
Set Dok2 = Documents.Add(DocumentType:=wdNewBlankDocument, Visible:=False)
Dok2.Activate
Selection.WholeStory
' ***********************
' Beim Einfügen prüfen, ob die Zwischenablage nicht leer ist und auch Text enthält:
On Error GoTo Zeile_Zwischenablage_leer
Selection.Paste
'' On Error GoTo 0
On Error GoTo Zeile_Fehler
' Alles markieren und Länge prüfen:
Selection.WholeStory
If Len(Replace(Selection, ChrW(13), "")) < 2 Then
Dok2.Close (wdDoNotSaveChanges)
Dok1.Activate
Application.Visible = True
WordBasic.DisableAutoMacros 0
MsgBox "Fehler, das Einfügen ergab nichts!"
''Set Dok1 = Nothing
''Set Dok2 = Nothing
Exit Sub
End If
' ************************************
''' Felder beseitigen:
'' Selection.Fields.Unlink
' gestrichen 6.August 2015.
' ************************************
' Seitenumbrüche, Abschnittswechsel usw. beseitigen:
Selection.WholeStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^12"
.Replacement.Text = "^p"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.Replacement.Style = ActiveDocument.Styles(wdStyleNormal)
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "^14"
.Replacement.Text = "^p"
.Forward = True
174
'
'
'
'
'
'
'
'
'
'
.Wrap = wdFindContinue
.Format = False
.Replacement.Style = ActiveDocument.Styles(wdStyleNormal)
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
************************************
Absatzmarken bezüglich hoch- und tiefgestellt resetten:
Selection.WholeStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Font.Position = 0
Selection.Find.Replacement.Font.Subscript = False
Selection.Find.Replacement.Font.Superscript = False
With Selection.Find
.Text = "^p"
.Replacement.Text = "^p"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
************************************
Vorhandene Farbmarkierungen beseitigen:
ActiveDocument.Range.HighlightColorIndex = wdAuto
' Farbmarkierung beseitigen, die eine "Schattierung" ist:
With ActiveDocument.Range.Font.Shading
.Texture = wdTextureNone
.ForegroundPatternColor = wdColorAutomatic
.BackgroundPatternColor = wdColorAutomatic
End With
' Farbmarkierung beseitigen, die auf Absatzeigenschaften beruht:
With ActiveDocument.Range.ParagraphFormat.Shading
.Texture = wdTextureNone
.ForegroundPatternColor = wdColorAutomatic
.BackgroundPatternColor = wdColorAutomatic
End With
******************************************************************
Höher-tiefer-Gestelltes durch Hoch- und Tiefgestelltes ersetzen
(krummen Zahlen für Höherstellungen, die nicht direkt gefunden werden können):
Call c25_höher_tiefer_Animation_für_Word_2000
******************************************************************
Änderungsverfolgung ausschalten:
ActiveDocument.TrackRevisions = False
Alle Änderungen annehmen:
If ActiveDocument.Revisions.Count >= 1 Then _
ActiveDocument.Revisions.AcceptAll
If ActiveDocument.Revisions.Count >= 1 Then _
ActiveDocument.AcceptAllRevisions
' Alle Kommentare löschen:
Dim Kommentar As Comment
For Each Kommentar In ActiveDocument.Comments
Kommentar.Delete
175
Next
' **********************************************
' Sonderschrift "BSsymb9" abfragen und beseitigen:
Options.DefaultHighlightColorIndex = wdPink
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Font.Name = "BSsymb9"
.Text = ""
.Replacement.Font.Name = "Arial"
.Replacement.Text = "<!BSsymb9-Zeichen!>"
.Replacement.Highlight = True
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Options.DefaultHighlightColorIndex = wdYellow
' **********************************************
' Unzulässige Styles (Formatvorlagen) löschen,
' folgende Styles bleiben zulässig, auch für Nummerierungen:
strStylesListe = "a2, a3, ANHANG, BesuchterHyperlink, " _
& "Biblio Entry, Bild-Titel, Erklärung-grün, Fußnotentext, Fußnotenzeichen, " _
& "Hyperlink, Literaturverzeichnis, Makrozeilen, Normale Tabelle, " _
& "Standard, Tabellen-Titel, Überschrift 0, Überschrift 1, Überschrift 2, " _
& "Überschrift 3, Überschrift 4, Equation, Formula, " _
& "Überschrift_3ohne, Verzeichnis 1, Verzeichnis 2, Verzeichnis 3, Verzeichnis 4, " _
& "Verzeichnis 9,"
' Es werden trotzdem nicht alle Formatvorlagen gelöscht,
' aber Fehlermeldungen nützen hier nichts,
' Error inkaufnehmen und Warnmeldungen unterdrücken:
On Error Resume Next
Application.DisplayAlerts = False
For Each astyle In ActiveDocument.Styles
If astyle.InUse = True Then
If InStr(strStylesListe, astyle.NameLocal) = 0 Then
' unzulässiger Style, muss gelöscht werden.
Debug.Print astyle.NameLocal
' Rückwärts suchen, um Nummerierungen zu erhalten:
ActiveDocument.Range.Select
Selection.Collapse Direction:=wdCollapseEnd
Selection.Find.ClearFormatting
Selection.Find.Style = astyle
''Selection.Find.Highlight = False
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = False ''True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
' ergänzt 13. 10.2014, um Nummerierungen zu erhalten:
Do While .Execute
176
'
'
'
'
'
''If Selection.Start < 2 Then Exit Do
If Selection.Range.Style <> astyle Then Exit Do
Selection.Range.ListFormat.ConvertNumbersToText
''Selection.Range.HighlightColorIndex = wdPink
Selection.Style = ActiveDocument.Styles(wdStyleNormal)
Selection.Collapse
''Selection.MoveLeft
Loop
End With
''' *****
' "Standard" wird nicht gelöscht:
If astyle.NameLocal <> "Standard" Then
astyle.Delete
End If
' *********
End If
End If
Next astyle
Application.DisplayAlerts = True
Err.Clear
On Error GoTo Zeile_Fehler
************************************
Font teilweise (!) resetten:
' Alle überschüssigen Font-Eigenschaften resetten:
With Dok2.Range.Font
''.Size = ActiveDocument.Styles(wdStyleNormal).Font.Size
''.Bold = False
''.Italic = False
''.Underline = wdUnderlineNone
''.UnderlineColor = wdColorAutomatic
''.StrikeThrough = False
.DoubleStrikeThrough = False
.Outline = False
.Emboss = False
.Shadow = False
.Hidden = False
''.SmallCaps = False
''.AllCaps = False
.Color = wdColorAutomatic
.Engrave = False
''.Superscript = False
''.Subscript = False
.Spacing = 0
.Scaling = 100
.Position = 0
.Kerning = 0
.Animation = wdAnimationNone
'' .Ligatures = wdLigaturesNone
'' .NumberSpacing = wdNumberSpacingDefault
'' .NumberForm = wdNumberFormDefault
'' .StylisticSet = wdStylisticSetDefault
'' .ContextualAlternates = 0
' (obiges ist unzulässig in Word 2000, in Word 2010 vielleicht wieder aktivieren)
.Name = Dok1.Styles(wdStyleNormal).Font.NameAscii
End With
************************************
In Fußnoten Font-Eigenschaften bereinigen:
Font resetten außer hoch- und tiefgestellt:
' Alle überschüssigen Font-Eigenschaften resetten:
If Dok2.Footnotes.Count > 0 Then
With ActiveDocument.StoryRanges(2).Font
'' .Size = ActiveDocument.Styles(wdStyleNormal).Font.Size
177
'
'
'
'
'
'
'
'
'' .Bold = False
'' .Italic = False
'' .Underline = wdUnderlineNone
'' .UnderlineColor = wdColorAutomatic
'' .StrikeThrough = False
.DoubleStrikeThrough = False
.Outline = False
.Emboss = False
.Shadow = False
.Hidden = False
'' .SmallCaps = False
'' .AllCaps = False
.Color = wdColorAutomatic
.Engrave = False
''.Superscript = False
''.Subscript = False
.Spacing = 0
.Scaling = 100
.Position = 0
.Kerning = 0
.Animation = wdAnimationNone
''.Ligatures = wdLigaturesNone
''.NumberSpacing = wdNumberSpacingDefault
''.NumberForm = wdNumberFormDefault
''.StylisticSet = wdStylisticSetDefault
''.ContextualAlternates = 0
.Name = Dok1.Styles(wdStyleNormal).Font.NameAscii
End With
End If
************************************
Alle Rahmen um Zeichen beseitigen:
ActiveDocument.Range.Font.Borders(1).LineStyle = wdLineStyleNone
Alle Shapes beseitigen:
Call Shapes_beseitigen
***************
Schriftgröße von normalem Text an Zieldokument anpassen:
Es bleibt noch ein Problem bei "Anhang"
On Error Resume Next
Dim aPara
For Each aPara In Dok2.Range.Paragraphs
If aPara.Range.Style = ActiveDocument.Styles(wdStyleNormal) Then
aPara.Range.Font.Size = Dok1.Styles(wdStyleNormal).Font.Size
End If
Next aPara
Err.Clear
On Error GoTo Zeile_Fehler
**************************
Warnungen mit Markierung versehen:
Selection.WholeStory
''Options.DefaultHighlightColorIndex = wdYellow
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "\<\!*\>"
'.Replacement.Highlight = True
.Replacement.Font.Color = wdColorGreen
.Replacement.Text = ""
''.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True
178
'
'
'
'
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
''Options.DefaultHighlightColorIndex = wdYellow
*******************************************************************
Alles in der Zwischendatei markieren und kopieren, diese dann
ohne zu speichern schließen:
Selection.WholeStory
Selection.Copy
Zwischendatei schließen:
Dok2.Close (wdDoNotSaveChanges)
'
' Im ursprünglichen Ziel-Dokument bearbeiteten Text einfügen:
Dok1.Activate
Selection.Paste
' ******************************************************************
' Das neu Eingefügte in der Ursprungsdatei mithilfe der Range-Funktion markieren:
Set rng1 = Selection.Range
rng1.SetRange Start:=Stelle1, End:=rng1.End
rng1.Select
' Formatvorlagen resetten:
Selection.ParagraphFormat.Reset
Selection.Fields.Update
' Fußnoten aber wieder höhersetzen:
If Selection.Range.Footnotes.Count > 0 Then
'' Selection.Range.Footnotes.Reference.Range.Font.Superscript = True 'geht so nicht!!!
'' Alle Fußnotenzeichen 3 Punkt höher und 2 Punkt kleiner:
' (Voerst nur wiederhochsetzen, kein Anpassen)
Dim i As Integer
For i = 1 To ActiveDocument.Footnotes.Count
Set rng1 = ActiveDocument.Footnotes(i).Reference
rng1.Style = ActiveDocument.Styles(wdStyleFootnoteReference)
With rng1.Font
.Position = 0 '3
.Superscript = True 'False
.Subscript = False
''.Size = rng1.Paragraphs(1).Range.Style.Font.Size - 2
.ColorIndex = wdAuto
.Bold = False
.Italic = False
End With
Next i
End If
' ******************************************************************
' Im Suchen/Ersetzen-Menü alles zurückstellen
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
' ************************************
WordBasic.DisableAutoMacros 0 ' Automakros wieder erlauben
179
' ************************************
' Bildschirm wieder einschalten:
Options.Pagination = True
StatusBar = False
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
' Alles wieder sichtbar machen:
Application.Visible = True
' ******************************************************************
' Zeitmessen für die Makro-Dauer, Variante mit 2 Nachkommastellen und verzögerter MsgBox.
Zeit2 = Timer
Zeitdauer = Format((Zeit2 - Zeit1), "##,##0.00")
' ************************************
' Protokoll:
' Warteschleife, damit in Word 2010 die Messagebox nicht vor der letzten Aktualisierung
' angezeigt wird:
Dim tt As Single
tt = Timer
Do While Timer < tt + 0.1 'Sekunden
DoEvents
Loop
Dim strWarnung1 As String: strWarnung1 = ""
Dim strWarnung2 As String: strWarnung2 = ""
'' If Blhochtief = True Then
''
strWarnung1 = vbCrLf & vbCrLf _
''
& "Bitte vergessen Sie nicht den Button 'höher-tiefer' zur Nachbearbeitung."
'' End If
If BlFormel = True Then
strWarnung2 = vbCrLf & vbCrLf & "Unzulässige alte Formeln sind rot markiert."
End If
'
If Blhochtief = True Or BlFormel = True Or Zeitdauer > 1# Then
MsgBox "Die Rechenzeit war " & Zeitdauer & " Sekunden." & vbCrLf _
& strWarnung2 _
& strWarnung1
End If
Exit Sub
' ******************************************************************
' ******************************************************************
Zeile_Zwischenablage_leer:
Application.Visible = True
WordBasic.DisableAutoMacros 0
MsgBox "Die Zwischenablage (Clipboard) ist leer!", vbCritical
Dok2.Close (wdDoNotSaveChanges)
Dok1.Activate
Exit Sub
' ************************************
Zeile_Fehler:
' Bei Abbruch wegen Fehler muss auch alles wieder sichtbar gemacht werden!!!
Application.Visible = True
WordBasic.DisableAutoMacros 0
MsgBox "Fehler in Sub Fehlerbehandlung" & vbCrLf & "Fehlernummer: " & Err.Number & _
vbCrLf & "Fehlerbeschreibung: " & Err.Description, vbCritical
Dok2.Close (wdDoNotSaveChanges)
Dok1.Activate
' Für die Fehlersuche probeweise die Fehlerstelle wieder aufsuchen:
'' Resume
End Sub
' ---------------------------------------------------------------------------------------------------------
180
Private Sub c25_höher_tiefer_Animation_für_Word_2000()
' H.-Chris Gast, 21. bis 26. Juli 2015, 2. + 3. August 2015.
' Ersatz von "höher- und tiefergestellt" durch "hoch-" und "tiefgestellt".
' für Word 2000 bis Word 2010.
' Auch in Fußnoten werden jetzt Symbol- und Wingdingszeichen in Unicode umgewandelt.
'
' Wegen Dateien der DKE, bei denen auch vertikale Positionen mit den krummen
' Zahlen "3,5" und "4,5" vorkommen, nach denen man nicht direkt suchen kann,
' werden hier alle Zeichen gesucht, deren Vertikale Position ungleich Null ist.
'
' Damit die Umwandlung von Windows-Sonderzeichen auch in Fußnoten erfolgt, wird hier die
' Prozedur dafür in jeder Story-Range aufgerufen (2.8.2015).
'
' Auszug aus "Sub a91d" in Datei 120c, 21. - 24. Juli 2015, gekürzt und beschleunigt.
' Dipl.-Ing. Hanna-Chris Gast, 23. August 2012, neu 14. Januar 2013, Stand 16. Januar 2013.
'
' Es werden vertikale Positionen mit Nicht-Ganzen-Zahlen erfasst und dabei die im DIN unzulässigen
' Zeichenformatvorlagen der DKE beseitigt. Funktionsweise: Es werden dazu erst alle Zeichen
' mit "Position = 0" mittels Animation markiert, und dann alle nicht-markierten Zeichen abgefragt.
'
' Die hier gelöschte Beschleunigung durch Wechsel in Normalansicht führte in Word 2010 zu Absturz.
' ******************************************
Dim i As Integer
' laufende Zählung (Inhaltsverzeichnisse).
Dim j As Integer: j = 0 ' Anzahl der Exponenten.
Dim k As Integer: k = 0 ' Anzahl der Indizes.
Dim rng1 As Range
' Dokumentkomponenten.
Dim aField As Field
Dim Bxb As Boolean ' fett oder nicht fett
Dim Bxc As Boolean ' kursiv oder nicht kursiv
Dim Intxd As Integer ' unterstrichen oder nicht
Dim F1 As String
' Font des höher/tiefergestellten Zeichens
' ********************************************
On Error GoTo Zeile_Fehler_c25
' zuhause gab es die Meldung: "Diese Aktion kann nicht rückgängig gemacht werden"
Application.DisplayAlerts = False
' Auch die Fußnoten erfassen, aber nicht Kopf- und Fußzeilen:
For Each rng1 In ActiveDocument.StoryRanges
If rng1.StoryType > 2 Then Exit For
' ***************************************
Options.DefaultHighlightColorIndex = wdYellow
' *******************
' ((hier gekürzt, Sonderzeichen ² und ³ werden hier nicht ersetzt)
' *************************************************************
' Windows-Sonderzeichen in Haupttext, aber auch in Fußnoten umwandeln:
rng1.Select
''
Application.Run MacroName:= _
''
"Symbol_Wingdings_in_Unicode_nur_Markierten_Text"
' Makro in der "Template2" verwenden (3.August 2015):
Application.Run MacroName:= _
"Symbol_Wingdings_in_Unicode_nur_Markierten_Text"
' Bei Roter Markierung den Zeichencode eindeutig in den PUA-Bereich verschieben:
Selection.Find.ClearFormatting
Selection.Find.Highlight = True
With Selection.Find
.Text = "^?"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
181
.MatchSoundsLike = False
.MatchAllWordForms = False
Do While .Execute
If Selection.Range.HighlightColorIndex = wdRed Then
On Error Resume Next
With Dialogs(wdDialogInsertSymbol)
Selection.Text = ChrW(.charNum + 4096 + 61440)
End With
Selection.Font.Name = "Courier New"
Err.Clear
On Error GoTo 0
End If
Loop
End With
' ******************************************************
' Für "Höher/Tiefer zuerst alle Zeichen mit Position = 0
' durch Animation markieren:
' ******************************************************
rng1.Find.ClearFormatting
rng1.Find.Replacement.ClearFormatting
With rng1.Find
.Font.Position = 0
.Text = ""
.Replacement.Text = ""
.Replacement.Font.Animation = wdAnimationLasVegasLights
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
rng1.Find.Execute Replace:=wdReplaceAll
' obiges reichte nicht,
' Animation auf Einzelzeichen genau abgrenzen (spart Rechenzeit):
rng1.Find.ClearFormatting
rng1.Find.Replacement.ClearFormatting
With rng1.Find
.Font.Animation = wdAnimationNone
.Font.Position = 0
.Text = "^?"
.Replacement.Text = ""
.Replacement.Font.Animation = wdAnimationLasVegasLights
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
rng1.Find.Execute Replace:=wdReplaceAll
' alle Felder animieren(sie werden nicht bearbeitet):
For Each aField In rng1.Fields
aField.Result.Font.Animation = wdAnimationLasVegasLights
Next aField
' *************************************************
' Alle bereits vorhandenen höher- und tiefergestellte Zeichen ersetzen
' (das sind jetzt die Zeichen ohne Animation):
182
rng1.Select
Selection.Collapse ' "HomeKey Unit:=wdStory" würde auf Hauptkomponente springen.
' ***************
With Selection.Find
.ClearFormatting
.Text = "^?" ' dadurch werden nur noch Zeichen, nicht mehr Tabellenmarken abgefragt.
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = True
.Font.Animation = wdAnimationNone
'' .Font.ColorIndex = wdAuto
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
Do While .Execute
' ****************************
If Selection.Font.Position > 1 Then
' Exponenten:
' ***************************
' Höhergestellte Zeichen, auch die der DKE mit Nicht-Ganzen Positionszahlen.
' Ggf. Zeichenformatvorlagen beseitigen und hochstellen statt höherstellen,
' hier werden "fett", "kursiv" und "unterstrichen" nach Löschen des Styles
' sowie Font wiederhergestellt:
If Selection.Style.Type = wdStyleTypeCharacter Then
' höhergestelltes Zeichen gefunden:
' Weitere Zeicheneigenschaften sichern:
Bxb = Selection.Font.Bold
Bxc = Selection.Font.Italic
Intxd = Selection.Font.Underline
F1 = Selection.Font.Name
'''''''''''''''''''''''''''''''''''
''Selection.Style.Delete
''Selection.Style = ActiveDocument.Styles("Standard") ' funktionierte nicht!
Selection.Font.Reset
'''''''''''''''''''''''''''''''''''
' Neuzuordnen von Eigenschaften:
Selection.Font.Name = F1
Selection.Font.Bold = Bxb
Selection.Font.Italic = Bxc
Selection.Font.Underline = Intxd
End If
Selection.Font.Superscript = True
Selection.Font.Subscript = False
Selection.Font.Position = 0 '3
''' If Selection.Font.Size >= 9 Then
'''
Selection.Font.Size = Selection.Style.Font.Size - 2
''' End If
' *****
j=j+1
Selection.Range.HighlightColorIndex = wdTurquoise
Selection.Font.Animation = wdAnimationLasVegasLights
' nur so werden Endlosschleifen in geschachtelten Tabellen vermieden.
Selection.Collapse wdCollapseEnd
' ****************************
ElseIf Selection.Font.Position < -1 Then
' Indizes:
' ****************************
' Tiefer gesetztes Zeichen:
If Selection.Style.Type = wdStyleTypeCharacter Then
183
' Weitere Zeicheneigenschaften sichern:
Bxb = Selection.Font.Bold
Bxc = Selection.Font.Italic
Intxd = Selection.Font.Underline
F1 = Selection.Font.Name
'''''''''''''''''''''''''''''''''''
'Selection.Style.Delete
''Selection.Style = ActiveDocument.Styles("Standard") ' Funktioniert nicht.
Selection.Font.Reset
Selection.Font.Name = F1
'''''''''''''''''''''''''''''''''''
' Neuzuordnen von Eigenschaften:
Selection.Font.Name = F1
Selection.Font.Bold = Bxb
Selection.Font.Italic = Bxc
Selection.Font.Underline = Intxd
End If
Selection.Font.Superscript = False
Selection.Font.Subscript = True
Selection.Font.Position = 0
''If Selection.Font.Size >= 9 Then
'' Selection.Font.Size = Selection.Style.Font.Size - 2
''End If
' ****
k=k+1
Selection.Range.HighlightColorIndex = wdDarkYellow
Selection.Font.Animation = wdAnimationLasVegasLights
' nur so werden Endlosschleifen in geschachtelten Tabellen vermieden.
Selection.Collapse wdCollapseEnd
Else
' vermutlich Fehler oder positioniertes grafisches Zeichen (Position -1 bis + 1):
Selection.Font.Position = 0
Selection.Range.HighlightColorIndex = wdPink
Selection.Font.Animation = wdAnimationLasVegasLights
Selection.Collapse wdCollapseEnd
End If
Loop
End With
' *******************************
' Animation im ganzen StoryRange wieder beseitigen:
rng1.Font.Animation = wdAnimationNone
' Alle Felder in StoryRange aktualisieren:
rng1.Fields.Update
' *******************************
' Nächste Dokumentkomponente:
Next rng1
' ************************************
' Cursor muss wieder in die Hauptkomponente gestellt werden!
ActiveDocument.StoryRanges(1).Select
Selection.Font.Animation = wdAnimationNone
'
Application.DisplayAlerts = True
' ************************************
''' Protokoll:
'' MsgBox "Die Rechenzeit der Version a013c25 'für Word 2000' war " _
''
& Zeitdauer & " Sekunden. " & vbCrLf _
''
& "Alle Exponenten und Indizes wurden unterschiedlich gefärbt. " & vbCrLf _
''
& "Es gibt " & j & " Exponenten und " & k & " Indizes. "
''' ************************************
If j + k > 0 Then Blhochtief = True
Exit Sub
' ********************************************************
184
Zeile_Fehler_c25:
Application.Visible = True
MsgBox "Fehler in Sub Fehlerbehandlung" & vbCrLf & "Fehlernummer: " & Err.Number & _
vbCrLf & "Fehlerbeschreibung: " & Err.Description, vbCritical
'' Dok2.Close (wdDoNotSaveChanges)
'' Dok1.Activate
''Set Dok1 = Nothing
''Set Dok2 = Nothing
' Für die Fehlersuche probeweise weiterversuchen(?):
Resume
End Sub
' ---------------------------------------------------------------------------------------------------------
Private Sub Shapes_beseitigen()
' H. Chris Gast, September 2012, Januar 2013, Januar 2015, 13. + 14. Oktober 2015.
' Makro beseitigt störende Shapes und wandelt sie ggf. um in Frames und InlineShapes.
' Erfasst nicht alle Grafiken, wenn pdf mit Adobe X in Word umgewandelt wurde.
Dim i As Integer
Dim IntType As Integer
For i = ActiveDocument.Shapes.Count To 1 Step -1
If ActiveDocument.Shapes(i).Type = msoTextBox Then ' 17
' Textfelder umwandlen in Textrahmen (Textbox in Frame)
ActiveDocument.Shapes(i).ConvertToFrame
ElseIf ActiveDocument.Shapes(i).Type = msoPicture Then ' 13
' frei positioniertes Bild (Picture) in normale Bildposition.
ActiveDocument.Shapes(i).ConvertToInlineShape
ElseIf ActiveDocument.Shapes(i).Type = msoLinkedPicture Then ' 11
' frei positioniertes verknüpftes Bild (Linked Picture).
On Error Resume Next
IntType = ActiveDocument.Shapes(i).Type
ActiveDocument.Shapes(i).ConvertToInlineShape
If Err.Number > 0 Then
''ActiveWindow.ScrollIntoView Selection.Range ' Sonst sieht man nichts!
'Testweise:
ActiveDocument.Shapes(i).Select
''Selection.Range.Paragraphs(1).Range.HighlightColorIndex = wdDarkRed
''MsgBox "Abbruch: Diese Grafik lässt sich nicht umwandeln!", vbCritical
ActiveDocument.Shapes(i).Delete
Selection.TypeText "<!Shape-Typ " & IntType & " gelöscht>"
Err.Clear
''Exit Sub
End If
On Error GoTo 0
Else
' AutoForm, Zeichnungsobjekt oder sonstige Grafikobjekte löschen.
IntType = ActiveDocument.Shapes(i).Type
ActiveDocument.Shapes(i).Select
ActiveDocument.Shapes(i).Delete
Selection.TypeText "<!Shape-Typ " & IntType & " gelöscht>"
End If
Next i
' ******
End Sub
' ---------------------------------------------------------------------------------------------------------
185
Anhang A
Weitere Verbesserungen für Word 2000
In diesem Anhang gebe ich einige für Word 2000 nützliche Makros an (die natürlich auch in
neueren Word-Versionen funktionieren). Damit kann Word 2000 eigentlich alles, was ich
brauche. Ich sehe keine Notwendigkeit, mich privat auf eine neue Word-Version umzustellen.
Weitere Makros für Word siehe auch [6].
A.1 Beseitigen der bei Word 2000 lästigen Symbol-Leiste "Web"
In Word 2000 tauchte beim Anklicken im Inhaltsverzeichnis oder beim Anklicken eines
Querverweises jedes Mal die Symbolleiste "Web" wieder auf. In Google fand ich das Problem
häufig gelistet, jedoch überwiegend nur mit der Fragestellung und fast gar nicht mit einer
brauchbaren Lösung. Deshalb hier nun eine Lösung, die sich bei mir bewährte 51.
In der Vorlage "Normal.dot" ist die folgende Datei
Sub AutoExec()
CommandBars("Web").Enabled = False
End Sub
im Ordner "ThisDocument" unterzubringen (siehe Bild B.1):
Bild A.1: Screenshot des Makro-Explorer (Word 2000)
Dieses Makro funktioniert nicht für die Symbol-Leiste des "PDFMaker" von Adobe. Diese
kann erst unmittelbar beim Öffnen einer Datei deaktiviert werden.
A.2 Tastenkürzel anpassen in Word 2000
Ich habe mir in Word 2000 den Befehl für "Seitenansicht" an Word 2003 (Alt + D, A ) und
den Befehle für "Speichern unter" an Adobe (Strg + Shift + S ) angepasst (Zuordnung von
Tastenkürzeln siehe [6]). Insgesamt finde ich den Umgang mit dem alten Word 2000 und dem
zugehörigen Photo-Editor angenehmer als mit dem Nachfolge-Systeme Word 2003 bis
Word 2010.
51
186
Hiermit sei A. Gumtow gedankt, der mir aus den hunderten von Google-Fundstellen die richtige
herausgesucht hat.
A.3 Tabellen auch in Word 2000 in "Raster 5" formatieren
Bei dem Makro-Befehl "Gitternetz 5" in Word 2000 52 gehen die Textfarben sowie die
Eigenschaften "kursiv" und "fett" verloren, egal wie man die Optionen ("Schalter") setzt.
Soll in Word 2000 eine Tabelle nachträglich mit "Raster 5" formatiert werden, wie es sonst
erst ab Word 2003 möglich ist, mit Erhalt von farbigem Text und Erhalt des Schriftschnitts
"kursiv", kann das mit folgendem Makro erreicht werden.
Sub Tabelle_formatieren_wie_Raster_5()
' von "http://www.schreibbuero-richter.de", 28. März 2012.
Dim tbl As Word.Table
Dim cel As Word.Cell
'
Set tbl = Selection.Tables(1)
'
' automatische Größenänderung ausschalten
If tbl.AllowAutoFit Then
tbl.AllowAutoFit = False
End If
'
' "Abstand zwischen Zellen" deaktivieren/auf 0 setzen
If tbl.Spacing > 0 Then
tbl.Spacing = 0
' nur den Abstand auf 0 stellen, reicht leider nicht
' auch die Checkbox muss deaktiviert werden,
' dafür gibt es in VBA keinen Schalter, deswegen so:
With Dialogs(1080)
If .AllowSpacing <> 0 Then
.AllowSpacing = 0
.Execute
End If
End With
End If
'
' erst Innenlinien:
With tbl.Borders(wdBorderHorizontal)
.LineStyle = wdLineStyleSingle
.LineWidth = wdLineWidth075pt
.Color = wdColorBlack
End With
With tbl.Borders(wdBorderVertical)
.LineStyle = wdLineStyleSingle
.LineWidth = wdLineWidth075pt
.Color = wdColorBlack
End With
'
' dann Außenlinien:
With tbl.Borders(wdBorderBottom)
.LineStyle = wdLineStyleSingle
.LineWidth = wdLineWidth150pt
.Color = wdColorBlack
End With
With tbl.Borders(wdBorderTop)
.LineStyle = wdLineStyleSingle
.LineWidth = wdLineWidth150pt
.Color = wdColorBlack
End With
52
als Makrobefehl: "Selection.Tables(1).AutoFormat Format:=wdTableFormatGrid5,. . ."
187
With tbl.Borders(wdBorderLeft)
.LineStyle = wdLineStyleSingle
.LineWidth = wdLineWidth150pt
.Color = wdColorBlack
End With
With tbl.Borders(wdBorderRight)
.LineStyle = wdLineStyleSingle
.LineWidth = wdLineWidth150pt
.Color = wdColorBlack
End With
'
' 1. Zeile/n zur Kopfzeile machen
tbl.Range.Cells(1).Select
Selection.Collapse wdCollapseStart
Selection.SelectRow
Selection.Rows.HeadingFormat = True
End Sub
' ---------------------------------------------------------------------------------------------------------
A.4 Befehl "Edit Field" auch für Word 2000
In Word 2000 fehlte noch die Funktion, dass man mit einem Mausklick rechts ein
vorhandenes Feld bearbeiten kann.
Das folgende Makro kann hier ein bisschen Abhilfe schaffen. Glücklicherweise funktioniert
neuerdings (Stand: Sommer 2013) der SendKeys-Befehl in Word 2000 unter Windows XP,
was bisher fast unmöglich war. Ein bisschen ist das immer noch eine etwas heikle Sache.
Aber nur mit SendKeys kann man in den Word-Dialog für Felder den Feldtyp eingeben,
soviel ich weiß. Der entscheidende Hinweis: SendKeys funktioniert bei Aufruf des Makros durch
Tastenkürzel nur dann, wenn das Makro vor dem Sendkeys-Befehl eine Pause von 1 Sekunde macht!
In Word 2010 funktioniert das folgende Makro gut bei Inhaltsverzeichnissen, ist aber nicht
brauchbar bei anderen Feldern wie Datumsfeldern. 53
Für das folgende Makro habe ich mir ein Tastenkürzel festgelegt.
Sub Feld_Dialog_halbgefüllt_öffnen_Word_2000()
' H. Chris Gast, 10. August 2013.
' Dieses Makro ersetzt teilweise den in Word 2000 noch fehlenden Befehl "Edit Field",
' der ab Word 2003 mit rechtem Mausklick wählbar ist.
'
' Inhaltsverzeichnis und Datumsangaben können so recht gut bearbeitet werden. Bei Querverweisen
' gehen die vorhandenen Einstellungen verloren und müssen neu gewählt werden.
' Die alten Schalter werden nicht ausgelesen. Das Makro ist aber in Word 2000 trotzdem hilfreich.
' ****
Dim a1 As String ' der gesamte ausgelesene Feldcode
Dim a2 As String ' der einfache Feldcode ohne Zusätze
Dim b1 As String ' der Zusatz im Feldcode hinter dem Leerzeichen
' *************************************
' Das Feld in oder an der markierten Stelle markieren:
Selection.Expand Unit:=wdSentence
53
188
Version für Word 2010 auf Anfrage lieferbar.
'
'
'
'
'
'
'
'
'
'
'
'
''
If Selection.Range.Fields.Count = 0 Then
MsgBox "Es ist kein Feld markiert!"
Exit Sub
End If
' Beim Inhaltsverzeichnis ist unter Umständen nur eine Zeile mit Feldcode "Hyperlink" markiert;
' mit den folgenden 2 Befehlen wird die Markierung an den Beginn des Inhaltsverzeichnisses
' verschoben.
ActiveDocument.Fields.ToggleShowCodes
ActiveDocument.Fields.ToggleShowCodes
' Wenn nicht genug markiert ist, Markierung erweitern:
If Selection.Range.Fields.Count = 0 Then
Selection.Range.Words(1).Fields(1).Select
Else
Selection.Range.Fields(1).Select
End If
******************************************
Feldcode-Stücke aus dem markierten Feld auslesen:
a1 = Selection.Range.Fields(1).Code
' zum Beispiel a1 = "CREATEDATE \@ "d. MMMM yyyy"
a2 = Trim(Left(a1, InStr(3, a1, " "))) ' zum Beispiel: a2 = "CreateDate" (ohne Leerzeichen)
b1 = Trim(Mid(a1, InStr(3, a1, " ") + 4)) ' zum Beispiel: b1 = "d. MMMM yyyy"
b1 = Replace(b1, ChrW(34), "")
' Gänsefüßchen entfernen!
******************************************
Je nach Feldtyp unterschiedliche Dialoge aufrufen:
******************************************
If UCase(a2) = "TOC" Then
' Inhaltsverzeichnis:
With Dialogs(wdDialogInsertTableOfContents)
If .Display = -1 Then
' User selected OK, remove old and insert new
Selection.Delete
.Execute
End If
End With
Exit Sub
ElseIf InStr(LCase(a1), "ref _ref") > 0 Then
' Querverweis auf andere Abschnitte:
With Dialogs(wdDialogInsertCrossReference)
If .Display = -1 Then
' User selected OK, remove old and insert new
Selection.Delete
.Execute
Selection.Fields.Update
End If
End With
Exit Sub
End If
******************************************
Per Sendkey im Dialog "Dialogs(wdDialogInsertField)" den ermittelten Feldcode einfügen:
******************************************
Bei Start des Makros per Tastenkürzel vor SendKeys-Befehl 1 Sekunden warten
(siehe auch "http://support.microsoft.com/kb/138624"):
Dim tt As Double
tt = Timer
Do While Timer < tt + 1#
' 1,0 Sekunde
DoEvents
Loop
********************
Die SendKeys-Befehle sind je nach Word-Version unterschiedlich:
If Val(Application.Version) = 9 Then
' Word-Version ist Word 2000.
' (die SendKey-Befehle werden am besten vor dem Dialog eingegeben):
SendKeys "(%b)"
' Häkchen entfernen bei "Formatierung beibehalten"
189
SendKeys "(%n)" & a2
' Codenamen einfügen
If UCase(a2) = "REF" Then
' Verweisung auf Textmarke:
'' b1 = Left(Mid(a1, InStr(2, a1, " ") + 1), InStr(6, a1, " ") - 6)
SendKeys "(%o)(%m)(%n)" ' & b1 '', True ' & "(%z)"
'' SendKeys "(%z)"
Else
' Datumsangaben und anderes.
SendKeys "(%o)" '' & b1 & "(%z)" ' es wurde hier die falsche Option eingefügt!
End If
With Dialogs(wdDialogInsertField)
.Show
End With
' **************
'' End If
ActiveDocument.Fields(1).ShowCodes = False
End Sub
Zu beachten ist:
Um SendKeys in einem Makro zu verwenden, das durch ein Tastenkürzel gestartet wird, muss
man eine Warteschleife von einer Sekunde einbauen.
Die SendKeys werden am besten vor die Zeile mit dem "WdDialog" gestellt. Ein "True" für
"Warten" hinter die SendKeys-Befehle führte zu Fehlfunktionen. Zwischen "Sendkeys" und
"WdDialog" darf keine Verzögerung eingebaut werden.
A.5 Lösung zu dem Problem mit "Gehe zu Seite" in Word 2000
Bei "Gehe zu Seite" ist in Word 2000 das Eingabefeld nicht leer. Es steht darin die letzte
Seiteneingabe. Ich muss dann diese erst löschen, bevor ich die neue Zielseitennummer eingeben kann.
Endlich fand ich dafür eine Abhilfe. Ich programmiere ein Ersatzmakro für diesen Befehl:
Sub GoTo_Eingabefeld()
' Erstellt von H. Chris Gast, 30. Juni 2011.
' Ruft Dialogfeld auf, ohne dass in Word 2000 fehlerhaft das Eingabefeld schon einen
' Zahlenwerte vom letzten Mal enthält.
Dialogs(wdDialogEditGoTo).Show
End Sub
Es zeigte sich, dass bei diesem Makro das Eingabefeld stets leer ist.
Ich wies diesem Makro das Tastenkürzel "Strg + G" zu. Statt des fehlerhaften eingebauten Befehls
wird nun stets das neue Makro ausgeführt.
Anmerkung: Ich weise die gewünschten Tastenkürzel lieber von Hand zu, nur bei der
Übertragung in einen neuen Computer verwende ich wegen der Vielzahl der Tastenkürzel ein
Formblatt mit Makros aller Tastenkürzel, siehe [6].
190
A.6 Suche nach Text mit Farbschattierung in Word 2000
Mit dem folgenden zwei Makros kann man auch in Word 2000 nach einer oder mehreren
Hintergrundsfarben suchen, was sonst mit dem normalen Suchbefehl nicht funktioniert.
Sub Farbe_in_Text_suchen()
' H. Chris Gast, 11. Januar 2015.
' Suche die nächste Textstelle mit (irgendeiner) Farbe.
' Es wird nicht nach Tabellenschattierungen gesucht.
' Funktioniert auch bei Word 2000.
' Man kann in Word 2000 zwar nach "Highlight" suchen, aber die Suche nach "Shading" mit
' "Selection.Find.Font.Shading.BackgroundPatternColor = …" funktioniert nicht in Word 2000!
' Deshalb die folgende Lösung mit "For Each...Characters".
' Dabei wird auch gleichzeitig nach Schriftfarbe und nach "Highlight" gesucht.
' *********************
Dim aChr As Range
Dim Rng0 As Range
Set Rng0 = Selection.Range
Rng0.SetRange Start:=Rng0.End, End:=ActiveDocument.Range.End
'
For Each aChr In Rng0.Characters
If aChr.HighlightColorIndex <> wdAuto _
Or aChr.Font.Shading.BackgroundPatternColor <> wdColorAutomatic _
Or aChr.Font.Shading.ForegroundPatternColor <> wdColorAutomatic _
Or aChr.Font.Color <> wdColorAutomatic Then
aChr.Select
' ' Hier gegebenenfalls Abfragen nach einer bestimmten Farbe einfügen.
MsgBox "Hier wurde eine farbige Text-Stelle gefunden!"
Exit Sub
End If
Next aChr
MsgBox "Keine (weiteren) farbigen Textstellen im Text."
End Sub
Sub hellrosa_Schattierung_suchen()
' H. Chris Gast, 11. Januar 2015.
' Suche die nächste Textstelle mit einer von zwei bestimmten hellrosa Farbschattierungen.
' Funktioniert auch bei Word 2000.
' Will man alle hellrosa-Töne finden, muss man den "ColorIndex = 5" abfragen, dann
' findet das Makro aber auch Farbtöne, die meines Erachtens eher lila aussehen.
' *********************
Dim aChr As Range
Dim Rng0 As Range
Set Rng0 = Selection.Range
Rng0.SetRange Start:=Rng0.End, End:=ActiveDocument.Range.End
'
For Each aChr In Rng0.Characters
'' If Selection.Font.Shading.BackgroundPatternColorIndex = 5 Then
If aChr.Font.Shading.BackgroundPatternColor = 16764159 _
Or aChr.Font.Shading.BackgroundPatternColor = wdColorRose Then
aChr.Select
MsgBox "Hier wurde eine hell-rosa Schattierung gefunden!"
Exit Sub
End If
Next aChr
MsgBox "Keine (weiteren) rosa Textstellen im Text."
End Sub
191
A.7 Alle Bilder eines Ordners gleichzeitig in eine Datei einfügen
Dieses Makro funktioniert auch in Word 2000, wo man sonst nur ein einziges Bild auf einmal
einfügen kann. Wenn das gewählte Bild eine "jpg-Datei" ist, werden alle jpg-Bilder des Ordners (mit
Dateiname als Bildtitel) eingefügt. Wenn das gewählte Bild ein "tif-Datei" ist, werden alle Tif-Bilder
eingefügt usw.
Sub a1_alle_Bilder_eines_Dateityps_einfügen_aus_wählbarem_Verzeichnis()
' H. Chris Gast, 16. Oktober 2012.
' nach verschiedenen Vorlagen aus dem Internet, kombiniert, verändert und erweitert.
' Dieses Makro fügt alle Bilder des gewählten Dateityps aus dem gewählten Ordner
' mit Dateiname als Bildtitel an der Markierung in die aktuelle Datei ein.
' Die Bilder werden beim Einfügen ggf. automatisch an die Spaltenbreite angepasst,
' was zum Beispiel für Spaltensatz günstig ist.
' Funktioniert in Word 2000 bis Word 2010.
' Offenes Problem: Die Reihenfolge der Bilder ist oft nicht wunschgemäß.
'
Dim sBilddateiname As String
Dim strPfad As String ' Pfad des Ordners mit den Bildern
Dim strFullname As String
Dim Endung As String
'
' Formateinstellungen merken:
Selection.CopyFormat
' ***********
MsgBox "Wählen sie im folgenden Menü ein beliebiges Bild des Ordners aus, " _
& "dessen Bilder einzufügen sind, und drücken Sie dort den Button ""Einfügen""."
With Application.Dialogs(wdDialogInsertPicture)
.Display
strFullname = .Name
End With
If strFullname = "" Then
MsgBox "Es wurde nichts ausgewählt!"
Exit Sub
End If
strPfad = Left(strFullname, InStrRev(strFullname, "\") - 1) & Application.PathSeparator
Endung = Right(strFullname, 3)
' Endung = "*." & Endung
' ****************
sBilddateiname = Dir(strPfad & "*." & Endung)
' *********
' Überschrift, zentriert und fett:
Selection.TypeParagraph
Selection.TypeText Text:="Der Ordner " & strPfad _
& " enthält folgende " & Endung & "-Bilder:" & vbCrLf
'Selection.MoveUp Unit:=wdLine, Count:=1, Extend:=wdExtend
Selection.MoveUp Unit:=wdParagraph, Count:=1, Extend:=wdExtend
'
Selection.Font.Bold = True
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
Selection.MoveDown Unit:=wdParagraph, Count:=1
Selection.Font.Bold = False
Selection.Font.Size = 10
Selection.Font.Name = "Arial"
' ****************
' Zum Bildeinfügen Schleife über alle jpg-Dateien im gewählten Ordner:
Do While sBilddateiname <> ""
Selection.InlineShapes.AddPicture FileName:=strPfad & sBilddateiname, LinkToFile:=False, _
192
SaveWithDocument:=True
With Selection
.ParagraphFormat.Alignment = wdAlignParagraphCenter ' wdAlignLeft
.TypeText Text:=vbCrLf & sBilddateiname & vbCrLf & vbCrLf
End With
sBilddateiname = Dir()
Loop
' *********
' Absatzausrichtung zurückstellen und ggf. überflüssige Absatzmarke beseitigen:
If Selection = ChrW(13) Then Selection.Delete
Selection.PasteFormat
Selection.Collapse
End Sub
Diese Makro verwende ich auch noch in Word 2010, wenn ich in einer Word-Datei die Bilder
mit den Dateinamen als Bildtitel haben will.
Bilder skalieren
Bilder werden beim Einfügen nicht größer als der Satzspiegel. Wenn ich die Bilder beim Einfügen
skaliert haben will, erzeuge ich vorher Spaltensatz im Text. Dann werden die Bilder nicht breiter als
die Textspalten. Anschließend kann ich den Spaltensatz, wenn ich will, wieder beseitigen.
193
Anhang B
Die Rechenformel zum Umrechnen von UTF8-Code in normale
Zeichen
B.1 Auszug aus: ISO/IEC 10646:2003, D.5 "
Mapping from UTF-8 form to UCS-4 form"
Table D.5 defines in mathematical notation the mapping from the UTF-8 coded representation form to the
UCS-4 coded representation form.
In the left column (UTF-8) the following notations apply:
z is the first octet of a sequence. Its value determines the number of continuing octets in the sequence.
y is the 2nd octet in the sequence.
x is the 3rd octet in the sequence.
w is the 4th octet in the sequence.
v is the 5th octet in the sequence.
u is the 6th octet in the sequence.
The ranges of values applicable to these octets are shown in D.2 above, following Table D.1.
NOTE - The algorithm for converting from UTF-8 to UCS-4 can be summarised as follows.
For each coded character in UTF-8 the bits in the free bit positions are concatenated as a bit-string. The bits from
this string, in increasing order of significance, are then distributed across the bit positions of a four-octet
sequence, starting from the least significant bit position. The remaining bit positions of that sequence are filled
with ZERO bits.
Table D.5 - Mapping from UTF-8 to UCS-4
Sequence of
octets in UTF-8
Four-octet
sequences in UCS-4
z = 00 .. 7F;
z;
z = C0 .. DF; y;
(z-C0)*26 + (y-80);
(z-E0)*212 + (y-80)*26 + (x-80);
(z-F0)*218 + (y-80)*212 +(x-80)*26 + (w-80);
(z-F8)*224 + (y-80)*218 +(x-80)*212 + (w-80)*26 + (v - 80);
(z-FC)*230 + (y-80)*224 +(x-80)*218 + (w-80)*212 + (v-80)*26 + (u-80);
z = E0 .. EF; y; x;
z = F0 .. F7; y; x; w;
z = F8 ..FB; y; x; w; v;
z = FC, FD; y; x; w; v; u;
Meine Anmerkung dazu:
Achtung! Die "80" ist ein Hexadezimaler Wert, = dezimal 128! Dagegen die Exponenten sind es
nicht!
194
B.2 Zwei fertige Makros für die Umwandlung von Internet-Adressen mit
UTF8 in normalen Text
Option Explicit
' Für MsgBox mit Unicodezeichen:
Private Declare Function MessageBoxW Lib "user32.dll" _
(ByVal hwnd As Long, _
ByVal lpText As Long, _
ByVal lpCaption As Long, _
ByVal uType As Long) As Long
Sub UTF8_im_Text_decodieren()
' H. Chris Gast, 10. Juni 2015, 2. + 24. + 27. Juli 2015, 12. + 26. + 27. August 2015.
' UTF8 in Internet-Dateinamen decodieren (erkennbar an den Prozentzeichen).
' Vierbyte-Code (beginnend mit "F") wird von dem Makro wegen der Seltenheit (noch) nicht erfasst.
' Es darf nur das jeweilige codierte Zeichen ersetzt werden, nicht Nachbarzeichen,
' die Windows-Sonderzeichen sein können.
'
' Es wird auch der Text geändert, dekodierte Zeichen werden unterstrichen.
' ***************************
Dim Rng1 As Range
Dim strCode As String
Dim strErsatz As String
Dim strText As String
Dim i As Integer: i = 0
Dim k As Integer: k = 0
Dim strInternetadresse As String
Dim strAusgangstext As String
Dim strMisserfolg As String: strMisserfolg = ""
Dim Rng2 As Range
Dim strEinschränkungstext
' **********************************************
'' Selection.HomeKey Unit:=wdStory
' Ganze Internetadresse markieren (Ganze Wörter erfassen):
' Den Beginn der Internet-Adresse erfassen (anhand Leerzeichen oder Umbrüche usw.):
Selection.MoveStartUntil Cset:=" ,?;[]" & ChrW(1) & ChrW(31) & ChrW(30) & ChrW(12) _
& ChrW(7) & ChrW(31) & ChrW(13) & ChrW(160), Count:=wdBackward
' Das Ende der Internet-Adresse (anhand Leerzeichen oder Umbrüche usw.):
Selection.MoveEndUntil Cset:=" ,?;[]" & ChrW(1) & ChrW(31) & ChrW(30) & ChrW(12) _
& ChrW(7) & ChrW(31) & ChrW(13) & ChrW(160), Count:=wdForward
' ***
Set Rng1 = Selection.Range
Rng1.SetRange Start:=Rng1.Start, End:=Rng1.End + 1
strAusgangstext = Selection.Text
' *************
Selection.Range.Fields.Unlink
' **********************************************
' Schleife, um alle UTF-8-Zeichen in der Markierung (Rng1) zu erfassen:
' Zieladresse der Schleife:
Zeile_Schleife_Weitermachen:
' **************************
' Prozentzeichen suchen:
Selection.Find.ClearFormatting
With Selection.Find
.Text = "%"
.Replacement.Text = ""
195
.Forward = True
' .Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
If Selection.Find.Found = False Then GoTo Zeile_Ergebnis
' geht so oft nicht, sucht endlos weiter, deshalb auch mit "Rng1" abfragen:
If Selection.Range.End > Rng1.End Then
Rng1.Select
''Exit Sub
GoTo Zeile_Ergebnis
Else
Set Rng2 = Selection.Range
End If
' ************************
' Das Zeichen hinter dem ersten gefundenen "Prozent" markieren:
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
' ***************
' 1. Buchstabe nach dem Prozentzeichen untersuchen:
If UCase(Selection.Text) = "C" Or UCase(Selection.Text) = "D" Then
' Zwei-Byte-Code:
Selection.MoveRight Unit:=wdCharacter, Count:=4, Extend:=wdExtend
Rng2.SetRange Start:=Rng2.Start, End:=Selection.End
strCode = Replace(Selection, "%", "")
strErsatz = ChrW(Fkt_zweiByte_Sequenz(strCode))
'strUTF_decodiert = Replace(strUTF_decodiert, "%" & Selection.Text, strErsatz)
Rng2.Text = strErsatz
Rng2.Font.Underline = True
i=i+1
ElseIf UCase(Selection.Text) = "E" Then
' Drei-Byte-Code:
Selection.MoveRight Unit:=wdCharacter, Count:=7, Extend:=wdExtend
Rng2.SetRange Start:=Rng2.Start, End:=Selection.End
strCode = Replace(Selection, "%", "")
strErsatz = ChrW(Fkt_dreiByte_Sequenz(strCode))
' strUTF_decodiert = Replace(strUTF_decodiert, "%" & Selection.Text, strErsatz)
Rng2.Text = strErsatz
Rng2.Font.Underline = True
i=i+1
ElseIf UCase(Selection.Text) = "F" Then
' Vier-Byte-Code oder unzulässig:
Selection.MoveRight Unit:=wdCharacter, Count:=10, Extend:=wdExtend
Rng2.SetRange Start:=Rng2.Start, End:=Selection.End
strCode = Replace(Selection, "%", "")
strErsatz = ChrXXL(Fkt_vierByte_Sequenz(strCode))
If strErsatz = "" Then
MsgBox "unzulässiger UTF8-Code!", vbInformation
' kein UTF8-Code:
k=k+1
Selection.Collapse Direction:=wdCollapseEnd
Else
strInternetadresse = Replace(strInternetadresse, "%" & Selection.Text, strErsatz)
Rng2.Text = strErsatz
Rng2.Font.Underline = True
i=i+1
End If
196
'''''''''''''''''''''''''
Else
' einfaches ASCII-Zeichen oder kein UTF8:
If UCase(Selection.Text) Like "[0-9,A-B]" Then
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Rng2.SetRange Start:=Rng2.Start, End:=Selection.End
'' MsgBox "1-Byte-Sequenz"
strErsatz = ChrW(Val("&H" & Selection.Text & "&"))
''MsgBox "Der UTF-8-Code '" & Selection.Text & "' bedeutet '" _
& ChrW(Val("&H" & Selection.Text & "&")) & "'."
'strUTF_decodiert = Replace(strUTF_decodiert, "%" & Selection.Text, strErsatz)
Rng2.Text = strErsatz
Rng2.Font.Underline = True
i=i+1
Else
' kein UTF8-Code:
k=k+1
'' GoTo Zeile_Ergebnis
End If
End If
'' MsgBox "Der UTF-Code ist: " & Replace(Selection, "%", " ")
' **************************
' Schleife nach oben:
Selection.Collapse Direction:=wdCollapseEnd
GoTo Zeile_Schleife_Weitermachen
' **********************************************
Zeile_Ergebnis:
strInternetadresse = Selection.Text 'Rng1.Text
' ******
strEinschränkungstext = ""
If k > 1 Then
strMisserfolg = vbCrLf & vbCrLf & _
"Der markierte Text enthält mindestens " & k & " Prozentzeichen, die keine UTF-8-Codes sind."
strEinschränkungstext = "(soweit decodierbar)"
ElseIf k = 1 Then
strMisserfolg = vbCrLf & vbCrLf & _
"Der markierte Text enthält mindestens ein Prozentzeichen, das kein UTF-8-Code ist."
strEinschränkungstext = "(soweit decodierbar)"
End If
If i > 0 Then
strText = "Der markierte Text: " & vbCrLf & strAusgangstext & vbCrLf & vbCrLf & " enthält " & i _
& " UTF8-Codes und bedeutet " & strEinschränkungstext & ": " & vbCrLf _
& strInternetadresse & strMisserfolg
i = MessageBoxW(0, StrPtr(strText), StrPtr("UTF8-Decodierung"), 0)
Else
MsgBox "Der markierte Text: " & vbCrLf & strAusgangstext & vbCrLf _
& " enthält keine decodierbaren UTF8-Codes." & strMisserfolg
Exit Sub
End If
End Sub
Sub UTF8_Decodierung_nur_als_MsgBox_ausgeben()
''Sub UTF8_decodieren()
' H. Chris Gast, 10.6.2015, 2. Juli 2015, 24. Juli 2015, 27. Juli 2015.
' UTF8 in Internet-Dateinamen decodieren (erkennbar an den Prozentzeichen):
Dim Rng1 As Range
Dim strCode As String
Dim strInternetadresse As String
Dim strAusgangstext As String
Dim strFundstelle As String
Dim strErsatz As String
197
Dim strText As String
Dim i As Integer: i = 0
Dim k As Integer: k = 0
Dim strMisserfolg As String: strMisserfolg = ""
' **********************************************
' Ganze Internetadresse markieren (Ganze Wörter erfassen):
' Den Beginn der Internet-Adresse erfassen (anhand Leerzeichen oder Umbrüche usw.):
Selection.MoveStartUntil Cset:=" ,?;[]" & ChrW(1) & ChrW(31) & ChrW(30) & ChrW(12) _
& ChrW(7) & ChrW(31) & ChrW(13) & ChrW(160), Count:=wdBackward
' Das Ende der Internet-Adresse (anhand Leerzeichen oder Umbrüche usw.):
Selection.MoveEndUntil Cset:=" ,?;[]" & ChrW(1) & ChrW(31) & ChrW(30) & ChrW(12) _
& ChrW(7) & ChrW(31) & ChrW(13) & ChrW(160), Count:=wdForward
Set Rng1 = Selection.Range
strAusgangstext = Selection.Text
strInternetadresse = Selection.Text
' **********************************************
' Schleife, um alle UTF-8-Zeichen in der Markierung (Rng1) zu erfassen:
' Zieladresse der Schleife:
Zeile_Schleife_Weitermachen:
' **************************
' Prozentzeichen suchen:
Selection.Find.ClearFormatting
With Selection.Find
.Text = "%"
.Replacement.Text = ""
.Forward = True
' .Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
If Selection.Find.Found = False Then GoTo Zeile_Ergebnis
' geht so oft nicht, sucht endlos weiter, deshalb auch mit "Rng1" abfragen:
If Selection.Range.End > Rng1.End Then
Rng1.Select
''Exit Sub
GoTo Zeile_Ergebnis
Else
i=i+1
' weitermachen
End If
' ************************
' Das Zeichen hinter dem ersten gefundenen "Prozent" markieren:
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
' ***************
' 1. Buchstabe nach dem 1. Prozentzeichen untersuchen:
If UCase(Selection.Text) = "C" Or UCase(Selection.Text) = "D" Then
' Zwei-Byte-Code:
Selection.MoveRight Unit:=wdCharacter, Count:=4, Extend:=wdExtend
strCode = Replace(Selection, "%", "")
strErsatz = ChrW(Fkt_zweiByte_Sequenz(strCode))
strInternetadresse = Replace(strInternetadresse, "%" & Selection.Text, strErsatz)
''MsgBox StrInternetadresse
ElseIf UCase(Selection.Text) = "E" Then
' Drei-Byte-Code:
Selection.MoveRight Unit:=wdCharacter, Count:=7, Extend:=wdExtend
strCode = Replace(Selection, "%", "")
198
strErsatz = ChrW(Fkt_dreiByte_Sequenz(strCode))
strInternetadresse = Replace(strInternetadresse, "%" & Selection.Text, strErsatz)
''MsgBox StrInternetadresse
ElseIf UCase(Selection.Text) = "F" Then
' Vier-Byte-Code oder unzulässig:
Selection.MoveRight Unit:=wdCharacter, Count:=10, Extend:=wdExtend
strCode = Replace(Selection, "%", "")
strErsatz = ChrXXL(Fkt_vierByte_Sequenz(strCode))
If strErsatz = "" Then
''MsgBox "unzulässiger UTF8-Code!", vbInformation
' kein UTF8-Code:
k=k+1
Selection.Collapse Direction:=wdCollapseEnd
Else
i=i+1
strInternetadresse = Replace(strInternetadresse, "%" & Selection.Text, strErsatz)
End If
''Exit Sub
''GoTo Zeile_Ergebnis
Else
' einfaches ASCII-Zeichen:
If UCase(Selection.Text) Like "[0-9,A-B]" Then
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
'' MsgBox "1-Byte-Sequenz"
strErsatz = ChrW(Val("&H" & Selection.Text & "&"))
''MsgBox "Der UTF-8-Code '" & Selection.Text & "' bedeutet '" _
& ChrW(Val("&H" & Selection.Text & "&")) & "'."
strInternetadresse = Replace(strInternetadresse, "%" & Selection.Text, strErsatz)
i=i+1
Else
' kein UTF8-Code:
k=k+1
'' GoTo Zeile_Ergebnis
End If
End If
' **************************
' Schleife nach oben:
Selection.Collapse Direction:=wdCollapseEnd
GoTo Zeile_Schleife_Weitermachen
' **********************************************
Zeile_Ergebnis:
If k > 1 Then
strMisserfolg = vbCrLf & vbCrLf & _
"Der markierte Text enthält mindestens " & k & " Prozentzeichen, die keine UTF-8-Codes sind."
ElseIf k = 1 Then
strMisserfolg = vbCrLf & vbCrLf & _
"Der markierte Text enthält mindestens ein Prozentzeichen, das kein UTF-8-Code ist."
End If
If i > 0 Then
strText = "Der markierte Text: " & vbCrLf & strAusgangstext & vbCrLf & vbCrLf & " enthält " & i _
& " UTF8-Codes und bedeutet (soweit decodierbar): " & vbCrLf _
& strInternetadresse & strMisserfolg
i = MessageBoxW(0, StrPtr(strText), StrPtr("UTF8-Decodierung"), 0)
Else
MsgBox "Der markierte Text: " & vbCrLf & strAusgangstext & vbCrLf _
& " enthält keine decodierbaren sUTF8-Codes." & strMisserfolg
Exit Sub
End If
End Sub
' ---------------------------------------------------------------------------------------------------------
199
Private Function Fkt_zweiByte_Sequenz(strCode As String) As Integer
' H. Chris Gast, Stand 2. Juli 2015.
Dim Z As String
Dim Y As String
Dim x As String
Dim strUCS As String
Dim IntUCS As Long
Z = UCase(Left(strCode, 2))
Y = UCase(Mid(strCode, 3, 2))
Dim i
Dim strText
Dim strÜberschrift
strÜberschrift = ""
' *****************
' Rechenformel nach ISO/IEC 10646:2003, Anhang D (nicht mehr in neueren Ausgaben!)
IntUCS = (Val("&H" & Z & "&") - 192) * 64 + (Val("&H" & Y & "&") - 128)
strText = "Der UTF-8-Code '" & Selection.Text & "' bedeutet '" _
& ChrW(IntUCS) & "'."
''i = MessageBoxW(0, StrPtr(strText), StrPtr(strÜberschrift), 0)
Fkt_zweiByte_Sequenz = IntUCS
End Function
' ---------------------------------------------------------------------------------------------------------
Private Function Fkt_dreiByte_Sequenz(strCode As String) As Integer
' H. Chris Gast, Stand 2. Juli 2015.
Dim Z As String
Dim Y As String
Dim x As String
Dim strUCS As String
Dim IntUCS As Long
Z = UCase(Left(strCode, 2))
Y = UCase(Mid(strCode, 3, 2))
x = Mid(strCode, 5, 2)
Dim i
Dim strText
Dim strÜberschrift
strÜberschrift = ""
' *****************
' Rechenformel nach ISO/IEC 10646:2003, Anhang D (nicht mehr in neueren Ausgaben!)
'' z = E0 .. EF; y; x; (z-E0)*2hoch12 + (y-80)*2hoch6 + (x-80);
IntUCS = (Val("&H" & Z & "&") - 224) * 4096 + (Val("&H" & Y & "&") - 128) * 64 _
+ (Val("&H" & x & "&") - 128)
strText = "Der UTF-8-Code '" & Selection.Text & "' bedeutet '" _
& ChrW(IntUCS) & "'."
''i = MessageBoxW(0, StrPtr(strText), StrPtr(strÜberschrift), 0)
Fkt_dreiByte_Sequenz = IntUCS
End Function
' ---------------------------------------------------------------------------------------------------------
Private Function Fkt_vierByte_Sequenz(strCode As String) As Long
' H. Chris Gast, 26. August 2015.
Dim Z As String
Dim Y As String
Dim x As String
Dim w As String
Dim strUCS As String
Dim IntUCS As Long
Z = UCase(Left(strCode, 2))
Y = UCase(Mid(strCode, 3, 2))
x = UCase(Mid(strCode, 5, 2))
200
w = UCase(Mid(strCode, 7, 2))
Dim i
Dim strText
Dim strÜberschrift
strÜberschrift = ""
' *****************
' Rechenformel nach ISO/IEC 10646:2003, Anhang D (nicht mehr in neueren Ausgaben!)
'' z = F0 .. F7; y; x; w; (z-F0)*2 hoch 18 + (y-80)*2 hoch 12 +(x-80)*2 hoch 6 + (w-80);
'' nur bis "F4" gültig!
''''''''''''''''''''''''''''
If Val("&H" & Z & "&") > 244 Then
''MsgBox "unzulässiger UTF8-Code!", vbInformation
Fkt_vierByte_Sequenz = 0
Exit Function
End If
'' MsgBox "4-Byte-Sequenz.", vbInformation
IntUCS = (Val("&H" & Z & "&") - 240) * 262144 + (Val("&H" & Y & "&") - 128) * 4096 _
+ (Val("&H" & x & "&") - 128) * 64 + (Val("&H" & w & "&") - 128)
' *****************
Fkt_vierByte_Sequenz = IntUCS
' ******************
' Nur für Testzwecke!
'' strText = "Der UTF-8-Code '" & Selection.Text & "' bedeutet '" _
& ChrXXL(IntUCS) & "'."
'' i = MessageBoxW(0, StrPtr(strText), StrPtr(strÜberschrift), 0)
'' MsgBox IntUCS
End Function
' ---------------------------------------------------------------------------------------------------------
Private Function ChrXXL(Code2) As String
' Dipl.-Ing Hanna-Chris Gast, 2011.
' Unterfunktion für Zeichen höherer Ebenen, passend für Word 2000 und höher
' Berechnung nach nach ISO/IEC 10646:2003, Anhang C:
Dim Surrogat1
Dim Surrogat2
If Code2 = 0 Then
ChrXXL = ""
Exit Function
End If
Surrogat1 = Hex(Int((Code2 - 65536) / 1024) + 55296)
Surrogat2 = Hex((Code2 - 65536) - (Int((Code2 - 65536) / 1024) * 1024) + 56320)
ChrXXL = ChrW("&H" & Surrogat1) & ChrW("&H" & Surrogat2)
End Function
' ---------------------------------------------------------------------------------------------------------
201
Anhang C
Abstract in English
"Extension of Word 2000 for the implementation and analysis of Unicode characters
in Higher Planes like Hieroglyphs and other archaic characters;
Macro for Word 2000 to Word 2010 for Analysing all kind of characters
in a Word text with showing off the English character names
according to ISO/IEC 10646".
This book offers macros for the extension of Word 2000 to make it able to handle Unicodes of
) and other archaic characters.
higher Unicode-planes like Hieroglyphs (e. g.
Chapter 6 contains a Macro for Analysing characters in all versions of Word (Word 2000 to
Word 2010) which analyses up to 120 characters in a Word-document with only one key
combination (AltGr + C). It gives out the Unicode numbers (code point) of the marked
characters and can also display their English names according ISO/IEC 10646.
For example: When marking with the cursor for example "Unicode.org" and starting the
macro (I have assigned to the macro the key-combination "Control + Alt + C"), I will get the
codes (see Fig. C.1, left hand side). In most cases this result is enough. When pressing "Ja"
('yes'), the macro looks up the English names of the characters in the Internet on the webpage
of Unicode.org (see Fig. C.1, right hand side):
Fig. C.1 Screenshot of the analysis
202
This also works for unknown characters like: "  ☎", and also when some letters cannot
be presented correctly d lack of fonts in the computer, which hasn't the font "Cardo" (see
Fig. C.2). The macro gives the also the meanings of Symbol and Wingding characters.
Perhaps here I should press " Ja " to get the name of all characters in the marked sample .
Fig. C.2: Screenshots for the analysis of unknown characters
The analysing macro recognises characters with diacritical marks (see Fig. C.3). The
advantage in comparison to Word (even Word 2010) is that the macro always analyses the
character and the combining accent together. There is no more danger of analysing only one
part of the combined letter.
Fig. C.3: Screenshot of the analysis of a small letter Alpha with acute
203
Fig. C.4 shows the analysis of two Hieroglyphs as an example of a higher Unicode-plane:
Fig. C.4: Two Hieroglyphs as a sample for a higher Unicode plane
The macro can also handle combination from left to right like Latin characters and from right
to left like Arabic and Hebrew characters (see Fig. C.5):
Fig. C.5: A Hebrew letter with Latin letters in the same line
204
Last not lease the analysing macro also recognizes special marks (signs) like NoBreakSpace,
NoBreakHyphen, Soft Hyphen, Tabulator, Paragraph, etc. even when they are only Control
characters in Word, see Fig. C.6 ( - - - ).
Fig. C.6: Special marks
The limitation of my analyzing macro for Word is that it cannot give you the names of
Chinese, Japanese or Korean syllable-characters.
If you cannot recognize a character in a website or in a pdf-document, just copy it into a
word-file and analyse it with this macro. The macro also works well, if you only see "blank
boxes" like "" or "�"or maybe other "blank place-holders" like "�" on the screen.
This booklet can be downloaded:
Hanna-Chris Gast: "Word-Makros für Unicode, Analyse von Schrift- und Sonderzeichen,
Ersatz von Symbol- und Wingdingszeichen durch Unicode, sowie ein verbessertes InhaltEinfügen"; Berlin 2015;
http://www.siebener-kurier.de/chris-aufsaetze/Unicode_Word-Makros.pdf;
The macro for analysing characters can be downloaded (among the other macros of this booklet) in
a ready-to-use-word-template (within a Zip-File):
http://www.siebener-kurier.de/chris-aufsaetze/Unicode-Makros.zip.
The macro for Analysing therein has the shortcut "AltGr + C".
Unfortunately this book is only available in German language.
Further booklets with macros for word see also http://www.siebener-kurier.de/chris-aufsaetze
Hanna-Chris Gast
205
Literaturhinweise
ISO/IEC 8859-1:1998, Information technology - 8-bit single-byte coded graphic character sets - Part
1: Latin alphabet No. 1.
ISO/IEC 8859-7:2003, Information technology - 8-bit single-byte coded graphic character sets - Part
7: Latin/Greek alphabet.
ISO/IEC 8859-15:1999, Information technology - 8-bit single-byte coded graphic character sets Part 15: Latin alphabet No. 9.
ISO/IEC 10 646, Information technology - Universal Coded Character Set (UCS);
http://standards.iso.org/ittf/PubliclyAvailableStandards/index.html;
In diesem Aufsatz habe ich die veraltete Ausgabe von 2003 verwendet:
ISO/IEC 10 646:2003, Information technology - Universal Multiple-Octet Coded Character Set
(UCS); veraltet, aber für französische Namen noch von Interesse
sowie für die Umrechnung von Codes.
[1] Unicode-Consortium, (die Schriftzeichen nach ISO/IEC 10646).
The Unicode Consortium, P.O. Box 391476, Mountain View, CA 94039-1476, U.S.A.,
http://www.unicode.org/charts/, und http://www.unicode.org/Public/UNIDATA
(Stand: Version Unicode 6.0, Stand 21. Oktober 2010) oder
http://www.unicode.org/Public/UNIDATA/UnicodeData.txt (Stand: 17. Aug. 2010);
Französische Bezeichnungen für Unicodes, soweit vorhanden, siehe
http://www.unicode.org/fr/charts, (Stand: 28. Juni 2007).
[2] Hanna-Chris Gast: Fertige Dokumentvorlage zum Download mit Makros für die Analyse von
Unicode- und Sonderzeichen, für die Konvertierung von Symbol und Wingdings in Unicode und
für das verbesserte "Inhalt-Einfügen"; Stand 2015;
http://www.siebener-kurier.de/chris-aufsaetze/Unicode-Makros.zip.
[3] Hanna-Chris Gast: "Kyrillische Schrift für den Computer - Benennung der Buchstaben,
Vergleich der Transkriptionen in Bibliotheken und Standesämtern, Auflistung der Unicodes
sowie Tastaturbelegung für Windows XP";
Shaker Verlag, Aachen 2010; Im Internet als Download unter
http://www.siebener-kurier.de/chris-aufsaetze/Kyrillische_Schrift_Computer.pdf
[4] Hanna-Chris Gast: "Griechische Schrift für den Computer - Auflistung sämtlicher
griechischen Zeichen mit Unicode, Tastenbelegung für Windows, Vergleich der Transkriptionen
in Bibliotheken und Standesämtern", 2. erweiterte Auflage (mit geändertem Titel), Selbstverlag,
Berlin 2011; ISBN 978-3-00-036684-0
Im Internet unter: http://www.siebener-kurier.de/chris-aufsaetze
[5] Hanna-Chris Gast: "Schrift- und Sonderzeichen in Word", Broschüre im Selbstverlag,
Stand 2015; im Internet als Download unter:
http://www.siebener-kurier.de/chris-aufsaetze/Word-Schriftzeichen.pdf..
[6] Hanna-Chris Gast: "Einige Makros für Word (und deren Installation)"; Stand 2016;
Download: http://www.siebener-kurier.de/chris-aufsaetze/Word-Makros.doc
[7] Hanna-Chris Gast: "Formblatt mit Makros zur Übertragung von Tastenkürzel und
AutoKorrekturen für Word"; Berlin 2011, Stand 2015; Als Download:
http://www.siebener-kurier.de/chris-aufsaetze/Formblatt-Tastenkuerzel+Autokorrekturen_uebertragen.doc.
[8] Wikipedia, Wikimedia Foundation Inc., P.O. Box 78350, San Francisco, CA 94107-8350, USA;
- Wikimedia Deutschland, Gesellschaft zur Förderung Freien Wissens e. V., Postfach 30 32 43,
10729 Berlin; Download zuletzt 12. März 2010:
https://en.wikipedia.org ,
https://de.wikipedia.org ,
https://fr.wikipedia.org
[9] FileFormat.Info, Andrew Marcuse, 317 Buck Lane, Suite 853, Haverford, Pennsylvania 19041,
USA, http://www.fileformat.info (10. April 2010),
206
[10] "Symbola", Unicode Fonts for Ancient Scripts", http://users.teilar.gr/~g1951d, "fonts designed
by George Douros" 2009, TEI, Technological Educational Institution of Larissa (Λάρισα),
Download zuletzt 26. September 2014 (Symbola, version 7.17, Juli 2014).
[11] RomanCyrillic_Std.ttf, Prof. Dr. Sebastian Kempgen, Universität Bamberg,
Slavische Sprachwissenschaft, An der Universität 5, 96047 Bamberg, http://kodeks.unibamberg.de/AKSL/Schrift/RomanCyrillicStd.htm,
Abruf zuletzt 27. August 2015.
[12] Code2001.ttf, James Kass; 2807 Erskine Creek Road Space 93; Lake Isabella, California 93240,
U.S.A.; http://www.fontspace.com/james-kass/code2001.. Abruf zuletzt 27. August 2015.
[13] Gardiner.otf, in: "Unicode Fonts for Ancient Scripts", http://users.teilar.gr/~g1951d, "fonts
designed by George Douros" 2009, TEI, Technological Educational Institution of Larissa
(Λάρισα), (8. Mai 2010).
[14] Cardo.ttf, David J. Perry, Fonts for Scholars, Rye High School, Rye, New York USA,
Version April 2011.
Anmerkung: Brauchbare kostenlose Schrift für Griechische Schriftzeichen.
[15] UTF-8-Codetabelle mit Unicode-Zeichen, Tomas Schild, Lange Furche 31, 72072 Tübingen,
http://www.utf8-zeichentabelle.de (25. April 2010).
[16] Internet Society (ISOC) sowie deren Untergruppe Internet Engineering Task Force (IETF),
welche die betreffenden Codier-Regeln festgelegt, https://www.ietf.org:
RFC 3491 (Nameprep, siehe https://tools.ietf.org/html/rfc3491);
RFC 3492 (Punycode, siehe https://tools.ietf.org/html/rfc3492 ).
RFC 3629 (UTF-8), siehe http://tools.ietf.org/html/rfc3629; Download 7. bis 21. Februar 2010.
[17] EURid, The European Registry of Internet Domain Names (europäisches Register für
Internetdomänennamen), http://www.eurid.eu/de, Download 7. Februar 2010.
[18] Philipp Stephani, "Unicode", in AktiveVB, Kraichgaustraße 2, 76698 Ubstadt-Weiher;
http://www.activevb.de/rubriken/kolumne/kol_20/unicode.html (26. Juni 2010).
[19] FORTH (Foundation for Research and Technology - Hellas), Institute of Computer Science
(ICS), N. Plastira 100, Vassilika Vouton, GR-700 13 Heraklion, Crete, GRIECHENLAND,
https://grweb.ics.forth.gr, (Abruf zuletzt 9. Okt. 2011).
[20] Adobe-Liste: http://unicode.org/Public/MAPPINGS/VENDORS/ADOBE/symbol.txt, Stand: 30.
März 1999; Download 29. März 2010.
[21] Apple-Tabelle: http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/SYMBOL.TXT;
Stand: 5. April 2005, Abruf zuletzt 6. Februar 2011.
[22] Alan Wood: "Wingdings character set and equivalent Unicode characters",
Stand 26. Januar 2011, http://www.alanwood.net/demos/wingdings.html,
sowie "Wingdings 2 character set and equivalent Unicode characters", Stand 14. Jan. 2010,
http://www.alanwood.net/demos/wingdings-2.html;
Anmerkung: Alan Wood bietet auch Unicode-Entsprechungen für einige Wingdings 2Zeichen an (Stand 9/2014).
[23] Unicode-Erklärung zum Phi-Symbol, Unicode Technical Report #25, UNICODE SUPPORT
FOR MATHEMATICS, Revision 11:2001-2008,
http://unicode.org/reports/tr25/#_Toc231, Abruf 2. Januar 2011.
[24] Microsoft, http://www.microsoft.com/typography/fonts/family.aspx?FID=32 (8/2014).
[25] Windows-Zeichentabelle, C:\WINDOWS\system32\charmap.exe.
207
Vorgänger-Versionen dieses Aufsatzes
[26] (veraltet) Hanna-Chris Gast: "Erweiterung von Word 2000 zur Erzeugung von Schriftzeichen
höherer Unicode-Ebenen sowie Erstellung eines Makros für Word 2000 bis Word 2010 zur
Analyse von Schrift- und Sonderzeichen mit Ausgabe des Schriftzeichen-Namens nach
ISO/IEC 10646"; Gedruckt als Beilage zum Siebener-Kurier Nr. 60 (August 2010); ISSN 09486089; Erweiterte Auflage als Sonderdruck des Siebener-Kuriers, Juni 2011; Stand April 2015;
http://www.siebener-kurier.de/chris-aufsaetze/Word-Erweiterung-Unicode-Makros.pdf;
Das Analysemakro aus diesem Aufsatz ist in einer fertigen Dokumentvorlage downloadbar,
siehe [2].
[27] (veraltet) Hanna-Chris Gast: "Word-Makro zur Umcodierung von Symbol- und
Wingdingszeichen in Unicode Zeichen";
Gedruckt als Beilage zum Siebener-Kurier Nr. 61 (August 2011), ISSN 0948-6089
Neue veränderte Ausgabe 2014 unter Berücksichtigung von Cambria; (veraltet)
http://www.siebener-kurier.de/chris-aufsaetze/Symbol+Wingdings-in-Unicode.pdf;
Die Makros aus diesem Aufsatz sind in einer fertigen Dokumentvorlage downloadbar, siehe [2]
Impressum
© Dipl.-Ing. Hanna-Chris Gast
Bergstr.1
14109 Berlin
http://www.siebener-kurier.de/chris-aufsaetze
E-Mail: hcgast "ät" siebener-kurier.de
(dabei "ät" durch "@" ersetzen).
Abdruck und Zitate nur mit Quellenangabe!
Gast, Hanna-Chris: "Word-Makros für Unicode, Analyse von Schrift- und Sonderzeichen,
Ersatz von Symbol- und Wingdingszeichen durch Unicode sowie ein verbessertes InhaltEinfügen"; Selbstverlag, Teilweise seit 2010 veröffentlicht; Neu-Auflage, Berlin 2015.
Im Internet als Download unter:
http://www.siebener-kurier.de/chris-aufsaetze/Unicode_Word-Makros.pdf.
Die Makros aus diesem Aufsatz sind weitgehend in einer fertigen
Dokumentvorlage downloadbar unter:
http://www.siebener-kurier.de/chris-aufsaetze/Unicode-Makros.zip.
Stand: Freitag, 6. Januar 2017.
208