X

MS EXCEL VBA - Wstawienie do komórki opcji wyświetlania kalendarza

Vansen1 17 Mar 2014 22:46
  • #1 17 Mar 2014 22:46
    Vansen1
    Level 9  
    Helpful post? (0)
    Witam...

    Szukając tematu związanego z kalendarzem dla Excela, znalazłem na naszym forum
    post excel VBA - Microsoft MonthView Control - wstawianie kalendarza jak to zrobić??
    z dnia 29 Grudnia 2012

    Autorem tej perełki [kalendarza], jak wynika z postu, jest użytkownik marcinj12.

    Pozwoliłem sobie na wykorzystanie tego kalendarza do własnych potrzeb.
    Oczywiście mam jednak z nim związane pytania:
    1. Kalendarz autorstwa marcinj12, do swojej aktywacji wykorzystuje ikonę przycisku [Button].
    2. Wybraną w kalendarzu datę wstawia do jednej określonej komórki.
    3. Po wybraniu daty i wstawieniu jej do komórki wyświetla komunikat o tym jaką datę wybrano.

    Jak mogę dostosować ten kalendarz do swoich potrzeb.

    Ad 1.
    Chcę żeby aktywacja opcji wyboru kalendarza, następowała po kliknięciu na komórkę w kolumnach D i K.
    Żeby wyświetlała się wówczas przy niej mała ikona strzałki, jak przy rozwijanej liście.
    MS EXCEL VBA - Wstawienie do komórki opcji wyświetlania kalendarza MS EXCEL VBA - Wstawienie do komórki opcji wyświetlania kalendarza

    Dopiero po kliknięciu na nią aktywował się kalendarz (wyśrodkowany względem okna arkusza)
    MS EXCEL VBA - Wstawienie do komórki opcji wyświetlania kalendarza

    Wstawiona data do komórki w kolumnie D
    MS EXCEL VBA - Wstawienie do komórki opcji wyświetlania kalendarza

    I taka sama czynność dla komórek kolumny K

    Ad 3.
    Żeby nie wyświetlał się komunikat o tym jaką wybrano datę.
    Chcę natomiast żeby wyświetlał się za to komunikat o błędzie, otóż:
    - data w kolumnie D nie może być późniejsza od daty w kolumnie K
    MS EXCEL VBA - Wstawienie do komórki opcji wyświetlania kalendarza

    i odwrotnie

    - data w kolumnie K nie może być wcześniejsza od daty w kolumnie D
    MS EXCEL VBA - Wstawienie do komórki opcji wyświetlania kalendarza

    Komunikaty (wyśrodkowane względem okna arkusza)

    Ściślej rzecz ujmując:
    - data w kolumnie D oznacza czas zatrzymania urządzenia,
    - natomiast data w kolumnie K oznacza czas jej uruchomienia.

    Proszę o pomoc...
    -------------------------------------------------------
    W załączeniu:
    - Plik opisywanego arkusza (Format - MS EXCEL 2010 PL)
    - Kalendarz autorstwa marcinj12
    - Pliki graficzne - screeny
  • #2 17 Mar 2014 23:18
    marcinj12
    Level 40  
    Helpful post? (0)
    O proszę, miło wiedzieć, że mój kalendarz żyje i ma się dobrze ;)

    Odpowiadając na Twoje pytania:
    Jako że jest to forma i makro, po pierwsze Twój plik musi mieć rozszerzenie .xlsm
    Musisz do niego zaimportować formę kalendarza z mojego pliku - w VBA opcją ExportFile oraz Import File. To na początek.

    Ad. 1. i 2.
    Tu się trochę rozmijamy - może się pokazywać po kliknięciu komórki [dokładniej: po zmianie selekcji], albo po wyborze czegoś z listy, którą sobie uprzednio utworzysz.
    Jeżeli przy zmianie selekcji, można wykorzystać zdarzenie SelectionChanged.
    Czyli w Arkusz1 dostaw kod:
    Code: vb
    Log in, to see the code


    Okno zdaje się jest wycetrowane względem dokumentu, natomiast ustawienia możesz zawsze zmienić we właściwościach [okienko Properties] formy ustawiając StartUpPosition.

    Ad 3. Wystarczy dodać kilka warunków If sprawdzających, czy wszystko gra:
    Code: vb
    Log in, to see the code
  • #3 18 Mar 2014 23:16
    Vansen1
    Level 9  
    Topic author Helpful post? (0)
    Na YouTube znalazłem film z odpowiedzią na część mojego pytania.
    Link jest TUTAJ .

    Film pokazuje krok po kroku, jak skopiować i wstawić makro do innego arkusza,
    oraz jak sformatować komórki by wyświetlał się właściwy format daty.

    Gdy człowiek ogląda na filmie jak robią to inni, to wszystko zdaje się być takie proste.
    Ale tylko się zdaje, wiedza jednak kosztuje...

    marcinj12 nie obraź się ale pozwoliłem sobie, do swojego arkusza wstawić kalendarz podobny do twojego.
    Z linku znalezionego w tym filmie
    - link do postu TUTAJ
    - link do pliku TUTAJ

    Twój kalendarz rzeczywiście jest wycentrowany, względem okna arkusza.
    Moje niedopatrzenie - :oops:

    Napotkałem jednak na problem.
    Po wklejeniu Twojego drugiego kodu, dotyczącego wyświetlania komunikatów o wprowadzeniu błędnej daty.

    Wkleiłem go do swojego arkusza, zaraz za kodem kalendarza.
    Od tamtej pory, próba pracy z arkuszem kończy się wyświetleniem takiego komunikatu:
    MS EXCEL VBA - Wstawienie do komórki opcji wyświetlania kalendarza

    i przeniesieniem nas do okna edytora VBA.

    Co zrobiłem źle... :?:

    W załączeniu przesyłam:
    - Plik arkusza (Plik_1_kod_VB.xlsm) z kodem kalendarza
    - Plik arkusza (Plik_2_kody_VB.xlsm) z kodem kalendarza oraz Twoim kodem
    - Kalendarz z podanego linku w filmie
    - Screen komunikatu
  • #4 19 Mar 2014 00:02
    marcinj12
    Level 40  
    Helpful post? (0)
    Masz 2x zdarzenie Worksheet_SelectionChange - a może być tylko jedno. Musisz połączyć te dwa kody, żeby dawały oczekiwany rezultat.
  • #5 19 Mar 2014 10:13
    Vansen2
    Level 2  
    Helpful post? (0)
    Najpierw zamieniłem w kodzie nazwę formuł kalendarzy:
    z nazwy Kalendarz
    na obecną nazwę CalendarFrm

    Tak wyglądał kod kalendarza oraz komunikatów o błędzie daty,
    przed jego połączeniem.

    Code: vb
    Log in, to see the code


    Tak wygląda teraz po połączeniu w jeden kod.
    Niestety nadal nie działa, coś musiałem jeszcze przeoczyć.

    Code: vb
    Log in, to see the code


    Zerknijcie proszę swoim doświadczonym okiem, gdzie zrobiłem babola
  • #6 19 Mar 2014 19:48
    marcinj12
    Level 40  
    Helpful post? (+1)
    Bo tych kodów nie można tak po prostu połączyć - mój kalendarz wykorzystuje inne metody niż ten, który znalazłeś. On wstawia datę do arkusza już na poziomie formatki, więc w zasadzie musisz go przerobić tak, żeby to on sprawdzał poprawność kolumn... Zresztą, nie silę się na tłumaczenia, w załączniku działający przykład, podejrzyj sobie.

    PS. adamas_nt wrzucił poniekąd słuszną uwagę, którą nie wiedzieć czemu już usunął, ale zdążyłem przeczytać ;)

    Rzeczywiście, zamiast Worksheet_SelectionChange można wstawić całe zdarzenie w Worksheet_BeforeDoubleClick - wtedy kalendarz będzie się pokazywał po podwójnym kliknięciu. Tu się zgodzę, wybór należy do autora :)
  Search 4 million + Products
Browse Products