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

Makro w Wordzie - Korespondencja seryjna

Tomek2013 25 Lut 2013 23:22 10182 12
  • #1 25 Lut 2013 23:22
    Tomek2013
    Poziom 6  

    Witam.
    Ponieważ makro w wordzie jest mi trochę obce (w excelu trochę lepiej, ale mistrzem to na pewno nie jestem) chciałbym poprosić o radę. Chodzi o korespondencję seryjną, wysyłam listy w pracy o treści takiej samej, ale do wielu osób. Dane adresatów, które pojawiają się w liście pobierane są z excela. Ostatnia operacja przy korespondencji seryjnej to scalanie dokumentu. No i teraz pojawia się jeden plik worda z tyloma stronami dokumentu ilu było adresatów w tabeli excela. Czy jest szansa, żeby od razu robił się osobny plik dla każdego klienta, a jak byłby to plik w którego nazwie byłby adresat - byłoby bosko!
    Próbowałem napisać jakieś makro, które scalałoby list z danymi adresata, ale poległem. Niby trochę działa, ale ... zawsze nowy dokument po uruchomieniu makra nadpisuje porzedni (nowy list, nowe dane adresata, ale zawsze ta sama nazwa pliku). No, ale na początku wspomniałem, że makra nie są moją mocną stroną. A może można to inaczej osiągnąć?
    Dziękuję za ewentualne podpowiedzi i czas poświęcony temu tematowi. Pozdrawiam serdecznie.

    0 12
  • #2 25 Lut 2013 23:51
    mickpr
    Poziom 39  

    Jaki Word (wersja)?
    Myślę, że podszedłeś do tematu trochę źle, ale to moje "gdybanie" - bo nie napisałeś:
    1. W jaki sposób te listy wysyłasz? (e-mail, poczta tradycyjna).
    Jeśli są drukowane, to po co je zapisywać jako tysiące plików Word?
    2. Dlaczego są w formacie Word?

    Przybliż nieco temat...

    0
  • #3 26 Lut 2013 15:03
    Tomek2013
    Poziom 6  

    Witam. Jest to Word 2010.
    Listy wysyłane są mailem, stąd potrzebny jest plik. Tylko, że wysyłką maili zajmuje się już inny dział i oni powinni dostać przygotowany plik.
    Tak już to działa tu w firmie i pewnie w najbliższym czasie nic się nie zmieni. A to ewentualne ulepszenie o które pytam na forum, to po prostu próba ułatwienia sobie (i nie tylko sobie) pracy w przygotowywaniu pliku.
    Dzięki za zainteresowanie i pozdrawiam

    0
  • Pomocny post
    #4 28 Lut 2013 11:51
    milowerk
    Poziom 10  

    Nie wiem czy masz możliwość używania w pracy LibreOffice, jeśli tak to taka opcja jakiej potrzebujesz jest tam w standardzie. Tutaj masz opisane jak to zrobić.

    Pozdrawiam.

    0
  • #5 28 Lut 2013 22:29
    Tomek2013
    Poziom 6  

    Sprawdziłem przed chwilą w domu. Zainstalowałem LibraOffice i rzeczywiście poprawa jest ogromna. Mam już każdego klienta osobno. Ogromne dzięki.
    Teraz to już tylko marzenie o pliku od razu z nazwą klienta, ale jak się nie uda to nic się nie stanie. Do wczoraj myślałem głównie o osobnym pliku, ale wiadomo ... apetyt rośnie w miarę jedzenia :-)
    W przyszłym tygodniu, bo jutro nie dam rady, przetestuję pomysł w pracy. Jeszcze raz bardzo dziękuję za pomoc.
    Pozdrawiam

    0
  • #6 01 Mar 2013 01:10
    marcinj12
    Poziom 40  

    Można to zrobić też w Wordzie (2007, przypuszczalnie w innych też).
    1. Tworzysz normalny dokument korespondencji seryjnej, np. za pomocą kreatora, ale zatrzymujesz się na ostatnim kroku (scalanie) i zapisujesz plik. Chodzi o to, żeby w zakładce Korespondencja móc poruszać się strzałkami w przód i w tył na podglądzie wyników i żeby tworzyły one dokument docelowy.
    2. W zakładce Developer wchodzisz w makro (albo tworzysz je jeszcze przed utworzeniem korespondencji) o następującej treści:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Uruchamiasz je i każdy rekord zostanie przekopiowany i zapisany do osobnego pliku - o nazwie takiej, jak wybrane pole korespondencji seryjnej (tutaj: "nazwisko").

    --edit:
    Mała modyfikacja kodu drukująca również dokumenty mające więcej niż 1 stronę:
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    1
  • #7 02 Mar 2013 00:17
    Tomek2013
    Poziom 6  

    Witam ponownie. Na początek muszę zweryfikować informacje z pierwszego mojego wpisu o mojej znajomości makro. Niestety okazuje się, że jest mi ono zupełnie obce. Po godzinie prób i powtarzania operacji na makro, w dalszym ciągu nic mi się nie udaje. Marciniej22, jeśli da radę jeszcze prościej krok po kroku wyjaśnić niż w poprzednim wpisie, to poproszę. Wydaje mi się, że robię wszystko tak jak napisałeś, mogę na zapisanym pliku zmieniać kolejne osoby z listy, ale ... po uruchomieniu makra mam takie oto informacje:

    Makro w Wordzie - Korespondencja seryjna

    Makro w Wordzie - Korespondencja seryjna

    Czy nazwa pliku worda w którym robię korespondencję seryjną ma znaczenie? A może gdzieś tego typu błąd robię. W bazie mam jedną z kolumn nazwaną "nazwisko". Za każdą podpowiedź i sugestię będę bardzo wdzięczny.
    Pozdrawiam

    0
  • Pomocny post
    #8 02 Mar 2013 00:23
    marcinj12
    Poziom 40  

    Wygląda na to że wszystko robisz dobrze.
    Prawdopodobnie nie masz uprawnień administratora i do zapisu bezpośrednio na dysk C, ew. to kwestia ustawienia czegoś w zabezpieczeniach Worda (widzę że to ten nowy, ja się zatrzymałem na 2007).
    Utwórz na nim jakiś katalog, zmień ścieżką w makro i do niego próbuj zapisać.
    Oczywiście nazwa pliku ma tutaj znaczenie takie, jak przy tworzeniu plików w Windowsie - nie możesz używać w nazwie symboli: / ? * \ < > : "

    0
  • #9 03 Mar 2013 17:52
    Tomek2013
    Poziom 6  

    Witam. Niestety nie zawsze daję radę próbować przekazane podpowiedzi, stąd na forum bywam nie każdego dnia i dopiero teraz odpisuję. Ale do rzeczy, jest postęp i to jaki ! Stworzyłem katalog na pulpicie i tam już się pliki zapisują :D . Ale niestety wyskakuje na koniec informacja o błędzie - info na 2 załącznikach. Z tego co się zorientowałem to po ostatniej osobie z listy bazy danych w excelu makro dalej chce stworzyć kolejny plik, ale nie ma już kolejnego "nazwiska" w tabelce i wyrzuca błąd. W wordzie tworzy się dokument z szablonem listu, bez żadnych danych imiennych, no bo nie ma skąd ich wziąć.
    Czy jest szansa zatrzymać makro po ostatniej osobie z listy jakąś komendą?
    Ale po takim i tak już sukcesie, aż mi głupio podpytywać o dalsze udogodnienie o którym chyba pisałem wcześniej. Czy te pliki mogłyby być konwertowane od razu do PDFa?
    Jeszcze raz dzięki za pomoc jaką otrzymałem do tej pory.
    Pozdrawiam
    Makro w Wordzie - Korespondencja seryjna Makro w Wordzie - Korespondencja seryjna

    0
  • #10 03 Mar 2013 19:12
    marcinj12
    Poziom 40  

    U mnie działa bez zarzutów - sprawdź w swoim źródle danych, czy aby po ostatnim wierszu nie masz jakiś pustych (usuń je). Ewentualnie zawsze możesz skorygować RecordCount o 1.

    Jeśli chodzi o drukowanie do PDF, to:
    - ściągnij i zainstaluj PDF Creator,
    - uruchom go, w Drukarka->Opcje->Autozapis zahacz "Używaj funkcji autozapisu", w polu Nazwa pliku wybierz <Title>, a poniżej podaj folder o zapisu plików. Jeżeli masz zaznaczone dwa ptaszki poniżej (o wysyłaniu mailem i otwarciu domyślnym programem) - odhacz je. Zapisz i zamknij PDF Creatora.
    - Teraz dwie drogi:
    a. pół-automatycznie: zmień i dostosuj do swoich warunków makro:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    b. ręcznie: nie przerabiaj makra, a jak już wydrukujesz do katalogu wszystkie .docx, zamknij worda, otwórz PDF Creatora i przeciągnij na niego wszystkie .docx.
    Efekt ten sam, tylko za każdym razem otwiera worda na nowo, więc dłużej.

    PS. W obu makrach przed pętlę For można dodać linijkę:
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    , dzięki której automatycznie przeskoczy ono na pierwszą stronę podglądu przed rozpoczęciem wydruku.

    0
  • #11 04 Mar 2013 21:48
    Tomek2013
    Poziom 6  

    Witam. Jest coraz lepiej :D . Rzeczywiście ostatnie błędy to wina bazy dach z excela. Nowa tabelka wszystko wyprostowała. PDF już jest. Tak naprawdę to pozostało mi już tylko dopieszczanie. Spróbuję jeszcze znaleźć sposób na zapisanie pliku nie tylko "nazwiskiem" ale także "imieniem" z bazy danych. Jeszcze raz ogromne dzięki za wsparcie i podpowiedzi

    0
  • #12 25 Lut 2015 08:14
    iz_123
    Poziom 2  

    hej,
    Tak jak poprzednik ja również staram się przyspieszyć wystawianie zawiadomień i protokołów do Klientów - dlatego skorzystałam z Waszego kodu :)
    I wszystko było by pięknie ponieważ pliki dzielą się i nazywają tak jak chce, ale niestety (nie wiem czemu) pomimo, że oryginalny dokument ma 4 strony wychodzi tylko 1 strona (usunięcie komendy: Selection.TypeBackspace - nic nie dało).

    Dodatkowo kasuje się stopka i nagłówek (logo firmy + dane kontaktowe), a cały tekst się rozjeżdża (formatowanie z pierwotnego pisma całkowicie znika - ustawienie marginesów, opcje interlinii itp.).

    Jeśli ktoś umie mi pomóc była bym wdzięczna :)

    0
  • #13 14 Kwi 2015 19:04
    KariPn
    Poziom 1  

    witam, po wklejeniu tej marko prawie działa tak jak należy.

    korzystam z office 2013.

    na 32 pliki wygenerowało 16 i potem wyskoczył błąd
    Makro w Wordzie - Korespondencja seryjna

    dodatkowo wygenerowane pliki bardzo się rozjechały w porównaniu z tworzonymi w normalny sposób.

    0