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.

Excel-przenoszenie wyszukanych umów do poszczególnych arkuszy

raddar85 11 Paź 2012 10:01 5127 50
  • #1 11 Paź 2012 10:01
    raddar85
    Poziom 9  

    Mam zapisane poszczególne rodzaje umów E/G/001/2000 oraz E/I/005/2000 które są w arkuszu ogólnym, zależy mi na tym, aby po wpisaniu kolejnej umowy do arkusza ogólnego zaczynającej sie np. E/G/.. trafiał do arkusza z "Umowy EG"
    a umowy zaczynające się na E/I/.. do "umowy EI" wraz z danymi z całego wiersza.
    Przesyłam przykład jak to powinno wyglądać( ja akurat przekopiowałem) ale chodzi o to żeby robił to automatycznie. Bardzo proszę o pomoc

    0 29
  • #2 11 Paź 2012 10:16
    marek003
    Poziom 40  

    Wiem że nie o to pytałeś ale może wystarczy zrobić autofiltr w ogólnych i w nim filtrować dane które chcesz obejrzeć.

    Jeżeli koniecznie chcesz to mieć w innych arkuszach to czy może być w arkuszu głównym jeszcze jedna kolumna/kolumny pomocnicza która będzie wyciągać te skróty umów porządkując je jeszcze?

    ewentualnie czy moga byc makra?

    Czy w arkuszach z danymi umowami jest więcej umów niż w ogólnym ???

    0
  • #3 11 Paź 2012 10:33
    raddar85
    Poziom 9  

    Witam

    1. w arkuszu nie może być więcej kolumn, jeden arkusz do odpowiednich umów np. Umowy EG (są 3 rodzaje umów to 3 arkusze)
    2. Makra może byc tylko bym prosił o prosty przekaz bo niestety jestem świeżakiem :)
    3. w arkuszach z umowami np. EG nie będzie więcej umów ponieważ suma wszystkich umów będzie w umowach ogólnych


    Dodaje że z arkusza ogólnego ma przenosić i kopiować, czyli ma pozostać oryginał w umowach ogólnych a kopia przeniesiona do "umowy EG"

    0
  • #4 11 Paź 2012 17:09
    marek003
    Poziom 40  

    No to tylko makro.
    To teraz pytanie: kiedy mają się uaktualniać dane w poszczególnych arkuszach?
    np. po wciśnięciu klawisza zatwierdź jak wprowadzisz nową umowę? Czy jakimś innym "automatem", ale automat też musi wiedzieć po jakiej twojej reakcji się włączyć?

    0
  • #5 12 Paź 2012 07:11
    raddar85
    Poziom 9  

    Wystarczy że będzie się robić to po wciśnięciu przycisku "aktualizuj"

    0
  • #6 12 Paź 2012 09:02
    marek003
    Poziom 40  

    Sory że tyle pytań ale łatwiej od razu wiedzieć o co chodzi niż napisać kod a potem go przerabiać "paręnaście" razy bo autorowi nie o to chodziło.

    Jeszcze "jedno" pytanie:

    Czy pod przyciskiem aktualizuj plik ma tworzyć/sprawdzać od początku wszystkie umowy w arkuszu ogólnym i ewentualnie korygować je w poszczególnych arkuszach?
    Czy tylko ma złapać ostatni wiersz-umowę, stwierdzić do jakiego arkusza go/ją przypisać i skopiować go tam?
    Czy może nie ostatni wiersz-umowę a ten wiersz-umowę na którym się akurat "stoi"? i wtedy makro ma odnaleść tą umowę w arkuszu szczegółowym i ja ewentualnie poprawić a jeżeli jej nie znajdzie dopisze do arkusza?

    Podpowiem że w każdym przypadku będzie inny kod wykonawczy (raz prostszy raz cięższy raz się będzie szybciej wykonywał raz dłużej) więc jak byś się mógł zdecydować.

    Bo najprościej zrobić pierwszy przypadek:
    Makro za każdym uruchomieniem przycisku kasowało by wszystkie dane w arkuszach szczegółowych. "Brałoby" arkusz ogólny w pętle for i rozdzielało by kolejne umowy na poszczególne arkusze. Tak jakby od początku budowało bazy szczegółowe. (z tych trzech przypadków średnioszybki w działaniu lub porównywalnie z ostatnim)

    Drugi może trochę trudniejszy ale też prosty i najszybszy w działaniu.
    makro bierze ostatni wiersz
    rozpoznaje do którego arkusza go skopiować
    znajduje ostatni wiersz w tym rozpoznanym arkuszu i
    kopiuje całość.

    Ostatni najbardziej skomplikowany z tych trzech (co nie oznacza ogólnego skomplikowania:) ) i chyba przy bazie w której będzie parędziesiąt umów najdłuższy w działaniu.
    Makro musiało by tu rozpoznać na której umowie(wierszu) się znajdujesz
    potem musi odnaleźć arkusz z umowami
    potem sprawdza w pętli po kolei nr umów czy już taka jest w tym arkuszu
    jeżeli znajdzie nadpisuje ten wiersz jeżeli nie kopiuje umowę na końcu

    i tyle

    0
  • #7 12 Paź 2012 09:12
    raddar85
    Poziom 9  

    Makra ma sprawdzać ostatni wiersz w umowach ogólnych po czym go skopiować i przenieść do odpowiedniej umowy na sam koniec (a ja zastosuje filtr i umowy się same poukładają), nie musi wszystkich wierszy sprawdzać, gdyż te wcześniejsze będą skopiowane i przeniesione, tak więc w umowach ogólnych będzie zbiór wszystkich umów.

    Jeszcze dodam, że udogodnieniem będzie przycisk znajdujący się w Umowach ogólnych "Aktualizuj" i po wciśnięciu skopiuje i poprzerzuca do odpowiednich umów :)

    Będę bardzo wdzięczny jak coś z tego wyjdzie :)

    0
  • #8 12 Paź 2012 14:47
    marek003
    Poziom 40  

    Na chwile obecną zrobiłem sama aktualizację (czyli kasuje dane z arkuszy innych niz ogólne i tworzy podział od początku)
    Jest też zaberzpieczenie gdybyś się pomylił w kodzie umowy i nie było by takiego arkusza
    wtedy taka umowa trafia do arkusza "inne"

    Oczywiście aby działało musisz pozwolić na włączenie makr.

    wstawianie ostatniego wiersza później bo teraz nie mama czasu

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    edit: dodałem "wprowadz" wprowadza ostatni wiersz do arkusza ale nie sprawdza czy już taki był więc można wprowadzić parę razy ostatni wiersz do bazy
    wtedy najlepiej aktualizuj i wszystko sie uporządkuje :)

    tu kod wprowadz
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #9 12 Paź 2012 17:26
    raddar85
    Poziom 9  

    Super ! Sam bym tego nie ogarnął, mam jeszcze jedno pytanie - Istnieje taka możliwość, że wpisując poprawną umowę do poprawnego arkusza kopiował też do arkusza "ogólnego" Czy można zrobić działanie obustronne ?


    Jak będzie wszystko gotowe to będę super wdzięczny !!!

    0
  • Pomocny post
    #10 12 Paź 2012 18:20
    marek003
    Poziom 40  

    Wprowadziłem zabezpieczenie żebyś dwa razy nie wprowadził tej samej umowy zarówno poprzez wprowadź jak i poprzez dodaj. Eliminuje przypadkowe powtórne naciśnięcie przycisku.
    Na marginesie
    na forum jak jesteś wdzięczny to wciskasz pod daną wypowiedzią "pomógł". :)

    0
  • #11 12 Paź 2012 20:09
    raddar85
    Poziom 9  

    Oj Pomógł wielkie dzięki, wcisnąłem "pomógł" :)

    Mam jeszcze 1 pytanie dla sprostowania całej tej pracy

    1. Czy jak wstawię w każdym arkuszu jeden wiersz więcej czy zakłóci to pracę Makra ?

    Dodano po 31 [minuty]:

    Jeszcze jedno :)

    Jak bym chciał w przyszłości dodać kolejny rodzaj umów to wystarczy w tych miejscach co są te obecne umowy dodać kolejne czy trzeba będzie więcej modyfikacji zrobić ?

    Umowy E/B
    Umowy E/G
    Umowy E/I
    Umowy D/Z
    Umowy E/P
    Umowy E/Z
    Umowy E

    0
  • #12 12 Paź 2012 22:59
    marek003
    Poziom 40  

    Tak na szybko

    Zaczne od drugiej sprawy
    Co do nowych umów ważne by, jeżeli są nowe umowy, arkusz dla tych był nazwany "Umowy XX" gdy nr umowy zaczyna się X/X.

    Jak przeanalizujesz kod makra to tam jest zmienna "kod" która określa kod umowy.
    Bieże ona pierwszy i trzeci znak numeru umowy czyli jak jest "e/m12345445" weźmie "EM" lub jak nr umowy będzie "numer12334456" weżmie "NM" i Będzie szukać arkusza o nazwie "Umowy NM". Jeżeli nie znajdzie wrzuci do arkusza inne.

    Więc wszystkie wymienione przez ciebie umowy mogą być oprócz "Umowy E" - nie spełnia warunku głównego - dwóch znaków kodu.

    Druga rzecz
    Jeżeli dodasz wiersz (pierwszy lub drugi) zakłuci to wyliczenia wpisywania danych w odpowiednie wiesze przy aktualizacji. Pozostałe wprowadź i dodaj powinny działać bez rzarzutu.

    Aby poprawic wtedy kod aktualizacji przy dodaniu jednego wiersza pierwszego lub drugiego należy w kodzie aktualizacji
    zamiast i=2 wpisać i=3
    zamiast wiersz +1 wpisać wiersz + 2
    i zmienić warunek

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    na

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #13 12 Paź 2012 23:27
    raddar85
    Poziom 9  

    Dzięki niesamowite, strasznie mi pomogłeś, trudną rzecz przekazałeś w sposób bardzo jasny. Jeszcze raz bardzo dziękuję. Pozdrawiam

    0
  • #14 15 Paź 2012 08:47
    raddar85
    Poziom 9  

    Witam mam ostatnie pytanie, mianowicie po dodaniu do którejś z umów np. EG i przejsciu do Ogólnego, jak to zrobić żeby w ogólnym odświeżyła się lista Lp. ?

    0
  • #15 15 Paź 2012 09:09
    marek003
    Poziom 40  

    Wszystko powinno być dobrze jeżeli pozbędziesz się kropki przy liczbach (a przynajmnierj przy ostatniej - największej).
    Innymi słowy jeżeli w pozycji Lp będą liczby jako liczby "moje" makro wstawiając kolejną pozycję będzie powiększać maksymalna liczbę Lp o jeden i wpisywać ją w pierwszej komórce wklejanego wiersza.
    (W kodzie makra za to odpowiada zmienna lp=.... )

    Niestety dla excela "1." itd. to tekst nie liczba dlatego moje makro tu zawodzi.
    Proponuje więc usunąć kropki i powinno dobrze działać.
    To się tyczy wszystkich arkuszy i ich Lp.

    No chyba że muszą być kropki przy liczbach Lp. Tak?

    0
  • #16 15 Paź 2012 09:47
    raddar85
    Poziom 9  

    Już wiem :) Dziękuje jeszcze raz ze swojej strony udało mi się dodać wiersz i kolejne umowy, oczywiście funkcja Dodaj Wprowadź i Aktualizuj działają !!!

    Dodano po 29 [minuty]:

    Nie wiem czemu ale jak chce nadać w pierwszym wierszu nazwę arkusza
    np. " Umowy E/G - Indywidualne" a drugim wierszu Lp. Kontrahenci. adres itd.... to gdzieś popełniam błąd i wogóle mi tego nie widzi prześle hmm i nie wiem gdzie robię źle...

    0
  • #17 15 Paź 2012 10:57
    raddar85
    Poziom 9  

    Nie wiem jak sobie z tym poradzić, żebym mógł mieć tytuł u góry poszczególnych arkuszy bo teraz cały czas mi wyskakuje Ogólny rejestr umów. pewnie coś za dużo wpisałem tylko nie wiem gdzie....

    0
  • #18 15 Paź 2012 11:12
    marek003
    Poziom 40  

    Poprawiłem trochę kod aktualizacji. Unieazleżniłem go bardziej od dodawania nowych arkuszy (chodzi o czyszczenie i autorozszerzanie)

    Ponieważ wiersz pierwszy jest inny w każdym z arkuszy trzeba było zrobić też trochę innych poprawek.

    Z wiersz + 2 też się trochę nie zrozumieliśmy, ale już wszystko działa.

    Zaznaczam że umowy E/2121... i podobne wylądują w arkuszu inne. Bo odczytany przez makro kod będzie szukał w tym przypadku arkusza z nazą "Umowy E2".
    Chyba że musi być oddzielny arkusz Umowy E to ostatecznie można dopisać wyjątek.

    0
  • #19 15 Paź 2012 11:36
    raddar85
    Poziom 9  

    A dopisał byś mi tą kolejną umowę E ?


    Pomimo tego i tak bardzo dziękuje jestem mile zaskoczony, że trafiłem na forum na człowieka który tak pomoże, jeszcze raz dziękuje !!!

    0
  • #20 15 Paź 2012 18:44
    marek003
    Poziom 40  

    Proszę bardzo.

    Tylko teraz jest trochę inna zasada nazewnictwa (excel musi rozróżniać kod jednoliterowy od dwuliterowego)
    Zauważyłem że po drugiej literze numeru umowy również jest "/" w związku z tym rozpoznanie kodu działa tak:
    Jeżeli czwartym znakiem jest "/" wtedy bierze do kodu umowy pierwszy i trzeci znak z numeru umowy czyli np. przy "abc/wrf" da kod AC a wprzypadku abcdefg"" da kod A
    Czyli jeżeli czwartym znakiem nie będzie "/" to nawet taki zapis
    E/Z12345678 da docelowo kod E i umieści ją w arkuszu Umowy E.

    W miare zrozumiale?

    0
  • #21 15 Paź 2012 19:05
    raddar85
    Poziom 9  

    Przyznam, że w miarę pomału ogarniam i muszę przyznać, że troszkę się nauczyłem przy tych lekcja.

    Dziękuję !!

    0
  • #22 18 Paź 2012 07:49
    raddar85
    Poziom 9  

    Jak w tym momencie dodać kolejny rodzaj umowy? Wcześniej w makra były wymienione umowy a teraz tego nie widzę i nie wiem gdzie wpisać kolejny rodzaj umów

    Dodano po 12 [minuty]:

    Za szybko napisałem, gamoń ze mnie wystarczy tylko dodać kolejny arkusz :) a po za tym zapomniałem o zasadzie która teraz jest mianowicie, że czyta też 4 część umowy E/G/

    0
  • #23 27 Lis 2012 08:38
    raddar85
    Poziom 9  

    Witam, mam kolejny problem mianowicie mam umowę UPE/KLEO i aneksy do tej umowy UPE/1/KLEO.... UPE/10/KLEO chcę aby ta umowa i aneksy do niej trafiały do arkusza pod nazwą "Umowy UPE" bądź wiem też że będe miał umowy GD/12/09 albo KI/kleo/pl, zależy mi na tym żeby program czytał też pierwsze 3 lub 2 pozycje nie wiem czy zrozumiale to napisałem


    Proszę o pomoc

    Dodano po 18 [minuty]:

    Mianowicie problem tylko tkwi w nazwie umowy, zgodnie z zasadą działania Makra czyta 1 i 3-ci znak umowy czyli UE a jak nazwię np. UE PSE to tego już nie rozumie i wrzuca umowy do "INNE"

    0
  • #24 27 Lis 2012 10:36
    marek003
    Poziom 40  

    raddar85 napisał:
    zgodnie z zasadą działania Makra czyta 1 i 3-ci znak umowy czyli UE a jak nazwię np. UE PSE to tego już nie rozumie i wrzuca umowy do "INNE"


    Bo dla excela wszystko musi być jasne.
    Była zasada 1 i 3 znak, więc excel się będzie tego trzymał i nie popuści (to akurat zaleta nie wada) :)

    Właśnie na tym polega kłopot z pisaniem programów, że na początku klient nie do końca wie czego chce. Później dodaje kolejne warunki i program się niepotrzebnie rozbudowuje. A później jak już będzie porządnie rozbudowany to kto przeanalizuje te wszystkie warunki by znów cos zmienić.

    No ale dobra "Klient nasz pan".


    Wcześniej brał do kodu 1 i 3 znak pod warunkiem kiedy czwartym znakiem był "/", inaczej pobierał do kodu tylko pierwszy znak.

    Ponieważ jak mówiłem wcześniej dodawanie kolejnych wyjątków mija się z celem (bo za chwile znów coś będziesz chciał zmienić)
    ZMIENIAM ZASADĘ TWORZENIA KODU (może bardziej spełni twoje wymagania i będzie bardziej uniwersalny).

    W tej chwili pobierany jest ciąg znaków do pierwszego znaku / i drugi ciąg znaków od pierwszego znaku / do drugiego znaku / i te dwa ciągi są łączone w jedno (np "Ab Cd/efG/4234") da kod "AB CDEFG".
    Jest dodatkowy warunek że jeżeli drugi ciąg jest liczbą to kod będzie sie składał tylko z pierwszego ciągu czyli np aaA/12312/asda/12 da kod: AAA (taka kompatybilność z poprzednimi wersjami) Podobnie będzie gdy nie będzie drugiego znaku / np "s2d/kk12e34" da kod S2D.
    Tak więc teraz ilość literek nie ma znaczenia ważne są za to dwa pierwsze znaki / by były (a przynajmniej jeden)

    Oczywiście jeżeli makro nie znajdzie znaku / w numerze umowy nie będzie żadnego kodu a taka umowa docelowo trafi do arkusza inne.


    To fragment odpowiedzialny za tworzenie kodu:
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    W załączeniu przykład.
    Proponuje podmienić cały tekst/kod makra w module

    Oczywiście wcześniej zrób kopię bezpieczeństwa danych bo mogłem o czymś zapomnieć.

    0
  • #25 27 Lis 2012 11:27
    raddar85
    Poziom 9  

    Bardzo przepraszam za ciągłe zmiany, ale niestety sam nie wiem jakie umowy będe miał w przyszłości, że tak powiem nie ja o tym decyduje :)

    prześle plik w którym to ja dokonałem zmian ale na zasadzie stawiania warunków exelowi (patrz kolumna U3) i końcowym wynikiem AE3 i może wtedy z kolumny AE3,4...n makra brał by wynik i przerzucał do poszczególnych kolumn zasada rozrzucania umów ta sama. Aczkolwiek widzę, że teraz jest zdecydowanie bardziej rozwinięty i myślę że nie będzie stanowił problemu.
    Cholernie dziękuję !!!

    Dodano po 7 [minuty]:

    hmm problem jest jak wchodzę na umowy EI problem excela się włącza nie wiem co jest grane

    0
  • #26 27 Lis 2012 11:31
    marek003
    Poziom 40  

    Ale co pisze?
    w jakim momencie?
    w moim przykładzie działa więc ...

    0
  • #28 27 Lis 2012 12:08
    marek003
    Poziom 40  

    Wg mnie przypadek że się uszkodził plik excela.

    I na marginesie jak wciskasz nie wysyłaj to odznacz też "Odzyskaj moją pracę ..."
    Te opcje samonaprawy excela nie są za dobre i nie bedziesz popadał w pętlę.

    Skopiuj plik jeszcze raz.

    0
  • #29 27 Lis 2012 12:36
    raddar85
    Poziom 9  

    Skopiowałem i nic nie pomogło nie wiem w czym tkwi problem ... A czy istnieje taka możliwość że na komputerze którym to robiłem zostały zapisane jakieś excelowskie ukryte pliki które nie kopiują się na pendrive ?

    0
  • #30 27 Lis 2012 13:12
    marek003
    Poziom 40  

    Przecież ten plik nie potrzebuje innych plików. Jeżeli dobrze działa na jednym powinien działać i na drugim.
    Spróbuj może zresetować kompa (może coś się dzieje z pamięcią tego komputera?)

    0