Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA - kopiowanie danych z jednej komórki do innej zgodnie z datą

prezesedi 30 Cze 2017 20:47 1086 16
  • #1 30 Cze 2017 20:47
    prezesedi
    Poziom 8  

    Witam.

    Chciałbym stworzyć makro, które kopiowało by mi dane z jednej komórki (arkusz1) do innej (arkusz2), ale przy odpowiedniej dacie.

    Na przykładzie pliku z załącznika chodzi o to, by wybierając pracownika (Jan kowalski) i datę (01.06.2017), wynik z komórki E2 kopiowany byłby do arkusza "JAN KOWALSKI" i odpowiednio komórki B2.

    Inna sprawa, to czy makro takie może odczytywać bieżącą datę z kalendarza?

    Ktoś pomyśli, że mogę sobie przekleić dane. Jednakże mam wielu pracowników i kopiowanie każdej danej jest uciążliwe.

    Plik z danymi w załączeniu.

  • Pomocny post
    #2 01 Lip 2017 01:59
    lanzul
    Poziom 19  

    prezesedi napisał:
    ... wynik z komórki E2 kopiowany byłby do ... odpowiednio komórki B2 ...

    Nagmatwał prezes ... tam jest 'ilość' a nie 'kwota' ... ale cóż niech będzie ... dla prezesa wszystko .... :D :D :D ... przenosi i ilość i kwotę:
    Zeszyt..zip Download (12.16 kB)Punkty: 0.5 dla użytkownika

    Ps.:
    Zdjąłem prezesowi listę pracowników z 'A2', bo mi zawadzała ... :|

  • #3 06 Lip 2017 10:05
    prezesedi
    Poziom 8  

    Witam.

    Dokładnie o cos takiego mi chodziło.
    Patrząc w kod, to sam bym tego nie zrobił. Nie moja "półka" :)
    Niestety w makrach jestem początkujący.

  • #4 13 Lip 2017 10:51
    prezesedi
    Poziom 8  

    Witam ponownie.

    Makro, które napisał @lanzul jest rewelacyjne. Generalnie spełnia wszystkie moje wymagania (na dzień pisania postu).

    Zapomniałem tylko, że fajnie by było, gdyby makro mogło tworzyć kolejne kolumny z następnymi miesiącami. Niestety nie pomyślałem o tym przy zakładaniu tematu, a funkcja była by bardzo przydatna i mocno rozszerzyła by funkcję niniejszego pliku.

    Jeśli ma ktoś pomysł jak zmodyfikować makro, to chętnie skorzystam ze wskazówek.

  • Pomocny post
    #5 13 Lip 2017 17:59
    lanzul
    Poziom 19  

    prezesedi napisał:
    gdyby makro mogło tworzyć kolejne kolumny z następnymi miesiącami

    Minąłbym się z prawdą, gdybym napisał, że nie byłem przygotowany na ... "poprawki" ... :) ...
    Zeszyt1...zip Download (19.24 kB)Punkty: 0.5 dla użytkownika

    Uwagi:
    1. Spis nazwisk na oddzielnej zakładce
    2. Do każdego nazwiska przypisany rok i miesiąc/miesiące kalendarza
    3. Wpierw tworzymy kalendarze pracowników dla przypisanych im miesięcy
    4. Makro nie jest "przygotowane" na pracownika bez przypisanych miesięcy kalendarza ... będzie pretekst do kolejnego tematu ... :) ...
    5. Makra w oddzielnych modułach, dla czytelności - chociaż powinny być w jednym
    6. W makrze wyszukującym konkretną datę dla danego pracownika, w jego arkuszu, jest "mała niewłaściwość" w działaniu, polegająca na "zbędnym" przeszukiwaniu od początku "jak leci" wszystkich miesięcy, zamiast od razu skoczyć do właściwego - jest to intencjonalne ... będzie pretekst do kolejnego tematu ... :) ...

  • #6 16 Lip 2017 22:43
    prezesedi
    Poziom 8  

    Mistrzostwo świata "i okolic" :)

    Cóż więcej można by dodać do takiego pliku?

    Jestem pełen uznania dla #lanzul i bardzo dziękuję za przygotowanie niezwykle pomocnego narzędzia.

  • #7 17 Lip 2017 03:00
    lanzul
    Poziom 19  

    prezesedi napisał:
    ... Cóż więcej można by dodać do takiego pliku?...

    Chociażby namiastkę obsługi błędów - makro zatrzymuje się, gdy trafi na pracownika bez podanych miesięcy kalendarza ...

  • #8 17 Lip 2017 10:35
    prezesedi
    Poziom 8  

    Faktycznie, makro zatrzymuje się w powyższym przypadku.

    Proszę o rozwiązanie niniejszego problemu - dodanie obsługi błędu. Tylko co w takim przypadku - makro ruszy dalej po uzupełnieniu miesięcy dla pracownika czy trzeba "zapodać" makro od początku?

    Jeszcze jedną funkcję chętnie bym zobaczył w pliku - mianowicie "RESET" do stanu początkowego. Za każdym razem gdy testuje plik, muszę go wyłączyć i włączyć ponownie.


    Z innej beczki - czy makro w kalendarzu może rozpoznawać dni wolne od pracy? Pewnie nie - za dużo tego :)
    Chodzi o jakiś komunikat w formie MSGBOX z informacją "wprowadzona data jest dniem wolnym od pracy - kontynuować? <TAK> <NIE>".


    eeeeeech - za dużo wymagam

  • #9 17 Lip 2017 17:56
    lanzul
    Poziom 19  

    prezesedi napisał:
    "RESET" do stanu początkowego

    A co jest stanem początkowym, stan występowania tylko dwóch zakładek (?), jakiś inny ?

    prezesedi napisał:
    czy makro w kalendarzu może rozpoznawać dni wolne od pracy?

    :) ... a w oparciu o co ? Pewne daty są stałe, ale są też "święta ruchome" i inne wynalazki, które wpierw trzeba zadeklarować ... ktoś musiałby pilnować, aby "coś" "gdzieś" zawsze było "wypełnione" świeżymi danymi o świętach, itd. ... trochę pracy by przy tym było ... :) ... no i nie dla każdego święto jest dniem wolnym, zależy od charakteru pracy i "szczególnych wymagań pracodawcy" ... :) ...

  • #10 17 Lip 2017 22:56
    prezesedi
    Poziom 8  

    Dokładnie - rest do stanu początkowego -> czyli do dwóch "głównych" zakładek.


    Z tymi świętami to mnie poniosło troszkę :) pobawię się ręcznie

  • Pomocny post
    #11 18 Lip 2017 05:41
    adamas_nt
    Moderator Programowanie

    prezesedi napisał:
    Z tymi świętami to mnie poniosło troszkę :) pobawię się ręcznie
    Nie przesadzaj. "Nietypowo" obliczyć trzeba tylko Wielkanoc (algorytm dostępny w Internecie), +1 mamy Dyngusa, +49 Zielone Świątki (jeśli świętujesz), + 60 Boże Ciało. Reszta świąt normalnie, wg DateSerial...

    W załączniku przykład. Zerknij do 'clsWpisz', żeby wiedzieć co z tym zrobić.

  • Pomocny post
    #12 18 Lip 2017 20:07
    lanzul
    Poziom 19  

    lanzul napisał:
    Chociażby namiastkę obsługi błędów - makro zatrzymuje się, gdy trafi na pracownika bez podanych miesięcy kalendarza ...

    prezesedi napisał:
    dodanie obsługi błędu. Tylko co w takim przypadku - makro ruszy dalej po uzupełnieniu miesięcy dla pracownika czy trzeba "zapodać" makro od początku?

    prezesedi napisał:
    chętnie bym zobaczył w pliku - mianowicie "RESET" do stanu początkowego

    Zrobione tak, że póki będzie jakakolwiek ciągłość obszaru tabeli, choćby w jednej kolumnie, to makro przebrnie przez nią od początku do końca i utworzy kalendarze tym pracownikom, którzy mają wszystkie dane tj.: nazwisko, rok i miesiąc/-e - taka 'namiastka obsługi błędów'.

    Reset jest.
    Zeszyt1_0..01.zip Download (19.35 kB)Punkty: 0.5 dla użytkownika

    Ale trzeba sobie to obejrzeć dokładnie, bo późno pisałem, na zamkniętych oczach i może się coś wykrzaczać ...
    Obok jest dziurawka tabelki którą można wykorzystać do prób.

  • #13 18 Lip 2017 20:20
    lanzul
    Poziom 19  

    adamas_nt napisał:
    prezesedi napisał:
    Z tymi świętami to mnie poniosło troszkę :) pobawię się ręcznie
    Nie przesadzaj. "Nietypowo" obliczyć trzeba tylko Wielkanoc (algorytm dostępny w Internecie), +1 mamy Dyngusa, +49 Zielone Świątki (jeśli świętujesz), + 60 Boże Ciało. Reszta świąt normalnie, wg DateSerial...
    W załączniku przykład. Zerknij do 'clsWpisz', żeby wiedzieć co z tym zrobić.

    No wreszcie również ktoś inny zainteresował się tematem ... :D ... i to jak fajnie :!: ... a tylko 'trzech króli' nie mogę 'znaoczyć wizualnie' ... :| ... (?) ... pominął kolega, czy ja niedowidzę (?) ... :|

  • Pomocny post
    #14 18 Lip 2017 20:31
    adamas_nt
    Moderator Programowanie

    lanzul napisał:
    a tylko 'trzech króli' nie mogę 'znaoczyć wizualnie
    No i wyszło, że to trzynaste święto... Gdyby świętować ciurkiem, byłoby dwa tygodnie wolnego ;)

  • #15 18 Lip 2017 21:28
    lanzul
    Poziom 19  

    adamas_nt napisał:
    lanzul napisał:
    a tylko 'trzech króli' nie mogę 'znaoczyć wizualnie
    No i wyszło, że to trzynaste święto... Gdyby świętować ciurkiem, byłoby dwa tygodnie wolnego ;)

    Piękne marzenia ... ja bym chciał rok pracowniczy taki, jak rok studencki ... 3 miechy piechotą nie chodzą ... :D ...

    Dodano po 33 [minuty]:

    adamas_nt napisał:
    trzynaste święto

    Święto świętem, ale mogą być "kłopoty" z kalendarzem w przypadku niestandardowego formatowania daty w systemie - zresztą nie tylko z nim, ale i "ze wszystkim innym" - jest to niestety "stały" objaw/wpływ "anglosaskiego" pojmowania daty, chodzi o takie daty jak np.: 07-04-2017, czy 04-07-2017.
    Jeśli formatowanie daty będzie "typowe" tj. rrrr-MM-dd, to wszystko działa "git malina", ale już dd-MM-rrrr zmieni nam miejscami dzień z miesiącem w zakresie od 1 do 12 i z kwietnia będzie się robić lipiec, a z lipca kwiecień.

  • #16 19 Lip 2017 12:16
    prezesedi
    Poziom 8  

    Witam po krótkiej nieobecności - takie zalety urlopowania się w rożnych miejscach - raz jest internet, raz go nie ma.

    Dzięki #lanzul za wprowadzenie poprawek do pliku i rozbudowanie go o kolejną funkcję.
    Dzięki #adamas_nt za stworzenie generatora dat (kalendarza) z wbudowanym info nt. dni wolnych od pracy.

    Na pewno wszystkie przedstawione działania są bardzo przydatne i ułatwiają (skracają) pracę.

    Z pliku w wbudowanymi wszystkimi opcjami zaczyna się robić mały kombajn. Ale o to właśnie mi chodziło - mieć wszystko pod ręką i "na kliknięcie". Już nie mogę się doczekać, kiedy zacznę budować na podstawie uzyskanych od Was informacji, swoje narzędzie do raportowania pracowników. Oczywiście nie śmiem sobie przypisywać żadnego sukcesu - wszystko dzięki Waszej uprzejmości i poświęceniu wolnego czasu.

    Jeśli macie jeszcze jakieś pomysły na "uatrakcyjnienie" tego, co zostało już zrobione, to proszę o informację.

    Dodano po 1 [godziny] 56 [minuty]:

    lanzul napisał:
    Święto świętem, ale mogą być "kłopoty" z kalendarzem w przypadku niestandardowego formatowania daty w systemie - zresztą nie tylko z nim, ale i "ze wszystkim innym" - jest to niestety "stały" objaw/wpływ "anglosaskiego" pojmowania daty, chodzi o takie daty jak np.: 07-04-2017, czy 04-07-2017.
    Jeśli formatowanie daty będzie "typowe" tj. rrrr-MM-dd, to wszystko działa "git malina", ale już dd-MM-rrrr zmieni nam miejscami dzień z miesiącem w zakresie od 1 do 12 i z kwietnia będzie się robić lipiec, a z lipca kwiecień.


    Generalnie nie trawię wizualnie formatu daty rrrr-mm-dd (2017-07-19). Skoro mówimy że jest 19 lipca 2017 roku - to piszmy 19-07-2017. Przecież nikt nie mówi, że jest 2017 rok, lipiec 19. :)

    Wiem wiem, w excelu zawsze jest rrrr-mm-dd a tylko formatowaniem możemy ustawić inne wyświetlanie.

    ale skoro problemem jest kolejność miesiąca i dnia (zapis anglosaski) to może format rrrr-mmm-dd (lub rrrr-mmmm-dd) wystarczy? będziemy mieć 19-lip-2017 (19-lipiec-2017)

  • #17 19 Lip 2017 13:49
    lanzul
    Poziom 19  

    prezesedi napisał:
    ... w excelu zawsze jest rrrr-mm-dd a tylko formatowaniem możemy ustawić inne wyświetlanie ...

    To zależy od ustawień systemowych w "Region i język", co najwyżej raz data będzie datą, a raz tekstem.
    Żeby z tego jakoś wybrnąć należy sprawdzić "pewnymi opcjami" ustawienia systemowe i dostosować do nich zmienne tworzące datę w kodzie procedury, przykładowo:
    a) Application.International(xlYearCode)
    b) Application.International(xl4DigitYears)
    c) Application.International(xlDateOrder)
    W każdym bądź razie jest to trochę jak zabawa w "ciuciubabkę" ...

    Ps: Spróbuj wykorzystać kod kolegi adamas_nt, jest on bowiem o tyle fajny, że pokazuje, jak można część funkcji przerzucić do okien dialogowych/formatek. Można je wywoływać zarówno przyciskami, jak i dorobić sobie jakieś nieduże menu do paska głównego danego zeszytu. A w formatkach to i rozwijane listy, i pola pod np. zdjęcia można sobie skonfigurować (co prawda to akurat to też i bezpośrednio w arkuszu można).

 
Promocja -20%
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
tme