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 - Dane z EXCELa do WORDa -

tomek-hp13 06 Mar 2014 11:58 5763 29
  • #1 06 Mar 2014 11:58
    tomek-hp13
    Poziom 7  

    Witam wszystkich forumowiczow,
    z gory przepraszam za brak poslkich znakow (zycie zmusilo do emigracji).

    Widzialem ze skutecznie pomogliscie juz wielu osobom w stworzeniu praktycznych i przede wszystkim poprawnie dzialajacych makr.
    Ja, jak kazda z tych osob rowniez z powodu swoich ogranicen w tej dziedzinie nie potrafie poradzic sobie z ulepszeniem mojego makra.

    Moze w celu zrozumienia o co chodzi napisze otwarcie co i jak:

    firma w ktorej pracuje ma wiele umow, umowy maja numery 00-3632, 00-3637 itd... kazda umowa ma bank danych w excelu.
    Znajduja sie tam dane dotyczace dokumentow ktore musimy stworzac i wyslac do akceptacji klientowi.
    Jak wiadomo klient nasz pan i swoje wymagania (chocby jak glupie czasem nie byly) ma.

    Podstawowym jednak wymaganiem ktore dotyczy 90% naszych klientow jest Strona tytulowa dla kazdego dokumentu.
    Zawiera ona informacjie ktore w 100% znajduja sie w Excelowskim banku danych.

    moje uposledzone rozwiazanie:
    (nie bede pisal jakim cudem) ale udalo mi sie utworzyc dodatkowy arkusz w excelu ktory wyglada jak strona tytulowa danego klienta, ktora sama sie wypelnia (zrobiona na zasadzie =INDEX(DANE!$A$1:$Z$999;$BW$6;2)
    wyjasnienie: z arkusza o nazwie DANE robie tabele z zakresem od A1 do Z999 i wybieram wiersz i kolumne na zasadzie

    liczbowej, gdzie BW6 jest moim wierszem, a 2 jest kolumna (przykladowo w kolumbie B, czyli 2 z mojego indexu) sa numery dokumentow. Dzieki temu po wpisaniu w BW6 odpowiedniego numeru wiersza, mam w odpowiednich miejscach na stronie tytuowej odpowiednie wartosci z banku danych.
    Moje makro resetuje licznik wierszy na 1 (dzieki temu strona tytulowa wypelnia sie danymi pierwszego dokumentu) drkuje strone do specjalnie skonfigurowanej drukarki PDF strone (czeka 3 sekundy - jest to konieczne, gdyz inaczej pliki nie zdazyly sie zapisac a juz zaczynaly sie kopiowac) i kopiuje ja, uzywajac do tego odpowiedniej nazwy pliku (branej rowniez

    na zasadzie INDEX z bazy danych). Makro zwieksza liczbe wiersza o 1 i powtarza prace (nadpisujac stworzony wczesniej plik) i kopiujac go pod inna nazwe az do uzyskania liczyb wierszy 999. Moge jeszcze zaznaczyc ze w banku danych jest takze kolumna ktora decyduje czy strona tytulowa ma byc przygotowana (1-TAK, 0-NIE) dzieki temu caly proces od 1 do 999 trwa w zaleznosci od ilosci stron dosc krotko (okolo 5sek 1 strona, w tym 3 sek czekania na poprawne zakonczenie kopiowania).

    Wszystko super, tylko PDFa nie mona edytowac... i tu jest moj problem.

    Wolal bym utworzyc strone tytulowa w wordzie ze zmiennymi typu:
    §ZM_01§, §ZM_02§ ...
    w excelu byly by to tak na prawde odpowiedniki kolumn, dlatego dla kazdego wiersza byla by to inna wartosc.

    Nowe makro w polaczeniu z moim starym (tylko juz bez drukowania)
    mialo by otworzyc moj wzor strony tytulowej w WORDzie, zamienic wszystkie wartosci §ZM_01§ na wartosci z EXCELa, ktore sa np w komorce B1, wartosci §ZM_02§ na D1 itd... oraz zapisac dany dokument w postaci dokumentu WORD pod nazwa podana w komorce np. A1. Potem (ten proces mam juz opanowany) zmienic wiersz o +1 i powtorzyc proces do 999.
    Rezultatem nowego makra byly by edytowane, wstepnie wypelnione pliki w WORDzie a nie nieedytowalne w PDFie.
    Zaleta takiego rozwiazania byla by latwa mozliwosc dopisania np kolejnej rewizji dokumentu.
    W obecnym stanie rzeczy niestety trzeba dane o kolejnej rewizji umiescic w excelu oraz wydrukowac strone na nowo.
    PDF: dla kazdej rewizji nowy PDF
    WRD: dla jednego dokumentu jeden WRD (dla wszystkich rewizji)

    Moje dotychczasowe (dzialajace tylko na moim kompie z powodu ustawien drukarki) makro wyglada tak:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Jakies pomysly ?

    0 29
  • Pomocny post
    #2 06 Mar 2014 14:51
    marcinj12
    Poziom 40  

    Ale się kolega rozpisał... ;)
    Jeśli dobrze zrozumiałem, chodzi o coś w rodzaju korespondencji seryjnej?
    Sprawdź prosty przykład z załącznika - myślę, że kod nie wymaga dodatkowych objaśnień...

    1
  • #3 06 Mar 2014 15:06
    tomek-hp13
    Poziom 7  

    marcinj12, to jest dokladnie to czego szkalem...
    tylko jest jeden problem... nie widze tego kodu z makra, w ogole nie widze zeby tam bylo jakies makro... znaczy sie wszystko dziala, tylko ja nie wiem jak (wiec nic nie moge zmienic)

    czy arkusz baza jest jakos chroniony?

    0
  • #4 06 Mar 2014 15:16
    marcinj12
    Poziom 40  

    A jakiego Excela używasz?? Arkusz nie jest chroniony, w pliku Baza.xlsm wciskasz ALT+F11 i kod makra powinien być w Arkusz1.

    0
  • #5 06 Mar 2014 15:25
    tomek-hp13
    Poziom 7  

    Office 2010

    sorki... ALT+F11 dziala,
    myslalem ze jak "klikne" marka, pokaz makra to tam to makro tez bedzie, ale nie ma,
    niewazne... znalazlem...

    OCZYWISCIE NIE WIEM JAK CI DZEIKOWAC (naprawde wielkie wielkie dzieki)

    jesli chodzi o kod to jest dla mnie srednio zrozumialy...

    do pelni szczescia potrzebowal bym jeszcze jednego
    (az mi glupio prosic, ale sam bede sie nad tym pocil kilka dni)
    chodzi o kolumne w ktorej bedzie 0 lub 1 (1 plik ma byc przygotowany, 0 tworzenie pliku jest pomijane)

    dalo by rade?

    0
  • #6 06 Mar 2014 15:34
    marcinj12
    Poziom 40  

    tomek-hp13 napisał:
    myslalem ze jak "klikne" marka, pokaz makra to tam to makro tez bedzie, ale nie ma,
    Tam są makra nagrane przez Excela, pisane własnoręcznie są widoczne np. po kliknięciu przycisku VisualBasic i otwarciu odpowiedniego pliku.

    tomek-hp13 napisał:
    jesli chodzi o kod to jest dla mnie srednio zrozumialy...
    Coś konkretnego nie jest jasne?
    Makro składa się z jednej pętli FOR, która dla każdego wiersza z Excela otwiera dokument szablonu, a następnie poleceniem REPLACE zastępuje wpisany marker tekstem z wybranej komórki. Następnie dokument jest zapisywany we wskazanej lokalizacji.
    Większość kodu to tak naprawdę polecenia wymagane do operacji otwórz-zastąp-zapisz na wordzie z poziomu Excela - do wygooglania w pierwszym z brzegu przykładzie.

    Ten problem nad którym byś chciał kilka dni siedzieć ;) ogranicza się do jednego dodatkowego warunku if. Dodaj kod np. tak:
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    wstawiając sobie własną kolumnę, gdzie umieścisz tą jedynkę.

    0
  • #7 06 Mar 2014 15:40
    tomek-hp13
    Poziom 7  

    Super!
    Dzieki raz jeszcze!

    udalo mi sie to z Twoja wielka, nieoceniona pomoca naturalnie :)

    0
  • #8 07 Mar 2014 10:19
    tomek-hp13
    Poziom 7  

    Witam ponownie,

    mam jeszcze jedna pytanie, a mianowicie:
    skrypt dzaiala dobrze, ale jak zmienna w WORDzie jest w stopce lub w polu tekstowym, to nie zostaje zastapiona danymi z EXCELa. Po prostu zostaje pomijana.

    Czym to moze byc spowodowane?

    0
  • #9 07 Mar 2014 10:55
    marcinj12
    Poziom 40  

    Domyślnie wyszukuje tylko w tekście dokumentu, do nagłówka i stopki trzeba zmienić zakres przeszukiwania i powtórzyć wyszukiwanie. Zobacz ulepszoną wersję 2.0, jak to się robi...

    0
  • #10 07 Mar 2014 11:08
    tomek-hp13
    Poziom 7  

    super,
    a pola tekstowe ?

    pola tekstowe sa dla mnie szczegolnie wazne bo tylko dzieki nim strona sie potem nie rozjezdza (to przez rozne dlugosci np. nazw czasem 5 liter a czasem 100 i wtedy robia sie 2 linijki i w rezultacie reszta jest juz pomieszana.)

    0
  • #11 07 Mar 2014 12:33
    marcinj12
    Poziom 40  

    A jak te pola tekstowe wstawiasz? Może zamieść przykład pliku z takim polem?

    0
  • #13 07 Mar 2014 15:37
    marcinj12
    Poziom 40  

    Dodaj taką sekcję:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #14 06 Maj 2014 15:02
    tomek-hp13
    Poziom 7  

    Witam raz jeszcze,
    wszystko sie udalo i dziala SUPER, jeszcze raz wielkie dzieki!!!

    mam jednak inny Problem z innym makrem (jestem lamus jesli chodzi o makra)
    POMOCY!
    makro pyta o zakres komorek do kopiowania (a nie ma pytac...) kopiuje je i wkleja do pliku txt.
    Makro wyglada tak:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Problem polega na tym ze w tej chwili pojawia sie pytanie o zakres eksportu a ma byc na twardo B2:B100 - jak to zrobic?

    0
  • #15 06 Maj 2014 15:24
    marcinj12
    Poziom 40  

    Nie sprawdzałem, ale myślę że wystarczy zmienić:

    Kod: vb
    Zaloguj się, aby zobaczyć kod
    na
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #16 06 Maj 2014 15:26
    JRV
    Specjalista - VBA, Excel

    Witaj.
    Set WorkRng = Range( "B2:B100 ")

    0
  • #17 06 Maj 2014 15:36
    tomek-hp13
    Poziom 7  

    Dzieki za kolejna nieoceniona pomoc!
    Jasne ze zadzialalo (robilem to samo tylko bez "" i to byl moj glowny Problem)
    Dzieki!!!

    A mozesz mi jeszcze powiedzec jak uruchomic plik przez Makro,
    np po skonczonym przerabianu (mial by uruchomic sie skrypt BAT ktory jest w tym samym katalogu)

    Dodano po 5 [minuty]:

    Nie uwierzycie...
    udalo mi sie samemu:

    Dim RetVal
    RetVal = Shell(ThisWorkbook.Path & "\000.bat", 1)

    :))

    0
  • #18 03 Wrz 2014 14:07
    buczus72
    Poziom 2  

    Witam.

    Chciałabym dołączyć się do wątku ponieważ mam podobny problem do rozwiązania a jestem laikiem z VBA.
    Mam bazę około 7 tys. wierszy w Excelu z danymi (np. nazwisko pesel adres itp.) oraz umowę w Wordzie.
    Nie potrafię napisać kodu w VBA żeby poprzez przycisk wywołać dokument umowę z przeniesionymi danymi poszczególnych pól tylko wyfiltrowanego wiersza.
    Z góry dziękuje

    0
  • #19 03 Wrz 2014 18:15
    tomek-hp13
    Poziom 7  

    Witaj,
    tutaj masz prosty pliczek

    https://www.dropbox.com/s/hc1w8gy6otohhx8/baza.xlsm?dl=0

    to co mi chłopaki pomogli :)

    w kolumnę B wpisujesz nazwy plików wynikowych
    kolumny A, C-N swoje dane
    kolumna O - nazwa wzoru (w wordzie - plik .DOCX)
    jak wzór się nazywa WZOR01.DOCX to wpisujesz WZOR01
    kolumna P - czy ma być stworzony plik czy nie (tak = 1 / nie = 0) - TWÓJ FILTR (użyj przycisków SELECT - kolo drukarki)
    Q kolumna zliczająca
    R-S było mi potrzebne
    T-BZ - kolejne dane

    potem klikasz na ikonę drukarki i powinny stworzyć Ci się pliki o nazwach jak w kolumnie B typu word, z podmnienionymi wartościami

    we wzorze piszesz §ZM_01§ i tam wpiszą się dane z kolumny A itd...

    mam nadzieję że pomogło
    pozdrowionka

    0
  • #20 04 Wrz 2014 13:58
    buczus72
    Poziom 2  

    Bardzo dziękuje za szybką pomoc.
    Coś robię jednak nie do końca dobrze, bo nie podstawiają mi się dane w Wordzie. Czy dobrze rozumiem ,że w szablonie Worda np. w polu nazwisko mam wpisać wzór $ZM_01$ itd.
    Mam jeszcze pytanie co do filtrowania 1 rekordu. Po naciśnięciu drukareczki tworzą się pliki Worda do wszystkich rekordów.

    0
  • #21 04 Wrz 2014 17:32
    tomek-hp13
    Poziom 7  

    jeśli chodzi o zmienne to tam nie ma znaku $ (dolara) tylko § (paragraf) (można zrobić za pomocą kombinacji klawiszy ALT+21)

    pliki powinny się tworzyć do wszystkich wierszy które w polu "P" mają wartość "1"

    0
  • #22 05 Wrz 2014 09:30
    buczus72
    Poziom 2  

    Witam.

    Wszystko działa. Bardzo dziękuje.

    Pozdrawiam

    0
  • #23 21 Sty 2015 09:16
    tomek-hp13
    Poziom 7  

    Witam ponownie :)

    sorki ze odkopuje taki stary temat, ale to dotyczy wlasnie jego.
    Walcze z tym juz od jakichs 2 dni i nie moge sobie z tym poradzic.

    Chodzi o to ze makro z Excela (dzieki Waszej pomocy) zmienia pewne ciagi znakow w dokumencie Word na te podane w tabeli Excel.

    Makro wykonuje to w:
    Tekscie

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Naglowku
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Stopce
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Polach tekstowych
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Problem niestety (bo owy jeszcze sie pojawil) wystepuje jesli wystepuja rozne naglowki/stopki dla pierwszej strony i reszty stron. Wtedy w naglowku na pierwszej stronie dane zostana odszukane i podmienione, ale na pozostalych juz nie...

    i to jest wlasnie ten problem - jak zrobic zeby dane byly podmieniane we wszystkich naglowkach (i stopkach) nawet jesli naglowki sa dwa (oba inne)

    pozdrawiam
    Tomek

    0
  • #24 21 Sty 2015 12:46
    -psiak-
    Poziom 32  

    Wg mnie robisz to od niewłaściwej strony.
    To word powinien sięgnąć do excela, pobrać odpowiednie komórki i powstawiać je gdzie trzeba.
    http://support.microsoft.com/kb/294683/pl
    Ograniczenie jest takie że trzeba ~te wszystkie komórki ustawić w jednym wierszu excela.
    Jeżeli będzie więcej wierszy to w wyniku powstanie tyle różnych dokumentów ile jest wierszy w tym excelu.
    Ale to też nie jest problem, zawsze można zrobić dodatkowy arkusz w excelu i do niego w jeden wiersz wciągnąć odpowiednie komórki z innych arkuszy.

    0
  • #25 21 Sty 2015 13:06
    tomek-hp13
    Poziom 7  

    -psiak- napisał:
    Wg mnie robisz to od niewłaściwej strony.
    To word powinien sięgnąć do excela, pobrać odpowiednie komórki i powstawiać je gdzie trzeba.
    http://support.microsoft.com/kb/294683/pl
    Ograniczenie jest takie że trzeba ~te wszystkie komórki ustawić w jednym wierszu excela.
    Jeżeli będzie więcej wierszy to w wyniku powstanie tyle różnych dokumentów ile jest wierszy w tym excelu.
    Ale to też nie jest problem, zawsze można zrobić dodatkowy arkusz w excelu i do niego w jeden wiersz wciągnąć odpowiednie komórki z innych arkuszy.


    teraz robic wszytsko od nowa... bo nie dziala jedna rzecz... o nie...
    musi byc jakis sposob. Brakuje mi juz tylko tej jednej rzeczy .
    Reszta dziala super

    0
  • #26 21 Sty 2015 14:19
    -psiak-
    Poziom 32  

    Całość zrobisz w kilka minut, a działać będzie znacznie lepiej i na 100% bezbłędnie ponieważ dużo osób z tego korzysta.

    Jeżeli naprawisz ten problem co masz to zaraz pojawi się kolejny, następnie jeszcze kolejny itp. Bezpośrednim rozwiązaniem jest przejść do ostatniej strony i powtórzyć zamianę w nagłówkach/stopkach. Ale już widzę kolejny problem, strony parzyste i nieparzyste mające różne nagłówki/stopki. A ile jest tych co nie widzę na pierwszy rzut oka?

    Więc radzę zrób to porządnie poprzez standardowy mechanizm dołączony do worda i sprawdzony poprzez miliony użytkowników.
    To naprawdę proste po dołączeniu excela jak opisano ręcznie znajdujesz co trzeba zamienić i zamieniasz na Wstaw-PoleFormularza i już - podmiana jest automagiczna jak tylko zmienisz coś w Excelu.

    0
  • #27 02 Cze 2015 17:51
    obam
    Poziom 10  

    marcinj12 napisał:
    Domyślnie wyszukuje tylko w tekście dokumentu, do nagłówka i stopki trzeba zmienić zakres przeszukiwania i powtórzyć wyszukiwanie. Zobacz ulepszoną wersję 2.0, jak to się robi...


    Witam,
    mógłby ktoś pomoc żeby jeszcze dodać jeszcze jeden przycisk żeby z tych samych danych generował inny plik lub za pomocą tego samego przycisku generować drugi plik o trochę innym np. układzie

    0
  • #28 02 Cze 2015 17:55
    marcinj12
    Poziom 40  

    Wrzuć, to co masz i opisz, co chcesz osiągnąć - może jakaś pomocna dłoń się znajdzie. ;)

    0
  • #29 03 Cze 2015 09:12
    obam
    Poziom 10  

    marcinj12 napisał:
    Wrzuć, to co masz i opisz, co chcesz osiągnąć - może jakaś pomocna dłoń się znajdzie. ;)


    Witam,
    pozwoliłem marcinj12 zaadoptować twój plik w VB ale potrzebuje trochę zmodyfikować, w załączniku co już osiągnąłem (a raczej co bezczelnie pozmieniałem :) i co jeszcze bym chciał. tj. żeby po kliknięciu przycisku tworzył również drugi plik z lista, a co najważniejsze żeby segregował po firmach i wstawiał nowe linie z nazwiskami

    A jeszcze jedno czy dało by radę zrobić żeby pliki worda generowały sie bez wpisywania "1" w kolumnie H

    0