Word - zautomatyzowanie wstawiania twardej spacji


(kamil_w) #1

Mam sporo dokumentów w formatach .doc, .docx i .rtf tworzonych przez ludzi, dla których formatowanie tekstu to czarna magia i dlatego muszę te pliki poprawiać na własną rękę. Problem, którego nie mogę rozgryźć dotyczy zautomatyzowania dodawania twardej spacji po spójnikach "a", "w", "z", "i", "o", "u".

Na razie robię to tak:

  • narzędzia główne -> Zamień,

  • w pole "Znajdź" wpisuję np. "", gdzie to np. "a", natomiast to znak spacji,

  • w pole "Zamień na" wpisuję "" i klika w "Zamień wszystkie".

Jest 6 spójników, po których powinna występować twarda spacja, więc czynność tę powtarzam 6 razy.

Ponadto trzeba wziąć pod uwagę, że spójniki te mogą występować na początku zdania. Po powyższych czynnościach omawiane spójniki znajdujące się na początku zdania robią się małe. Dlatego po raz kolejny korzystam z funkcji "Zamień"

  • w pole "Znajdź" wpisuję "", gdzie to jedna z liter "a", "w", "z", "i", "o", "u",

  • w pole "Zamień na" wpisuję

6 spójników, 3 znaki końca zdania... 3 x 6 = 18 działań... + 6 powyższych to razem 24 działania na tekście. Trochę czasu się na to traci. Ponadto pozostaje jeszcze wciąż jeden problem. Mianowicie gdy linia tekstu zaczyna się od myślnika. W takiej sytuacji powinno być:

"".

Niestety nie wiem, czy da się to jakoś zautomatyzować, bo przecież myślnik może być też w środku zdania.

Może ktoś z was ma pomysł jak to ugryźć.


(Blady2012) #2

źródło


(Drobok) #3

Bez przesady, takie korzystanie z opcji zamień to kaleczenie tego edytora tekstu.

Zaznacz znaki wieloznaczne wpisz w pierwszym:

([aAwWzZiIoOuU])

(na początku i końcu mają być spacje) A w drugim:

\1

(j/w gdzie druga to twarda, a pierwsza normalna)

I powinno ci się to zamienić :slight_smile:

Jak by trochę pokombinować, można by to połączyć or'ami z innymi wyrażeniami skracając copy/paste do jednego przejścia (ja nie mam na czym testować :slight_smile: )


(lucas80) #4

Zamieszczam kod, który kiedyś znalazłem w internecie (szkoda, że nie wtedy gdy pisałem pracę mgr :slight_smile: ), a który trochę dopracowałem, bo znaki takie jak '-' i cokolwiek pomiędzy traktował jako litery. Makro jednak (w tej chwili) ignoruje znaki w nawiasach czyli jeśli na końcu wiersza będzie -> (a

to to zostanie pominięte, a pasowałoby przenieść do nowej linii (można sobie to dorobić)

Sub TwardaSpacja()


 Dim i As Long

 Dim licznik_zmian As Long


 licznik_zmian = 0


 maxlines = ActiveDocument.BuiltInDocumentProperties(wdPropertyLines)

 For i = 1 To maxlines


DoEvents

   Selection.GoTo What:=wdGoToLine, Which:=wdGoToFirst, Count:=i, Name:=""

   Selection.EndKey Unit:=wdLine, Extend:=wdExtend

   With Selection.Characters

     If .Count > 4 Then

       If (.Item(.Count - 2) = Chr(32)) _

        And (.Item(.Count - 1) >= Chr(65) And .Item(.Count - 1) <= Chr(90) Or .Item(.Count - 1) >= Chr(97) And .Item(.Count - 1) <= Chr(122)) _

        And (.Item(.Count) = Chr(32)) Then

        .Item(.Count) = Chr(160)

       licznik_zmian = licznik_zmian + 1

       End If

     End If

   End With


 Next


 Selection.HomeKey Unit:=wdStory


 MsgBox "Zrobione" & Chr(13) & _

        "Dokonano " & licznik_zmian & " zmian/y", vbInformation


End Sub

Licznik dodałem dla bajeru, żeby było wiadomo czy coś zrobił.

Jak użyć:

Wkleić w edytor VB Worda (alt+f11)

A potem dodać sobie przycisk z przypisanym do niego makrem.

Makro działa w Word 2003 (a pochodzi jeszcze z czasów Worda 97) , nie wiem jak wyżej.


(kamil_w) #5

@Blady2011

Czytałeś mój pierwszy post? Przecież robiłem tak, jak ty to zacytowałeś, a chciałem to jakoś zautomatyzować.

Zrobiłem na razie marko, które automatyzuje moją pracę.

LINK DO KODU

Kod nie jest zbyt elegancki, bo nie wykorzystuję w nim wyrażeń regularnych, ale robi to, co chcę (prócz tego, co opisałem z rozpoczęciem linii tekstu od myślnika).

Zostały więc 3 sprawy do ogarnięcia:

  • problem z myślnikiem na początku linii,

  • przekształcić kod tak, żeby wykorzystać wyrażenia regularne,

  • ... wiecie może gdzie są zapisywane marka z Worda na dysku twardym?

-- Dodane 03.02.2012 (Pt) 16:03 --

@drobok

Próbuję z tymi wyrażeniami regularnymi, ale nie bangla to tak, jak powinno.

W "znajdź" wpisuję:

( [aAwWiIzZoOuU] )

w "zamień na" wpisuję:

\1

W efekcie zamienia się na