[Word2003/makro] Niełamalna spacja po pojedynczych znakach


(Sulimak) #1

Witam serdecznie.

Miałbym do Szanownych grupowiczów prośbę. Potrzebuję makro do Worda które w funkcjonalny sposób po każdym pojedynczym znaku (litera, cyfra) zamieni spację na non breaking space.

Pozdrawiam!


(Lasinski Jacek) #2

sulimak , sam nie możesz zrobić sobie takiego makra, wystarczy użyć do tego rejestratora makr.


(Sulimak) #3

Witam.

Oto przykładowy zapis z kodu jaki mi wygenerował rejestrator.

Minus jest jeden, każdy wyraz (a, i, w, u, o etc.) muszę oddzielnie dodawać. Czy nie ma jednej formuły, coś w rodzaju %1, tak żebym w ten sposób określił iż makro ma się tyczyć wszystkich wyrazów jednoliterowych.

Selection.Find.Execute Replace:=wdReplaceAll

    With Selection.Find

        .Text = " i "

        .Replacement.Text = " i^s"

        .Forward = True

        .Wrap = wdFindContinue

        .Format = False

        .MatchCase = False

        .MatchWholeWord = False

        .MatchWildcards = False

        .MatchSoundsLike = False

        .MatchAllWordForms = False

    End With

Pozdrawiam.


(Pdd1) #4

sulimak, kod Twojego makra może nie dawać zadowalających efektów, jeżeli w tekście wystąpi ciąg pojedynczych znaków rozdzielanych spacjami, zaobserwowałem, że tylko co drugi taki znak będzie miał non breaking space po sobie

poniższy kod dotyczy zakresu cyfr "0...9'

dla dużych liter 'A...Z' w pierwszej linijce należy zmienić, makro w tym przypadku zmieni występujące w tekście małe litery na duże (tak u mnie się stało)

For i = 65 To 90

dla małych liter 'a...z' w pierwszej linijce należy zmienić

For i = 97 To 122

For i = 48 To 57

    Selection.Find.Execute Replace:=wdReplaceAll

    With Selection.Find

        .Text = " " + Chr(i) + " "

        .Replacement.Text = " " + Chr(i) + "^s"

        .Forward = True

        .Wrap = wdFindContinue

        .Format = False

        .MatchCase = False

        .MatchWholeWord = False

        .MatchWildcards = False

        .MatchSoundsLike = False

        .MatchAllWordForms = False

    End With

Next i

jeżeli chciałbyś rozszerzyć listę znaków, to umieść odpowiednie wartości w pętli For z tablicy ASCII http://www.programuj.com/ascii.php

PS:jeżeli mój post jest nieprzydatny lub błędny proszę o prywatną wiadomość w celu modyfikacji tego co napisałem


(Sulimak) #5

Witam, zrodził się problem. Ogólnie skrypt działa dobrze, spełnia swoje zadanie, niemniej kastruje duże, pojedyncze litery na początku zdania zamieniając je na małe litery (Przykład: "Idziemy do szkoła w piątek. W sobotę wręcz przeciwnie.").

'

' DUŻE LITERY

'

For i = 65 To 90

    Selection.Find.Execute Replace:=wdReplaceAll

    With Selection.Find

        .Text = " " + Chr(i) + " "

        .Replacement.Text = " " + Chr(i) + "^s"

        .Forward = True

        .Wrap = wdFindContinue

        .Format = False

        .MatchCase = False

        .MatchWholeWord = False

        .MatchWildcards = False

        .MatchSoundsLike = False

        .MatchAllWordForms = False

    End With

Next i

'

' MAŁE LITERY

'

For i = 97 To 122

    Selection.Find.Execute Replace:=wdReplaceAll

    With Selection.Find

        .Text = " " + Chr(i) + " "

        .Replacement.Text = " " + Chr(i) + "^s"

        .Forward = True

        .Wrap = wdFindContinue

        .Format = False

        .MatchCase = False

        .MatchWholeWord = False

        .MatchWildcards = False

        .MatchSoundsLike = False

        .MatchAllWordForms = False

    End With

Next i

Złączono Posta : 27.09.2007 (Czw) 14:12Mam! Chodziło o zmianę na:

MatchCase = False