[VBA] Formatowanie komórek

Awatar użytkownika
hellsing
Użytkownik
Użytkownik
Posty: 191
Rejestracja: 30 mar 2006, o 14:09
Płeć: Mężczyzna
Lokalizacja: Z kątowni
Podziękował: 11 razy
Pomógł: 16 razy

[VBA] Formatowanie komórek

Post autor: hellsing »

Czy ktos wie jak zedytowac dokument w Wordzie gdzie wystepuja liczby w formacie

PLN 1,227,086 thousand
PLN 800,944 thousand

etc. na takie zeby byly w formacie

PLN XXX million ?

Czyli potrzebuje makra ktore by zmienilo PLN XXX,XXX thousand na PLN XXX million.

Z gory dzieki.
Ostatnio zmieniony 19 sie 2013, o 21:10 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
zeus_156
Użytkownik
Użytkownik
Posty: 36
Rejestracja: 9 sie 2013, o 15:16
Płeć: Mężczyzna
Lokalizacja: KRK
Pomógł: 7 razy

[VBA] Formatowanie komórek

Post autor: zeus_156 »

Ja bym to zrobił tak:

Kod: Zaznacz cały

Sub SpecjalneZamien()
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "PLN [0-9]{1;3}(,[0-9]{1;3})* thousand"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Do
        Selection.Find.Execute
        If Len(Selection.Text) > 1 Then
            Selection.TypeText Text:=Replace(Replace(Selection.Text, ",", ""), "thousand", "million")
        Else
            MsgBox ("koniec")
            Exit Do
        End If
    Loop While 1
End Sub
Awatar użytkownika
hellsing
Użytkownik
Użytkownik
Posty: 191
Rejestracja: 30 mar 2006, o 14:09
Płeć: Mężczyzna
Lokalizacja: Z kątowni
Podziękował: 11 razy
Pomógł: 16 razy

[VBA] Formatowanie komórek

Post autor: hellsing »

Nie do konca dziala. Zamienia PLN XXX,XXX thousand ma PLN XXXXXX million. Chcialbym zeby zamienial PLN 1,234,567 thousand na PLN 1,234 millon. Moglbys tak to zedytowac?
MakCis
Użytkownik
Użytkownik
Posty: 1023
Rejestracja: 10 lut 2008, o 15:45
Płeć: Mężczyzna
Podziękował: 72 razy
Pomógł: 15 razy

[VBA] Formatowanie komórek

Post autor: MakCis »

Podejrzewam, że

Kod: Zaznacz cały

Sub SpecjalneZamien()
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "PLN [0-9]{1;3}(,[0-9]{1;3})* thousand"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Do
        Selection.Find.Execute
        If Len(Selection.Text) > 1 Then
            Selection.TypeText Text:=Replace(Replace(Selection.Text, ",", ","), "thousand", "million")
        Else
            MsgBox ("koniec")
            Exit Do
        End If
    Loop While 1
End Sub
zeus_156
Użytkownik
Użytkownik
Posty: 36
Rejestracja: 9 sie 2013, o 15:16
Płeć: Mężczyzna
Lokalizacja: KRK
Pomógł: 7 razy

[VBA] Formatowanie komórek

Post autor: zeus_156 »

Gdybyś od razu podał ten przykład to było by wiadomo, że chodzi Ci o to:

Kod: Zaznacz cały

Sub SpecjalneZamien()
    Dim textLen, substLen
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "PLN [0-9]{1;3}(,[0-9]{3})* thousand"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    substLen = Len(",XXX thousand")
    Do
        Selection.Find.Execute
        textLen = Len(Selection.Text)
        If textLen > substLen And InStr(Selection.Text, " million") < 1 Then
            Selection.TypeText Text:=Mid(Selection.Text, 1, textLen - substLen) & " million"
        Else
            MsgBox ("koniec")
            Exit Do
        End If
    Loop While 1
End Sub
Dobrze jest też wiedzieć, że gdyby ktoś chciał to uruchomić na angielskiej wersji MS Word-a to trzeba zmienić jedną linijkę na:

Kod: Zaznacz cały

        .Text = "PLN [0-9]{1,3}(,[0-9]{3})* thousand"
ODPOWIEDZ