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.

VBA Excel - Numerowanie RRRR/0000 - rok/liczba na formularzu jak wykonać?

..::B::.. 20 Lip 2012 20:37 2323 13
  • #1 20 Lip 2012 20:37
    ..::B::..
    Poziom 9  

    Sprawa może wydawać sie dośc trywialna, ale nie wiem jak to rozgryźć.
    Chodzi o zrobienie nietypowego formatowania numeracji. ROK/liczba

    Czyli np.
    2012/1 --> sprawa numer 1 w 2012 roku
    2012/2 --> sprawa numer 2 w 2012 roku
    ...
    2012/167837328...
    2013/1 itd.

    Numerowanie mam zrobione, działa fajnie, ale gdzie i jak nadać warunek, aby po zmianie roku. W tym przypadku na 2013. numerowanie zaczęło się od nowa, czyli od liczby 1?
    Dodam, że numer ma się wyświetlać na UserFormie nie w komórkach arkusza, a data ma być pobierana jako data systemowa.

    Dokładniejszy opis i lepsze zrozumienie będzie możliwe po pobraniu mojego arkusza, gdzie wyraźnie widać zamysł.
    Z góry dziękuję za podpowiedzi.

    0 13
  • #2 20 Lip 2012 21:35
    adamas_nt
    Moderator Programowanie

    ..::B::.. napisał:
    data ma być pobierana jako data systemowa
    I tu jest pies pogrzebany. Zakładając, że arkusz otworzysz 1 stycznia, można porównać rok Dziś()-1 z aktualną datą i jeśli różne...

    Druga opcja, zdaje się lepsza, to zapisywać datę ostatniego otwarcia formularza, dalej jak wyżej.

    A co Ci uniemożliwia raz w roku wklepać nowe wartości? Byłoby najprościej i pod kontrolą.

    0
  • #3 20 Lip 2012 23:51
    ..::B::..
    Poziom 9  

    Rzecz w tym, że prawdopodobnie to nie ja będę pracował na tym arkuszu i nie wiem, czy ktoś będzie wiedział co i gdzie zmienić, a ze mną nie będzie miał kontaktu...
    Myślę, że dzięki Twojej podpowiedzi jestem w stanie to jakoś skleić, tylko podpowiedz proszę, jak "zapisywać datę ostatniego otwarcia formularza"? Jakie polecenie do tego użyć, lub skąd to wyciagnąć?
    A może jakieś inne spojrzenie na temat? Widziałem naocznie systemy, które tak właśnie numerowały, więc ewidentnie jest to do zrobienia. ;)
    Próbowałem z Label_change itp. Ale to nie działało poprawnie.

    0
  • #4 21 Lip 2012 00:12
    adamas_nt
    Moderator Programowanie

    Zobacz Tutaj.
    Można zapisać datę jako linię w procedurze "krzaku", która będzie służyła jedynie jej przechowywaniu. Prościej oczywiście wydzielić komórkę w arkuszu, ale licho nie śpi. Niech kogoś najdzie ochota skasować "niepotrzebną" wartość?

    0
  • #5 22 Lip 2012 20:05
    adamas_nt
    Moderator Programowanie

    I jak tam postępy?
    Z niedzielnych nudów popełniłem taki przykład (żywcem zerżnięty z linka wyżej). Zmiana numeracji jest co minutę, żeby nie trzeba było czekać do Nowego Roku ;)
    Po przetestowaniu wystarczy usunąć niepotrzebne linijki (w dwóch miejscach) i "odapostrofować" właściwe.

    P.S. Pamiętaj o

    Cytat:
    In the References dialog, scroll down to Microsoft Visual Basic for Applications Extensibility 5.3 and check that item in the list.

    0
  • #6 22 Lip 2012 22:28
    ..::B::..
    Poziom 9  

    Hej. Nie miałem zbytnio czasu na to w weekend, ale jutro się zabiorę za analizowanie i robienie postępów. Dzięki serdeczne za to co podesłałeś.
    Ogólnie widzę, że działa. Co minute zmienia pierwszy człon, tylko przy zamykaniu formularza wywala jakis błąd, zaznacza na zółto, ta linię:

    Code:
     Set VBProj = ActiveWorkbook.VBProject
    . Jutro, postaram się znaleźc odpowiedź dlaczego tak sie dzieje i poprawię wszystko pod moje wymagania.
    VBA Excel - Numerowanie RRRR/0000 - rok/liczba na formularzu jak wykonać?
    Pochwale sie wynikami lub zadam kolejne pytanie jutro wieczorem. :)

    0
  • #7 22 Lip 2012 23:37
    101pawel
    Poziom 25  

    ..::B::.. napisał:
    Numerowanie mam zrobione, działa fajnie

    Noo, mnie się to numerowanie specjalnie nie podoba, ale skoro jesteś zadowolony, pozostawiam ;)
    Co do sposobu przechowania zmiennej w której zapisano "rok" jako warunek kontynuacji numeracji, to w wątku podane zostały już te miejsca. Uważam, że najodpowiedniejszym jest sam arkusz Excela. Jeśli istnieje możliwość przypadkowego usunięcia tej danej, to w celu uniknięcia tego, Excel posiada narzędzia uniemożliwiające ochronę samej komórki jak i całego arkusza.
    Nie uważam z kolei za dobry sposób zasugerowany przez Kol. adamas_nt. Używanie procedury do tych celów jest niewłaściwe.
    Zamieszczam sposób pośredni, stosowany i popularny, - przechowywanie niektórych zmiennych w dodatkowym pliku. Procedura nie jest ani elegancka ani optymalna, ale pozwala się zorientować jak toto działa i ew. zmodyfikować wg potrzeb.
    Pozdrawiam

    0
  • #8 23 Lip 2012 18:45
    ..::B::..
    Poziom 9  

    Tez bardzo fajny sposób, tylko mnie trochę martwi ten dodatkowy plik. Ogólnie baza danych, którą próbuję zrobić bedzie działała (jeśli się uda) jako plik na dysku sieciowym, do którego będzie miało dostęp kilka osób. I nasuwa mi sie pytanie, czy odpalając bazę z różnych komputerów zawsze będzie dostęp do tego pliku, czy będzie tworzył nowy jeśli nie znajdzie tamtego, a co się z tym wiąże nadawał inna numerację? Pozatym również łatwo może zostać usunięty jako plik-śmieć...
    Czy nie bezpieczniej jest przechowywać zmienną roku normalnie w komórce arkusza? Arkuszowi nadam wartość xlSheetVeryHidden i po kłopocie. Jak myślicie?

    0
  • #9 24 Lip 2012 00:11
    101pawel
    Poziom 25  

    ..::B::.. napisał:
    Tez bardzo fajny sposób, tylko mnie trochę martwi ten dodatkowy plik.
    Ja na Twoim miejscu chyba bym się nie zamartwiał. Widziałeś pewnie jakiś program składający się a więcej niż jednego pliku?
    ..::B::.. napisał:
    Ogólnie baza danych, którą próbuję zrobić będzie działała (jeśli się uda) jako plik na dysku sieciowym, do którego będzie miało dostęp kilka osób.
    Nic z tego nie wyjdzie. Excel nie jest bazą danych, bez zbytniej przesady, równie dobrze możesz do tego celu wykorzystać Worda albo PowerPointa. Jeśli dodatkowo chcesz gromadzić jakieś dane na zdalnym serwerze, powinieneś jako minimum przeczytać co nieco o bazach danych, choćby z serii "dla opornych" ;)
    ..::B::.. napisał:
    Czy nie bezpieczniej jest przechowywać zmienną roku normalnie w komórce arkusza? Arkuszowi nadam wartość xlSheetVeryHidden i po kłopocie. Jak myślicie?
    Myślę, że kłopoty dopiero przed Tobą ;)

    0
  • #10 24 Lip 2012 00:16
    adamas_nt
    Moderator Programowanie

    ..::B::.. napisał:
    Arkuszowi nadam wartość xlSheetVeryHidden i po kłopocie
    Dołóż jeszcze ochronę arkusza (z innego pliku będzie można odczytać, ale zmienić już nie). Warto też chronić projekt VBA hasłem, żeby nikt nie mógł zmienić atrybutu Visible arkusza w edytorze i powinno być OK.

    Teraz dopiero masz wybór :)

    0
  • #11 24 Lip 2012 16:37
    101pawel
    Poziom 25  

    adamas_nt napisał:
    Dołóż jeszcze ochronę arkusza (z innego pliku będzie można odczytać, ale zmienić już nie).
    O ile hasło będzie dosyć mocne dla "usuwaczy" freewarowych, o płatnych nie wspominam.
    adamas_nt napisał:
    Warto też chronić projekt VBA hasłem, żeby nikt nie mógł zmienić atrybutu Visible arkusza w edytorze i powinno być OK.
    Tu akurat, z innego pliku, odkrycie ukrytych arkuszy pójdzie bezhasłowo czyli gładko.
    adamas_nt napisał:
    Teraz dopiero masz wybór :)
    Dodaję: ukrycie za pomocą białej czcionki na białym tle komórki, przykrycie komórki z chronioną zmienną obrazkiem lub ukrycie jej w tekście pola tekstowego ;)
    Żarty żartami, kolego ..::B::.. napisz cały ten program od A do Z, przetestuj i jak będziesz gotowy ponownie napisz na grupę. Zapewniam Cię, że wraz z kolegami wymyślimy najlepszy sposób przechowywania przez 365 (366) dni w roku zmienianej corocznie zmiennej ;)
    Pozdrawiam

    0
  • #12 24 Lip 2012 17:22
    ..::B::..
    Poziom 9  

    Jejku... Ale straszycie. Jakby to nie wiadomo kto miał się włamać po ten plik i na siłę próbował w nim zamieszać... Myślę, że nikt nic nie będzie specjalnie psuł. A przeciwko psuciu przypadkowemu jakoś się zabezpieczę.

    Cytat:
    Cytat:
    ..::B::.. napisał:
    Ogólnie baza danych, którą próbuję zrobić będzie działała (jeśli się uda) jako plik na dysku sieciowym, do którego będzie miało dostęp kilka osób.


    Nic z tego nie wyjdzie. Excel nie jest bazą danych, bez zbytniej przesady, równie dobrze możesz do tego celu wykorzystać Worda albo PowerPointa. Jeśli dodatkowo chcesz gromadzić jakieś dane na zdalnym serwerze, powinieneś jako minimum przeczytać co nieco o bazach danych, choćby z serii "dla opornych"


    Możesz rozwinąć powyższą myśl? (linki dla opornych mile widziane) Czemu Excel nie może służyć do gromadzenia (nie tak dużej) ilości danych?? Myślę, że rocznie będzie się gromadziło około 250-500 wierszy ( z tendencją malejącą) x 13 kolumn. Przecież dla arkusza, to nie dużo. Nie jestem informatykiem ani programistą, ale też cudów się nie spodziewam. Pozatym wiara w moje i Excela możliwości mówi mi, że coś z tego wyjśc może...

    0
  • #13 24 Lip 2012 19:13
    adamas_nt
    Moderator Programowanie

    ..::B::.. napisał:
    Pozatym wiara w moje i Excela możliwości mówi mi, że coś z tego wyjśc może...
    Tu zgadzam się w 100%.

    Nikt nie miał zamiaru Cię straszyć. Po prostu, niektórzy Userzy są "silnie utalentowani" i zasada: "Lepiej jedno nadmiarowe zabezpieczenie więcej", wierz mi, jest w wielu przypadkach baaardzo na miejscu.

    Oczywiście, jak pisze kolega 101pawel, na wszystko jest sposób. Jeśli ktoś celowo chce zniszczyć/wykraść dane, to nic nie poradzisz. Tu chroni Cię Prawo i... kopia zapasowa.

    1
  • #14 25 Lip 2012 00:02
    101pawel
    Poziom 25  

    ..::B::.. napisał:
    Możesz rozwinąć powyższą myśl? (linki dla opornych mile widziane) Czemu Excel nie może służyć do gromadzenia (nie tak dużej) ilości danych?? Myślę, że rocznie będzie się gromadziło około 250-500 wierszy ( z tendencją malejącą) x 13 kolumn. Przecież dla arkusza, to nie dużo. Nie jestem informatykiem ani programistą, ale też cudów się nie spodziewam. Poza tym wiara w moje i Excela możliwości mówi mi, że coś z tego wyjść może...
    Nic nie stoi na przeszkodzie, byś w Excelu zapisywał wraz z współpracownikami kolejne komórki i całe arkusze. Aktualnie korzystam dla celów służbowych z arkusza zawierającego trzydzieści parę arkuszy zapisanych ok. 250 tysiącami komórek, z czego 90% z nich zawiera formuły. Nie jest to jakiś rekord, Excel poradzi sobie z wielokrotnie większą ich liczbą. Poradzi sobie w tym sensie, że sprawnie POLICZY lub PRZELICZY niewyobrażalną liczbę danych i na dodatek się nie pomyli. Do tego został stworzony. Do gromadzenia danych - nie w wierszach i kolumnach, ale w rekordach i ich polach służy inne narzędzie: baza danych. Ma absolutnie inne niż arkusz kalkulacyjny właściwości; nie potrafi wykonać najprostszego działania arytmetycznego, natomiast w sposób doskonały i bezpieczny zapisuje dane i jednocześnie niezwykle szybko odpowiada na formułowane zapytania. Wpisałeś kiedyś słowo lub słowa w Google? Ile czekałeś na odpowiedź? By nie nudzić, nie mogę jak o piszesz rozwinąć tematu, jest zbyt obszerny. Wracając do twoich zamierzeń, jeśli chcesz rejestrować coś w Excelu, to OK, będzie to jednak raczej forma notatnika niż bazy danych. No i nie da się tego obsłużyć w sieci. Namiastką może być praca grupowa nad tym plikiem, niestety nic więcej.
    Pozdrawiam

    0