Formatierungszeichen drucken

  • #1
E

Eggi

Mitglied
Themenersteller
Dabei seit
09.10.2005
Beiträge
13
Reaktionspunkte
0
Liebe Leute!

Kennt ihr eine Möglichkeit die Formatierungszeichen in Word 2000 / 2003 auszudrucken? Mir ist bekannt das sie auch unter dem Begriff nichtdruckbare Zeichen geführt werden. Für Schulungszwecke wäre es mir wichtig eine Lösung des Problems zu bekommen.
 
  • #2
Hallo Eggi,

auf der Symbolleiste->Format' ist das Zeichen Pi, mit dem man die Darstellung der Formatierungszeichen ein-/ausschalten kann.

Eine Möglichkeit wäre, screenshots der einzelnen Seiten des Dokumentes bei eingeschalteter Darstellung von Formatierungszeichen zu machen.

Eine weiter Lösung wäre ein Makro, der die->nicht druckbaren Zeichen im Text umwandelt und dann das ganze ausdruckt. Den müßte ich aber erst zusammenstellen. Bei dem Makro besteht auch die Gefahr, dass durch das Einfügen nicht druckbarer Zeichen als Text, der Gesamttext leicht verschoben wird und damit sich das Layout verändert.

Reicht dir die erste Lösungsmöglichkeit nicht aus, nenne mal die Zeichen, die mit auf dem Ausdruck dargestellt werden sollen.

Gruß Matjes :)
 
  • #3
Hallo Matjes!

Danke für deine Antwort!

Im Prinzip würde mir der Screenshot reichen. Leider hat der den Nachteil, das der beim späteren Vergrößerung in A4 - Format nicht sauber aussieht.

Ein Makro scheint mir die beste Lösung. Ich möchte nicht anfangen die Formatierungszeichen aufzuzählen, weil ich die Gefahr sehe, das ich eins vergesse. Aber Tapp, weiche u. harte Zeilenschaltung, Leerzeichen usw. müssten schon sein.

Aber vielleicht gibt es noch andere Lösungen. Wie machen die das eigentlich bei Lehrbüchern?
 
  • #4
Idee:
- alle Leerzeichen durch das ASCII-Zeichen 250 (·) ersetzen
- alle Zeilenumbrüche (Absatzmarken) durch das ASCII-Zeichen 20 (¶) ersetzen
- alle manuellen Zeilenumbrüche durch ein Leerzeichen und das ASCII-Zeichen 168 (¿) ersetzen. Danach das Zeichen 168 in die Schriftart Symbol ändern. Da sieht es dann nicht mehr wie ein umgedrehtes Fragezeichen aus, sondern wie der Pfeil auf der Enter-Taste.
- entsprechend wird mit dem Tabulator verfahren.
- alle anderen Zeichen können entsprechend im Makro ergänzt werden.
Code:
Sub nicht_druckbare_drucken()

Dim Mldg, Stil, Titel, Antwort->Kontrolle, ob richtige Wörd-Version vorliegt
Mldg = Hattu Wörd 2000 oder höher? & Chr(10) & _
 
Stil = vbYesNo + vbCritical + vbDefaultButton2
Titel = Voraussetzungen für dieses Makro
Antwort = MsgBox(Mldg, Stil, Titel)
If Antwort = vbYes Then->ab jetzt wird Ja ausgeführt

 ->gesamtes Dokument markieren
  Selection.WholeStory
  
  
 ->Leerzeichen
  With Selection.Find
    .Text =  
    .Replacement.Text = ·
    .Forward = True
    .Wrap = wdFindAsk
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
  End With
  Selection.Find.Execute Replace:=wdReplaceAll
  
  
 ->Absatzmarke
  Selection.Find.ClearFormatting
  Selection.Find.Replacement.ClearFormatting
  With Selection.Find
    .Text = ^a
    .Replacement.Text = ¶^a
    .Forward = True
    .Wrap = wdFindAsk
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
  End With
  Selection.Find.Execute Replace:=wdReplaceAll
  
  
 ->manueller Zeilenumbruch
  Selection.Find.ClearFormatting
  Selection.Find.Replacement.ClearFormatting
  Selection.Find.Replacement.Font.Name = Symbol
  With Selection.Find
    .Text = ^z
    .Replacement.Text =  ¿^z
    .Forward = True
    .Wrap = wdFindAsk
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
  End With
  Selection.Find.Execute Replace:=wdReplaceAll
  
 ->manuellen Zeilenumbruch in Schriftart Symbol ändern
  Selection.Find.ClearFormatting
  Selection.Find.Replacement.ClearFormatting
  Selection.Find.Replacement.Font.Name = Symbol
  With Selection.Find
    .Text = ¿
    .Replacement.Text = ¿
    .Forward = True
    .Wrap = wdFindAsk
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
  End With
  Selection.Find.Execute Replace:=wdReplaceAll


 ->Tabulator
  Selection.Find.ClearFormatting
  Selection.Find.Replacement.ClearFormatting
  Selection.Find.Replacement.Font.Name = Symbol
  With Selection.Find
    .Text = ^t
    .Replacement.Text =  ® 
    .Forward = True
    .Wrap = wdFindAsk
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
  End With
  Selection.Find.Execute Replace:=wdReplaceAll
  
 ->Tabulator in Schriftart Symbol ändern
  Selection.Find.ClearFormatting
  Selection.Find.Replacement.ClearFormatting
  Selection.Find.Replacement.Font.Name = Symbol
  With Selection.Find
    .Text = ®
    .Replacement.Text = ®
    .Forward = True
    .Wrap = wdFindAsk
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
  End With
  Selection.Find.Execute Replace:=wdReplaceAll

  Selection.HomeKey Unit:=wdStory
  
 Else
 ->Jetzt wird Nein ausgeführt
  GoTo Pechgehabt
  End If
Pechgehabt:
  MsgBox Dann hattu Pech gehabt. & Chr(10) & _
    & Chr(10) & _
  Dieses Makro geht nur bis Wörd 97 & Chr(10) & _
   
End Sub
Nachteile:
- Tabulatoren verrutschen, da sie jetzt eine feste Breite haben und sich nicht an der Tabulatorenanordnung in der Formatvorlage anlehnen.
- nach jedem Ersetz-Vorgang kommt ein Popup, das man mit JA bestätigen muß (im vorliegenden Beispiel 6x)
- man sollte das nicht mit dem Origial-Dokument, sondern mit einer Kopie machen.
Vorteil:
Matjes kann das sicher noch etwas elegantifizieren ;D
 
  • #5
Jo, das geht ja schon voll in die richtige Richtung  :D

Eben diese->Nachteile' beschäftigen mich, wie man sie beseitigt oder soweit als möglich einschränkt.  :-\
Mal schauen ...

Bei Ersetzen von Formatierungszeichen ist darauf zu achten, dass sich ab Word2000 die Bezeichnungen der Formatierungszeichen von deutschen in englisch gewandelt haben, z.B. die Absatzmarke (alt: ^a) wird jetzt mit ^p bezeichnet.

Gruß Matjes :)
 
  • #6
Da hamse mal wieder was in Grund und Boden abwärtsgekompatibelt. :(
Gibt's da->ne Übersetzungstabelle?



Achtung, habe den Makro-Code weiter oben noch um eine Kontrollmeldung modifiziert. Vielleicht kann man das Ding ja für beide Versionen kompatibel machen.
 
  • #7
Liebe Leute!

Über soviel Resonanz auf meine Frage freue ich mich. Das hätte ich wirklich nicht erwartet. Habt vielen Dank für Eure Bemühungen!
 
  • #8
Hallo zusammen,

jetzt eine Zwischen-Version mit Übersetzungstabelle. Schreibt aber noch in das Orginal-Dokument !!!

Gruß Matjes  :)

Code:
Option Explicit
'**********************************************************************
Sub NichtDruckbareFormatierungszeichen_AlsTextEinfuegen()

  Dim s_Absatzmarke As String
  Dim s_ManuellerZeilenwechsel As String
  Dim s_GeschuetzterBindestrich As String
  Dim s_GeschuetztesLeerzeichen As String
  Dim s_Kommentarzeichen As String
  Dim s_Leerzeichen As String
  Dim s_Grafik As String
  Dim r As Range, doc As Document
        
        
 ->versionsspezifische Formatbezeichnung
  Call BezeichnungenFormatierungszeichenFuerVersionFestlegen( _
                                        s_Absatzmarke, _
                                        s_ManuellerZeilenwechsel, _
                                        s_GeschuetzterBindestrich, _
                                        s_GeschuetztesLeerzeichen, _
                                        s_Kommentarzeichen, _
                                        s_Leerzeichen, _
                                        s_Grafik)
        
        
 ->Range gesamtes Dokument
  Set doc = ActiveDocument
  Set r = ActiveDocument.StoryRanges(wdMainTextStory)
    
 ->Absatzmarke
  Call myAlleZeichenErsetzen(r, s_Absatzmarke, _
                          ¶ & s_Absatzmarke, , False)
  
 ->manueller Zeilenumbruch
  Call myAlleZeichenErsetzen(r, s_ManuellerZeilenwechsel, _
                          ¿ & s_ManuellerZeilenwechsel, Symbol, False)
  
 ->manuellen Zeilenumbruch in Schriftart Symbol ändern
  Call myAlleZeichenErsetzen(r, s_ManuellerZeilenwechsel, _
                                s_ManuellerZeilenwechsel, Symbol, False)

' ->Tabulator
'  Call myAlleZeichenErsetzen(r, ^t,   ®  , Symbol, False)
'
' ->Tabulator in Schriftart Symbol ändern
'  Call myAlleZeichenErsetzen(r, ®, ®, Symbol, True)
'
' ->Leerzeichen
'  Call myAlleZeichenErsetzen(r,  , ·, , False)
'
  doc.Range(Start:=1, End:=1).Select
AUFRAEUMEN:
  Set r = Nothing: Set doc = Nothing
End Sub
'**********************************************************************
Private Function myAlleZeichenErsetzen( _
                      r As Range, _
                      s_text As String, _
                      s_RepText As String, _
                      s_RepFontName As String, _
                      b_Format As Boolean)
  
  With r.Find
    .ClearFormatting
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = s_text
    .Replacement.Text = s_RepText
    If s_RepFontName <>  Then .Replacement.Font.Name = s_RepFontName
    .Format = b_Format
    .Forward = True
    .Wrap = wdFindContinue
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    On Error Resume Next
    .Execute Replace:=wdReplaceAll
    On Error GoTo 0
  End With
End Function
'**********************************************************************
Private Function BezeichnungenFormatierungszeichenFuerVersionFestlegen( _
                            s_Absatzmarke As String, _
                            s_ManuellerZeilenwechsel As String, _
                            s_GeschuetzterBindestrich As String, _
                            s_GeschuetztesLeerzeichen As String, _
                            s_Kommentarzeichen As String, _
                            s_Leerzeichen As String, _
                            s_Grafik As String)
    If Val(Application.Version) > 8 Then
     ->ab Word-2000
      s_Absatzmarke = ^p
      s_ManuellerZeilenwechsel = ^l
      s_GeschuetzterBindestrich = ^~
      s_GeschuetztesLeerzeichen = ^s
      s_Kommentarzeichen = ^a
      s_Leerzeichen = ^w
      s_Grafik = ^g
    Else
     ->Word-97
      s_Absatzmarke = ^a
      s_ManuellerZeilenwechsel = ^z
      s_GeschuetzterBindestrich = ^_
      s_GeschuetztesLeerzeichen = ^g
      s_Kommentarzeichen = ^5
      s_Leerzeichen = ^l
      s_Grafik = ^r
    End If
End Function
 
  • #9
So, jetzt eine Version zum ausprobieren  :D

Für die Tabs ist mir noch keine vernünftige Lösung eingefallen  :mad:
Bei Abschnittswechseln ist's auch ein erster Wurf.

Schaut mal was noch stark verbesserungswürdig ist.

Gruß Matjes :)

Code:
Option Explicit

Dim b_Test As Boolean->True=Testbetrieb, False=realer Betrieb

'**********************************************************************
Sub MitFormatierungszeichenDrucken()
  
  Dim doc As Document, s_Dateiname_Full As String, s_Dateiname_Full_tmp As String
  
  Set doc = ActiveDocument
  
  b_Test = False->True=Testbetrieb, False=realer Betrieb
  If b_Test Then doc.Save
  
 ->prüfen, ob Dokument gespeichert ist
  If Not doc.Saved Then
    MsgBox (Bitte speichern sie das Dokument vor dem Aufruf diese Makros.)
  Else
    
   ->Datei unter temporärem Namen speichern
    s_Dateiname_Full = doc.FullName
    s_Dateiname_Full_tmp = _
      Left(s_Dateiname_Full, Len(s_Dateiname_Full) - 4) & _
      _MirNdF & _
      Right(s_Dateiname_Full, 4)
    Application.DisplayAlerts = False
    doc.SaveAs FileName:=s_Dateiname_Full_tmp
    Application.DisplayAlerts = True
    
   ->nicht druckbare Formatierungszeichen als Text einfügen
    Call NichtDruckbareFormatierungszeichen_AlsTextEinfuegen(doc)
    
    
    If Not b_Test Then
     ->tmp. Dokument ausdrucken
      doc.PrintOut
    Else
     ->tmp. Dokument als Seitenansicht
      doc.PrintPreview
      ActiveWindow.ActivePane.View.Zoom.Percentage = 150
      MsgBox (So ok ?)
    End If
   ->tmp Dokumentschliessen und löschen
    doc.Close savechanges:=False
    Kill (s_Dateiname_Full_tmp)
    
   ->ursprüngliches Dokument öffnen
    Documents.Open FileName:=s_Dateiname_Full
  
  End If
  
  Set doc = Nothing
End Sub

'**********************************************************************
Function NichtDruckbareFormatierungszeichen_AlsTextEinfuegen(doc As Document)

  Dim s_Absatzmarke As String
  Dim s_ManuellerZeilenwechsel As String
  Dim s_GeschuetzterBindestrich As String
  Dim s_GeschuetztesLeerzeichen As String
  Dim s_Kommentarzeichen As String
  Dim s_Leerzeichen As String
  Dim s_Grafik As String
  Dim r As Range
        
        
 ->versionsspezifische Formatbezeichnung
  Call BezeichnungenFormatierungszeichenFuerVersionFestlegen( _
                                        s_Absatzmarke, _
                                        s_ManuellerZeilenwechsel, _
                                        s_GeschuetzterBindestrich, _
                                        s_GeschuetztesLeerzeichen, _
                                        s_Kommentarzeichen, _
                                        s_Leerzeichen, _
                                        s_Grafik)
  
 ->Range gesamtes Dokument
  Set r = doc.Content
    
 ->Absatzmarke
  Call myAlleZeichenErsetzen(r, s_Absatzmarke, ¶ & s_Absatzmarke, , 0)
  
 ->manueller Zeilenumbruch
  Call myAlleZeichenErsetzen(r, s_ManuellerZeilenwechsel, _
                         Chr(191) & s_ManuellerZeilenwechsel, Symbol, 0)
  
 ->bedingte Trennzeichen
  Call myAlleZeichenErsetzen(r, ^-, Chr(216), Symbol, 0)
  
 ->geschützte Leerzeichen
  Call myAlleZeichenErsetzen(r, s_GeschuetztesLeerzeichen, Chr(176), Symbol, 0)
 ->Leerzeichen
 ->!!! muß nach geschützte Leerzeichen erfolgen, sonst werden die gelöscht
  Call myAlleZeichenErsetzen(r,  , Chr(215), Symbol, 0)
  
 ->Tabulator
  Call myAlleZeichenErsetzen(r, ^t,   & Chr(174) &  , Symbol, 6)
  
 ->manueller Seitenwechsel
  Call myAlleZeichenErsetzen(r, ^m, _
        String(25, Chr(151)) &  Seitenwechsel  & String(25, Chr(151)) & ^m, , 6)
  
 ->manueller Spaltenwechsel
  Call myAlleZeichenErsetzen(r, ^n, _
        String(10, Chr(151)) &  Spaltenwechsel  & String(10, Chr(151)) & ^n, , 6)
        
 ->Abschnittswechsel
  Call myAlleZeichenErsetzen(r, ^b, _
        String(10, Chr(61)) &  Abschnittswechsel  & String(10, Chr(61)), , 6)
        
  doc.Range(Start:=1, End:=1).Select
AUFRAEUMEN:
  Set r = Nothing
End Function
'**********************************************************************
Private Function myAlleZeichenErsetzen(r As Range, _
                                        s_text As String, s_RepText As String, _
                                        s_RepFontName As String, s_RepFontSize As String)
  
  With r.Find
    .ClearFormatting
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = s_text
    .Replacement.Text = s_RepText
    .format = False
    If s_RepFontName <>  Then .Replacement.Font.Name = s_RepFontName: .format = True
    If s_RepFontSize <> 0 Then .Replacement.Font.Size = Val(s_RepFontSize): .format = True
    .Forward = True
    .Wrap = wdFindContinue
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    On Error Resume Next
    .Execute Replace:=wdReplaceAll
    If b_Test Then MsgBox (bearbeitet:  & s_text)
    On Error GoTo 0
  End With
End Function
'**********************************************************************
Private Function BezeichnungenFormatierungszeichenFuerVersionFestlegen( _
                            s_Absatzmarke As String, _
                            s_ManuellerZeilenwechsel As String, _
                            s_GeschuetzterBindestrich As String, _
                            s_GeschuetztesLeerzeichen As String, _
                            s_Kommentarzeichen As String, _
                            s_Leerzeichen As String, _
                            s_Grafik As String)
    If Val(Application.Version) > 8 Then
     ->ab Word-2000
      s_Absatzmarke = ^p
      s_ManuellerZeilenwechsel = ^l
      s_GeschuetzterBindestrich = ^~
      s_GeschuetztesLeerzeichen = ^s
      s_Kommentarzeichen = ^a
      s_Leerzeichen = ^w
      s_Grafik = ^g
    Else
     ->Word-97
      s_Absatzmarke = ^a
      s_ManuellerZeilenwechsel = ^z
      s_GeschuetzterBindestrich = ^_
      s_GeschuetztesLeerzeichen = ^g
      s_Kommentarzeichen = ^5
      s_Leerzeichen = ^l
      s_Grafik = ^r
    End If
End Function
 
  • #10
Liebe Leute ihr seid spitze!

Ist schon klasse, was bis jetzt rausgekommen ist.
Nach meinem Test, sind mir ein paar Dinge aufgefallen.
1. Beim Ausdruck mit dem Makro kommt es zu veränderter Zeilenbreite, sprich das Makro schreibt mehr in die Zeile, als vorher drin stand. Wahrscheinlich ändert sich der rechte Seitenrand. Dadurch kommt es zu einem haufen getrennter Wörter ohne Bindstrich.
2. Der Tapstop wird angezeigt. Es verändert sich im Ausdruck die Position der Schriftzeichen nach vorn. (Beispiel - halbprivater Brief- erste Zeile - Absender und dann ein Tap zum Datum auf 10,16 cm. Beim Ausdruck ruscht das Datum zum Absender, getrennt durch das Formatierungszeichen.

Wo kann ich von den Formatierungszeichen den ASCII-Code nachlesen?

Seid gegrüßt von eurem größten Fan!
 
  • #11
Hallo Eggi,

jetzt kommt die nächste Version mit dynamischen TAB-Symbolen. :D

Der Makro schaut jetzt nach dem Einfügen eines jeden TAB-Symbols nach, ob sich der nachfolgende Text verschiebt.

Ist das der Fall, wird das TAB-Symbol verkleinert, bis zu einer Minimalgröße.

Verschiebt sich der Text trotz minimalster Symbolgröße, wird das Symbol wieder gelöscht und eben an dieser Stelle keen TAB-Symbol ausgegeben. Das entspricht der Bildschirm-Darstellung mit eingeschalteten Formatierungssymbolen.  ;D

bzgl.->getrennter Wörter ohne Bindstrich':
wäre nett, wenn du mir das Dokument an mein mailaddy schickst. Dann kann ich mir das mal live anschauen.

Gruß Matjes :)
Code:
Option Explicit

Dim b_Test As Boolean->True=Testbetrieb, False=realer Betrieb

'**********************************************************************
Sub MitFormatierungszeichenDrucken()
  
  Dim doc As Document, s_Dateiname_Full As String, s_Dateiname_Full_tmp As String
  
  Set doc = ActiveDocument
  
  b_Test = False->True=Testbetrieb, False=realer Betrieb
  If b_Test Then doc.Save
  
 ->prüfen, ob Dokument gespeichert ist
  If Not doc.Saved Then
    MsgBox (Bitte speichern sie das Dokument vor dem Aufruf diese Makros.)
  Else
    
   ->Datei unter temporärem Namen speichern
    s_Dateiname_Full = doc.FullName
    s_Dateiname_Full_tmp = _
      Left(s_Dateiname_Full, Len(s_Dateiname_Full) - 4) & _
      _MirNdF & _
      Right(s_Dateiname_Full, 4)
    Application.DisplayAlerts = False
    doc.SaveAs FileName:=s_Dateiname_Full_tmp
    Application.DisplayAlerts = True
    
   ->nicht druckbare Formatierungszeichen als Text einfügen
    Call NichtDruckbareFormatierungszeichen_AlsTextEinfuegen(doc)
    
    
    If Not b_Test Then
     ->tmp. Dokument ausdrucken
      doc.PrintOut
    Else
     ->tmp. Dokument als Seitenansicht
      doc.PrintPreview
      ActiveWindow.ActivePane.View.Zoom.Percentage = 150
      MsgBox (So ok ?)
    End If
   ->tmp Dokumentschliessen und löschen
    doc.Close savechanges:=False
    Kill (s_Dateiname_Full_tmp)
    
   ->ursprüngliches Dokument öffnen
    Documents.Open FileName:=s_Dateiname_Full
  
  End If
  
  Set doc = Nothing
End Sub

'**********************************************************************
Function NichtDruckbareFormatierungszeichen_AlsTextEinfuegen(doc As Document)

  Dim s_Absatzmarke As String
  Dim s_ManuellerZeilenwechsel As String
  Dim s_GeschuetzterBindestrich As String
  Dim s_GeschuetztesLeerzeichen As String
  Dim s_Kommentarzeichen As String
  Dim s_Leerzeichen As String
  Dim s_Grafik As String
  Dim r As Range
        
        
 ->versionsspezifische Formatbezeichnung
  Call BezeichnungenFormatierungszeichenFuerVersionFestlegen( _
                                        s_Absatzmarke, _
                                        s_ManuellerZeilenwechsel, _
                                        s_GeschuetzterBindestrich, _
                                        s_GeschuetztesLeerzeichen, _
                                        s_Kommentarzeichen, _
                                        s_Leerzeichen, _
                                        s_Grafik)
  
 ->Range gesamtes Dokument
  Set r = doc.Content
    
 ->Absatzmarke
  Call myAlleZeichenErsetzen(r, s_Absatzmarke, ¶ & s_Absatzmarke, , 0)
  
 ->manueller Zeilenumbruch
  Call myAlleZeichenErsetzen(r, s_ManuellerZeilenwechsel, _
                         Chr(191) & s_ManuellerZeilenwechsel, Symbol, 0)
  
 ->bedingte Trennzeichen
  Call myAlleZeichenErsetzen(r, ^-, Chr(216), Symbol, 0)
  
 ->geschützte Leerzeichen
  Call myAlleZeichenErsetzen(r, s_GeschuetztesLeerzeichen, Chr(176), Symbol, 0)
 ->Leerzeichen
 ->!!! muß nach geschützte Leerzeichen erfolgen, sonst werden diese auch gesetzt
  Call myAlleZeichenErsetzen(r,  , Chr(215), Symbol, 0)
  
 ->Tabulator
  Call myTabZeichenEinfuegen(doc, r)
  
 ->manueller Seitenwechsel
  Call myAlleZeichenErsetzen(r, ^m, _
        String(25, Chr(151)) &  Seitenwechsel  & String(25, Chr(151)) & ^m, , 6)
  
 ->manueller Spaltenwechsel
  Call myAlleZeichenErsetzen(r, ^n, _
        String(10, Chr(151)) &  Spaltenwechsel  & String(10, Chr(151)) & ^n, , 6)
        
 ->Abschnittswechsel
  Call myAlleZeichenErsetzen(r, ^b, _
        String(10, Chr(61)) &  Abschnittswechsel  & String(10, Chr(61)), , 6)
        
  doc.Range(Start:=1, End:=1).Select
AUFRAEUMEN:
  Set r = Nothing
End Function
'**********************************************************************
Private Function myAlleZeichenErsetzen(r As Range, _
                                        s_text As String, s_RepText As String, _
                                        s_RepFontName As String, s_RepFontSize As String)
  
  With r.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = s_text
    .Replacement.Text = s_RepText
    .Format = False
    If s_RepFontName <>  Then .Replacement.Font.Name = s_RepFontName: .Format = True
    If s_RepFontSize <> 0 Then .Replacement.Font.Size = Val(s_RepFontSize): .Format = True
    .Forward = True
    .Wrap = wdFindContinue
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    On Error Resume Next
    .Execute Replace:=wdReplaceAll
    If b_Test Then MsgBox (bearbeitet:  & s_text)
    On Error GoTo 0
  End With
End Function
'**********************************************************************
Private Function BezeichnungenFormatierungszeichenFuerVersionFestlegen( _
                            s_Absatzmarke As String, _
                            s_ManuellerZeilenwechsel As String, _
                            s_GeschuetzterBindestrich As String, _
                            s_GeschuetztesLeerzeichen As String, _
                            s_Kommentarzeichen As String, _
                            s_Leerzeichen As String, _
                            s_Grafik As String)
    If Val(Application.Version) > 8 Then
     ->ab Word-2000
      s_Absatzmarke = ^p
      s_ManuellerZeilenwechsel = ^l
      s_GeschuetzterBindestrich = ^~
      s_GeschuetztesLeerzeichen = ^s
      s_Kommentarzeichen = ^a
      s_Leerzeichen = ^w
      s_Grafik = ^g
    Else
     ->Word-97
      s_Absatzmarke = ^a
      s_ManuellerZeilenwechsel = ^z
      s_GeschuetzterBindestrich = ^_
      s_GeschuetztesLeerzeichen = ^g
      s_Kommentarzeichen = ^5
      s_Leerzeichen = ^l
      s_Grafik = ^r
    End If
End Function
'**********************************************************************
Private Function myTabZeichenEinfuegen(doc As Document, r As Range)
  
  Const c_NORMALFONTGROESSE = 6
  Const c_MINFONTGROESSE = 2
  
  Dim l_start As Long, l_end As Long
  Dim l_Distance As Long, l_Distance2 As Long, x As Long
  
  r.Select
  l_start = Selection.Start
  l_end = Selection.End
  
  Do
    doc.Range(Start:=l_start, End:=l_end).Select
    With Selection.Find
      .ClearFormatting
      .Replacement.ClearFormatting
      .Text = ^t
      .Forward = False
      .Wrap = wdFindStop

      If Not .Execute Then Exit Function
      
    End With
    
   ->neues Ende für nächste Suche setzen
    l_end = Selection.Start
    
   ->Distanz zum linken Seitenrand des nächsten Zeichens nach dem TAB
   ->OHNE eingefügtes TAB-Symbol
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    l_Distance = Selection.Information(wdHorizontalPositionRelativeToPage)
    
   ->TAB-Symbol vor TAB einfügen
    Selection.Move Unit:=wdCharacter, Count:=-1
    Selection.InsertSymbol CharacterNumber:=174, Font:=Symbol, Unicode:=False
    Selection.Move Unit:=wdCharacter, Count:=-1
    Selection.Expand Unit:=wdCharacter
    Selection.Font.Size = c_NORMALFONTGROESSE
       
   ->Distanz zum linken Seitenrand des nächsten Zeichens nach dem TAB
   ->MIT eingefügtem TAB-Symbol
    Selection.Move Unit:=wdCharacter, Count:=2
    l_Distance2 = Selection.Information(wdHorizontalPositionRelativeToPage)

    If l_Distance <> l_Distance2 Then
     ->Wenn sich Position des nächsten Zeichens nach dem TAB verändert hat,
     ->Font-Größe des Symbols verkleinern, solange
     ->bis sich Position nicht verändert oder min.FontGröße erreicht ist
      For x = c_NORMALFONTGROESSE - 1 To c_MINFONTGROESSE Step -1
        
       ->TAB-Symbol Font verkleinern
        Selection.Move Unit:=wdCharacter, Count:=-2
        Selection.Expand Unit:=wdCharacter
        Selection.Font.Size = x
       
       ->Distanz zum linken Seitenrand des nächsten Zeichens nach dem TAB
       ->MIT eingefügtem TAB-Symbol
        Selection.Move Unit:=wdCharacter, Count:=2
        l_Distance2 = Selection.Information(wdHorizontalPositionRelativeToPage)
        
       ->Jetzt passt es
        If l_Distance = l_Distance2 Then Exit For
      Next
      
     ->Position des nächsten Zeichens nach dem TAB hat sich verändert
     ->dann TAB-Symbol wieder löschen
      If l_Distance <> l_Distance2 Then
        Selection.Move Unit:=wdCharacter, Count:=-2
        Selection.Expand Unit:=wdCharacter
        Selection.Delete
      End If
    End If
  Loop
End Function
 
  • #12
Hi eggi,

hier noch ein Makro, der zeichenweise den AsciiCode der selektierten Zeichen ausgibt.

Also z.B. eine Absatzmarke selektieren und Makro ausführen -> Antwort: AscIICode = 13.

Gruß Matjes :)
Code:
Sub GibMirDenAsciiCodeDerSelectiertenZeichen()
  
  Dim x As Long, ret As Integer, s As String, l_asc As Long
  
  For x = 1 To Len(Selection.Text)
    s = Mid(Selection.Text, x, 1)
    l_asc = Asc(s)
    ret = MsgBox( _
      Für das  & x & . selektierte Zeichen & vbLf & _
      lautet der AsciiCode:  & l_asc & vbLf & _
      Weiter mit dem nächsten selektierten Zeichen?, _
      vbDefaultButton1 + vbYesNo)
    If ret <> vbYes Then Exit For
  Next

End Sub
 
  • #13
Das Makro wächst ja wieder ins Brudoole. Da werd ich wieder wochenlang was nachzudenken haben.

Für ASCII-Zeichen hab ich mir eine Excel-Tabelle mit Umrechnungsmodus gebastelt, denn meistens will man ja das Zeichen, das man abfragen will, erstmal hinkriegen, und dazu braucht man ja vorab den richtigen ASCII-Code. Ein Teufelskreis...

Datei kommt per Mail.

???
Eggi hat ja gar keine Mail. Sag bescheid, wohin ich die Steintafeln schicken soll ;D ;D ;D
 
  • #14
Matjes schrieb:
Hi eggi,

hier noch ein Makro, der zeichenweise den AsciiCode der selektierten Zeichen ausgibt.

Also z.B. eine Absatzmarke selektieren und Makro ausführen -> Antwort: AscIICode = 13.

Hi Matjes
Wenn ich anschließend den ASCII-Code in Word 2003 eingebe, erscheint ein Notenschlüssel.
Was mache ich falsch?

Grüße - Eggi
 
  • #15
Hallo Eggi,

welchen Zeichencode hast du denn eingegeben und welches Zeichen hast Du erwartet ?

Gruß Matjes :)
 
  • #16
Hallo Matjes!

Ich habe in Word 2003 ein neues Dokument geöffnet und eine Absatzmarke markiert und dein Makro laufen lassen. Die Ausgabe deines Makros zeigt den ASVIICode = 13. Anschließend habe ich im selben Dokument den ASCIICode (Alt+13) eingegeben. Zu meinem erstaunen erschien keine zweite Absatzmarke sondern ein Musiknote.

Was mache ich falsch?

Grüße :)
 
  • #17
Hallo Eggi,

also wenn ich unter Win98/Word97 bei gedrückter Alt-Taste auf dem Nummernblock 13 eingebe, wird eine Absatzmarke eingefügt.

Benutzt du auch den Nummenrblock ?

Beim Copyright-Zeichen (Alt+0169) hab ich festgestellt, daß es nicht egal ist, ob man die Tasten-Kombination mit führenden Nullen angibt.

Alt+169 ergibt Ascii 174
Alt+0169 ergibt Ascii 169

Also probier mal Alt+0013 für die Absatzmarke.

Gruß Matjes :)
 
  • #18
Hallo Matjes,

ich benutze den Zahlenblock. Du schreibst, das du mit Word 97 und Win98 arbeitest. Ich mit Word 2000 u. 2003 und Win XP. Könnte es daran liegen?
Dein Vorschlag mit führenden Nullen bringt keine Änderung.

Grüße ;)
 
  • #19
Hallo Eggi,

also habs jetzt unter Win2000/Winword2003 probiert.

Alt + 13 -> Note
Alt + 013 -> Absatzmarke

Eventuell hat die NumLock-Taste einen Einfluß.
Prinzipiell sollte es mit Alt+013 funktionieren.

Gruß Matjes :)
 
  • #20
Hallo Matjes,

ich hab es sofort ausprobiert. Es muss an den Versionen liegen.

Alt + 13 -> Note
Das hab ich auch!

Alt + 013 -> Absatzmarke
Da springt der Cursor in die nächste Zeile, ohne ein Absatzsymbol.

Ich danke dir für deine Bemühungen - Grüße
 
Thema:

Formatierungszeichen drucken

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben