Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Makro VBA - Zmiana bloków tekstu na kursywę.

leburaque 10 May 2013 07:31 2760 8
  • #1
    leburaque
    Level 17  
    Witam.

    Czy jest jakaś wartość w makrach do podania przy wyszukiwaniu i zamianie tekstu którą mógłbym wskazać "dowolny tekst" pomiędzy dwoma konkretnymi znakami?

    Generuję sobie automatycznie z własnego programu tekst w którym potem makrami wykonuję formatowanie. Rzeczy, które chciałbym by były w kursywie umieściłem już pomiędzy znakami "[" a "]" czyli [tekst który chcę kursywą]



    Zazwyczaj wykorzystuję to makro:

    Code: vb
    Log in, to see the code


    Ale nie mam pojęcia jak wskazać dowolny tekst w obszarze, nie wiem, jakieś np. [*] albo [?] i zastąpić go tym samym, zmieniając jedynie formatowanie. Czy ktoś mógłby mi podpowiedzieć w jaki sposób zadziałać?

    Dziękuję z góry i pozdrawiam
  • #3
    leburaque
    Level 17  
    Cóż - nie wiem, czy się dobrze wyraziłem, ale chodziło mi o takie makro VBA implementowane np. do Worda albo Excella. Słabo rozumiem Twój kod, nie do końca się orientuję jaką miałby być dla mnie wskazówką... :(

    Co zrobić Panie Kierowniku? :)

    Tak na poważnie - wyszukiwanie bloku tekstu między dwoma znakami jest w Excell albo Word dostepne z poziomu makr?
  • Helpful post
    #4
    fascynat
    Level 24  
    leburaque wrote:
    Cóż - nie wiem, czy się dobrze wyraziłem, ale chodziło mi o takie makro VBA implementowane np. do Worda albo Excella. Słabo rozumiem Twój kod, nie do końca się orientuję jaką miałby być dla mnie wskazówką... :(

    Co zrobić Panie Kierowniku? :)

    Tak na poważnie - wyszukiwanie bloku tekstu między dwoma znakami jest w Excell albo Word dostepne z poziomu makr?

    Tak na poważnie, to poważnie po przeczytaniu Twojego ostatniego wpisu nie wiem, czy piszesz tutaj żeby się czegoś dowiedzieć, czy żeby sobie jaja robić kosztem osób, które poświęcają Tobie swój czas...
    Napisałem i dałem Ci gotowe makro do wypróbowania i ewentualnego dostosowania do swoich potrzeb.

    Pomimo tego, że wesoły z natury ze mnie facet, niestety nie mogę zrozumieć w którym miejscu żartujesz, a w którym kończy się Twoja wiedza w interesującym Cię temacie.

    Potrzebujesz makro do Worda, czy makro do Excela...?
    Formatujesz duże ilości tekstu w Excelu...?

    Może jeszcze raz w sposób zrozumiały napisz, czego oczekujesz i z czym masz problem.
  • #5
    leburaque
    Level 17  
    Witaj,

    wybacz, potrzebowałem więcej czasu, aby się zapoznać z Twoim makrem, którego forma sprawdza się po prostu doskonale. Na początku moja znajomość tematu była za mała, by pojąć o co w tym chodzi, ale już nauczyłem się tego i owego. Dlatego bardzo dziękuję. Zmodyfikowałem nieco treść, tak aby przygotowany dokument od razu był przekształcany pomiędzy wskazanymi symbolami (czy raczej stringami)
    PozPocz = "[kursywa]"
    PozKonc = "[/kursywa]"

    a następnie te wskazania zostały usunięte z dokumentu. Oto efekt:

    Code: vb
    Log in, to see the code


    mam jednak pytanie - w przypadku w którym plik nie zawiera ani jednego takiego ciągu znaków jak

    PozPocz = "[kursywa]"
    PozKonc = "[/kursywa]"

    makro podaje runtime error 5 dla linii
    ZnajdzStop = InStr(ZnajdzStart, Dokument, PozKonc, vbTextCompare)

    Pytanie zatem brzmi - czy da się skonstruować pętlę w taki sposób, by wcześniej sprawdzić, czy są w ogóle takie wartości w dokumencie, a jeśli ich nie ma przerwać wykonywanie makra wcześniej (albo chociaż tego loopa)? Nie udało mi się dotychczas znaleźć konstrukcyjnie takowego warunku typu if ... then else. Czy podpowiedziałbyś mi jeszcze? Proooszę... :)
  • Helpful post
    #6
    adamas_nt
    Moderator of Programming
    Najprościej wyłączyć obsługę błędów (On Errror resume next) dla tego fragmentu.
  • #7
    leburaque
    Level 17  
    Bardzo dziękuję, pomogło. :)

    Ciekawi mnie jednak, czy nie powinienem czegoś poprawić.

    Otóż: w przypadku, kiedy nie znajduję fragmentu do przekształcenia, program teraz nie wyświetla błędu. Natomiast kiedy potem otwieram nowy dokument i tym razem mam do dyspozycji takie fragmenty, makro się zawiesza w kółko poprawiając jeden fragment. Na co powinienem zwrócić uwagę? Oczywiście ten problem nie występuje, kiedy za każdym razem otwieram Word'a na nowo.

    Pozdrawiam
  • Helpful post
    #8
    adamas_nt
    Moderator of Programming
    Zdaje się, że zapętlasz się w nieskończoność. Ale bez analizy krok po kroku (klawisz F8), trudno coś powiedzieć pewnego.

    Pierwsze co rzuciło się w oczy to :
    Code: vb
    Log in, to see the code
    Gdzie przy następnym przebiegu:
    Code: vb
    Log in, to see the code
    To może być powód, że drepczesz w miejscu. Warunek zakończenia pętli może nigdy nie wystąpić.

    Po mojemu powinieneś posunąć się 1 znak dalej
    Code: vb
    Log in, to see the code

    Jeśli nie mam pewności (przy skomplikowanej konstrukcji/danych), wstawiam licznik przebiegów wewnątrz pętli 'Do' + warunkową instrukcję wyjścia, Np: If licznik=1000000 Then Exit Do - ostatnio przy zadaniu: wylosuj liczbę podzielną przez 4, 9, 19, 35. To tak jak turysta pytał Araba o drogę na Saharze. Odp. prosto, prosto i w czwartek w lewo ;)
  • #9
    leburaque
    Level 17  
    Witam,

    wprawdzie po czasie, ale udało mi się dojść do tego co i jak było błędem po mojej stronie. Problem tkwił w tym, że niektóre tabele na poziomie tekstu tworzyły się błędnie i z tego powodu skrypt się zapętlał (pusta tabela). Tak czy siak zostawiłem sobie Twoje "Exit" przy przekroczeniu licznika. To rozwiązuje problem, gdy coś nie gra i nie zawiesza sprawy. :) Wielkie dzięki!