Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

makro w Wordzie - osobny plik pod nazwą z tekstu

16 Lut 2013 17:08 3183 10
  • Poziom 6  
    Witam serdecznie,

    Używam w pracy edytora tekstu Word 2003, nie mam dostępu do Excela.
    Swoją pracę wspomagam kilkoma makrami.

    Tworzę protokoły używając do tego korespondencji seryjnej Worda.
    W protokole mam takie zmienne jak: sygnatura, imię i nazwisko, imię i nazwisko (w dopełniaczu), godzina rozpoczęcia i zakończenia pisania danego protokołu.

    Protokół dla jednej sprawy (jednej osoby) zajmuje jedną stronę.

    Tworzę więc tabelę (w Wordzie) z wyżej wymienionymi zmiennymi.
    Następnie w oparciu o tabelę i szablon do protokołu używam korespondencji seryjnej do stworzenia listy protokołów. Ta lista protokołów (w jednym pliku) jest podstawą mojego makra. Chodzi mi bowiem o to, żeby z każdej strony tego pliku zrobić osobny plik.

    Nie znam się na zaawansowanym tworzeniu makr, więc znalazłem w internecie makro, które zmienia mi tą listę protokołów na osobne pliki. Makro zamieszczam poniżej:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    I działa ok. Ale chciałbym pójść dalej. Bo osobne pliki zapisują się pod nazwami:
    prot. 1, prot. 2, prot. 3 itd.
    Tymczasem niezmiernie przyspieszyło by mi pracę, gdyby makro zapisywało kolejne protokoły pod kolejnymi nazwiskami. Ze względu na tworzenie protokołów w oparciu o szablon, nazwiska znajdują się w tych samych miejscach.

    I tu moje pytanie. Jak zmienić powyższy kod, aby osiągnąć protokoły pod nazwiskami. Gdyby ktoś z Was miał jakiś pomysł proszę o odpowiedź.
  • Poziom 40  
    Dodaj przykładowy załącznik z paroma wypełnionymi protokołami (mogą być bzdurene dane - aby były).
    Przyznam że mało "bawiłem się" w wordowskim VBA

    Zadanie jest z jednej strony proste. Chodzi o to jak poprzez kod wyciągnąć nazwisko z protokołu.
    Z późniejszym podstawieniem nie będzie problemu.
    Może jak będę miał przykład da się coś wywnioskować (np poprzez nagranie makra).
    Chyba że ktoś z forumowiczów wie z miejsca jakim kodem określa się dane pole korespondencji w wordzie.
  • Poziom 6  
    Ok. W załączeniu przesyłam plik z przykładowymi protokołami. Makro "idzie" z góry na dół, więc kursor musi być ustawiony na pierwszej stronie żeby dobrze zadziałało.

    I chodzi mi o to, żeby zamiast nazwy "prot. 1" makro nadawało nazwę "prot. Kowalski", "prot. Krawczyk" itd. czyli z wyrazu przed "- nie stawił się, wezwany prawidłowo."
  • Poziom 40  
    Widzę że się porwałem z motyką na słońce.
    Niby ta sama stajnia (office) a całkiem inne podejście do kodu VBA a w szczególności do nagrywania makr. Dlatego zapewne tak mało jest makr dla worda.

    Poszukam jeszcze ale na razie nie mogę znaleźć rozwiązania dla mojego pomysłu (zaznaczenie fragmentu tekstu).
  • Pomocny post
    Poziom 40  
    Powiem że (polskie) google nie oferuje za dużo info na temat VBA Word, a nagrywanie to jakaś masakra.
    No ale udało się.
    Może to dla znawców trochę toporne ale zawsze jakieś rozwiązanie:
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Swoją wstawkę do kodu przedstawionego przez autora topiku oparłem o nr wiersza/paragrafu.

    Nazwisko w pierwszym przypadku jest w 39 lub 40 linii protokołu (w zależności czy strona zaczyna się od razu tekstem "Sygn. akt" [pierwsza strona] czy "enter" później [kolejne strony]):

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Potem pobieram tekst z tego wiersza i dziele go wg spacji:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    A potem podstawiam drugi człon (liczenie jest od zera) do nazwy pliku

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    i tyle.

    Na razie nie robiłem obsługi błędów.
    Bo jest pytanie główne do autora topiku:
    Czy zawsze ten wiersz będzie w 39 lub 40 linni.
    Jeżeli może być w innej pozycji to potrzebne by były jakieś stałe namiary na te nazwisko
    np przed nazwiskiem by pisało "gościu" :) tu żartuje ale coś w tym stylu. Czy może zawsze te nazwisko będzie po wcześniejszym wierszu "Na posiedzenie stawili się skazany"
    Rozumiesz o co mi chodzi?. Najlepszym rozwiązaniem byłby jakiś stały tekst do którego "orientowane" by było to nazwisko.
  • Poziom 6  
    Po pierwsze to super, że można coś z tym zrobić. Dzięki, że podjąłeś temat.

    Nazwisko nie zawsze znajduje się w 39, 40 linijce (czasem samych artykułów skazania jest 2-3 linijki).

    Natomiast nazwisko zawsze znajduje się pod wierszem:
    "Na posiedzenie stawili się skazany (a):" tak jak pisałeś.
    Więc to jest ten stały element pod którym najlepiej byłoby przyczepić nazwisko.
  • Poziom 22  
    Lars_Likon napisał:
    makro nadawało nazwę "prot. Kowalski", "prot. Krawczyk" itd. czyli z wyrazu przed "- nie stawił się, wezwany prawidłowo."

    Z Wordem jest niejednoznacznie. Różna ilość linii tekstu, jakieś wtrącenie raz na 100 zdarzeń... Oparłem się na tekście "Na posiedzenie stawili się", który jest ciut wcześniej i zakładam, że nazwisko jest ciut niżej. Czy zawsze?

    Z "nazwiskiem" jest dodatkowe zamieszanie:
    - a co jeśli trafi się dwóch Kowalskich?
    - można dołączyć imię, a co jeśli są dwa?
    - jeśli wreszcie trafi się dwa razy np. "Jan Kowalski"? Wtedy makro nadpisze wcześniej utworzony plik.

    Może nazwę pliku rozszerzyć po prostu o Sygn. akt?

    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Poziom 6  
    Aldrinie, wstawienie sygnatury rozwiałoby wszystkie wątpliwości. Każda sprawa (czyli każda osoba) ma odrębną sygnaturę.

    Przy czym nie musi to być 1/13, znaku "/" w nazwie nie wstawi. Wystarczy sama 1.

    Fajnie wyglądało by to gdyby sygnatura była w nawiasie kwadratowym.
    A więc:
    "prot. Kowalski Jan [1]"
    "prot. Krawczyk Michał [2]" itd.
  • Poziom 22  
    Można zamienić "/" na myślnik, np.
    [1/13] => [1-13]

    Jaka decyzja?
    --------------------------

    Pytanie:
    mamy "II Ko 1/13". Z tego trzeba wyciągnąć tekst "od 1". Czy zawsze wcześniej są dwie spacje? Zawsze "II Ko"? Muszą być jakieś reguły, żeby to uchwycić jednoznacznie. Czy może po prostu wziąć tekst po ostatniej spacji (tak przyjąłem poniżej)?

    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Poziom 6  
    Ok. Może być sygnatura z myślnikiem, ułatwi mi to późniejsze wyszukiwanie postanowień.

    Co do "II Ko ". Tak. Są zawsze dwie spacje. Taką listę protokołów robię za pośrednictwem korespondencji seryjnej, a "II Ko " z dwiema spacjami to element stały. Jeśli to problem to można zmienić na "II.Ko." spacje zastąpić kropkami.

    Muszę uściślić jeszcze jedno, żeby Was nie wprowadzać w błąd. Bo w moim przykładzie jest to uproszczone i kolejne sygnatury to do liczby od 1 do 10. W rzeczywistości tak nie jest. Kolejne sygnatury to np. 24, 35, 5, 152 itd.
  • Pomocny post
    Poziom 22  
    Czyli kod jaki zamieściłem ciut wyżej (post 9) powinien być dobry - przyjąłem końcówkę nazwy (po ostatniej spacji).