tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
1623
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    richard32 richard32 ist offline Rookie
    Registriert seit
    Mar 2010
    Beiträge
    6
    Hi,

    wie kann ich im folgenden script (word 2007 makro) die harte worttrennung nach dem 25.zeichen verhindern ?

    Sub test4()
    '
    ' test4 Makro
    ' Makro aufgezeichnet am 19.03.2010 von uubbs
    '
    Selection.MoveRight Unit:=wdCharacter, Count:=25
    Selection.TypeParagraph
    Selection.TypeText Text:=" "

    End Sub


    sollte das 25.zeichen ein wort treffen, so sollte der umbruch am zuvorgehenden freizeichen erfolgen um
    die worttrennung zu vermeiden.

    freue mich über jede hilfe.
     

  2. #2
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    Am einfachsten wäre es, wenn du den gesamten Text erstmal in eine Variable kopiertst und damit arbeitest.

    Dann zählst du einfach 25 Zeichen ab, ab hier kannst du mit InStr() das nächste bzw. mit InStrRev() das vorhergehende Leerzeichen suchen. Dann kopierst du einfach den Text mit einem nachfolgenden Zeilenumbruch in eine neue Variable (bzw. hängst ihn an, so kriegst du in der neuen Variable den Text mit Umbrüchen) und zählst wieder deine 25 Zeichen weiter nach vorn (und immer so weiter, bis zu am Ende des Textes bist).

    Ist auch die Lösung für deine andere Frage weiter unten, so bist du beim Trennen nicht stur auf eine gewisse Zeichenanzahl begrenzt.


    Der Doc!
     
    A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
    B: Die Scrollbar da rechts ist dir schon mal aufgefallen?

  3. #3
    richard32 richard32 ist offline Rookie
    Registriert seit
    Mar 2010
    Beiträge
    6
    hi doc,

    danke für deine schnelle antwort.

    da ich mich ab vergangenem donnerstag erst mit den makros angefangen habe zu beschäftigen, habe ich von
    basic null ahnung, sorry. ich kann erahnen, was du meinst, aber mit der praktischen umsetzung in ein funktionierendes
    skript scheitere ich kläglich.

    was heisst "in eine variable kopieren" ? meinst du damit das deklarieren einer objektvariablen mit der dim-anweisung ?
    in welcher umgebung "zähle ich 25 zeichen ab" ? meinst du damit die ausführung des word-makros ?

    nur wenn es nicht zu viel verlangt ist: wäre ich dir möglich die von dir beschriebenen schritte als ausführbares script
    niederzuschreiben ?
     

  4. #4
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    Ich hab dir hier mal einen Code geschrieben, den du einfach als Makro in deine Word-Datei einfügst.
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    Sub Trenne()
     Dim sFrom As String, sTo As String, NoCut As Boolean, iLimit As Integer, cnt
     
     iLimit = 25 'Anzahl der Zeichen
     
     Selection.HomeKey Unit:=wdStory 'An den Anfang
     Selection.EndKey Unit:=wdStory, Extend:=wdExtend 'Alles wählen
     sFrom = Selection.Text 'Text in Variable kopieren
     
     Do 'Schleife
      cnt = InStr(iLimit, sFrom, " ") 'Anzahl der Zeichen zählen
      'Wenn du nich das nächste sondern das vorherige Leerzeichen willst, müsste die Zeile
      'cnt = InStrRev(iLimit, sFrom, " ")
      'heißen.
      If cnt < 1 Then cnt = Len(sFrom): NoCut = True 'nächstes Leerzeichen suchen
      sTo = sTo & Left(sFrom, cnt) & vbNewLine 'Text in neuen String kopieren & Zeilenumbruch anhängen
      If NoCut = False Then sFrom = Right(sFrom, Len(sFrom) - cnt) 'ursprünglichen Text verkleinern
     Loop Until NoCut = True 'bis Urspung kleiner als festgelegte Zeichenanzahl
     
     Selection.Text = sTo 'Ergebnis wieder in Dokument kopieren
    End Sub

    Ist kommentiert, also zum lernen für dich.


    Der Doc!
     
    A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
    B: Die Scrollbar da rechts ist dir schon mal aufgefallen?

  5. #5
    richard32 richard32 ist offline Rookie
    Registriert seit
    Mar 2010
    Beiträge
    6
    ...danke

    bin am testen (und lernen).

    klappt nicht auf anhieb:

    problem 1 mit InStrRev:
    es kommt zur fehlermeldung
    Laufzeitfehler '13':
    Typen unverträglich
    debugger weist auf zeile
    cnt = InStrRev(iLimit, sFrom, " ") 'Anzahl der Zeichen zählen

    problem 2 mit zeilenumbruch:
    skript bricht zeilen, die länger als 25 zeichen sind, und setzt den "rest" der zeichen (>25) in die nächste zeile
    mit anschl. umbruch. die nächste abarbeitung erfolgt in der zeile darunter. eigentlich sollte der "rest" aus der
    zeile mit dem text der folgezeile wieder die bedingung erfüllen:
    "umbruch nach 25 zeichen am freizeichen davor/danach" .

    problem 3 habe ich erst jetzt erkannt:
    beim zählen der zeichen (25) gibt es scheinbar probleme mit zeilen, die <25 zeichen haben. die sollten eigentlich
    ignoriert werden.
    idealerweise sollte das kommando lauten
    (a) suche zeile mit >25 zeichen
    (b) gehe zurück zu nächstmöglichem freizeichen
    (c) mache zeilenabsatz
    [da in den "langen" passagen zeilenumbrüche fehlen, wird die zeile nach dem umbruch in der regel wieder >25 zeichen]
    (d) prüfe die "neue" zeilenlänge auf die bedingung >25 zeichen, falls ja, weiter mit (b)

    problem 4 (ausnahmen):
    was ist, wenn in einer langen zeile keine freizeichen vorkommen ?
    hier sollte harter umbruch erzwungen werden.
    beispiel:
    Internet: https://beispielseite.für.mögliche.ü...0071321:de:pdf).

    ich teste weiter und berichte.
     

  6. #6
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    Zu 1) Sorry, hab hier die Argumente falsch gereiht: Muss
    Code vb:
    1
    
    cnt = InStrRev(sFrom, " ", iLimit)
    heißen.

    Zu 2) Eigentlich nicht, der Code nimmt eine Zeile so wie gewünscht und zählt dann wieder bis 25 Zeichen weiter. Bei so geringen Werten wie 25 sieht das teilweise komisch aus, da manchmal schon ein bis 2 Wörter diese 25 Zeichen erreichen, wenn du das ganze z.B. mit 50 bis 60 Buchstaben testest, wirst du sehen dass der Code ohne weiters das tut, was er soll.

    Zu 3) Ich hab hier natürlich einen generellen Code geschrieben, um Anpassungen wirst du ja nicht herum kommen. Eventuell musst du für die Zeilenweise abarbeitung eine weitere Schleife einbinden.

    Zu 4) Du kannst für solche Fälle ja auch nach anderen Trennzeichen (Komma, Semikolon, Bindestrich, ...) suchen und halt notfalls (cnt = 0 -> kein Leerzeichen gefunden) einen harten Umbruch machen.


    Der Doc!
     
    A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
    B: Die Scrollbar da rechts ist dir schon mal aufgefallen?

Ähnliche Themen

  1. Zeilenumbruch in Word mit Makro erstellen
    Von richard32 im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 20.03.10, 15:54
  2. Word: Zeilenumbruch nach Tabelle verhindern
    Von deusfalsus im Forum Office-Anwendungen
    Antworten: 0
    Letzter Beitrag: 02.10.07, 14:25
  3. Zeilenumbruch verhindern
    Von sorashi im Forum CSS
    Antworten: 4
    Letzter Beitrag: 19.11.04, 21:02
  4. Zeilenumbruch bei H1 verhindern
    Von schampar im Forum HTML & XHTML
    Antworten: 6
    Letzter Beitrag: 06.05.04, 16:14
  5. VBA Makro von Word 6.0 auf Word 2000...
    Von maeaexx im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 06.03.04, 12:57

Stichworte