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 danych z EditBoxów do odpowiednich komórek

kefler 02 Kwi 2012 18:56 1532 6
  • #1 02 Kwi 2012 18:56
    kefler
    Poziom 2  

    Witam
    Zajmuję się obecnie tworzeniem grafiku zatrudnienia. System jest dwuzmianowy. Wszystko będzie jeszcze rozbudowane, jednak stworzyłem już działające podstawy. Zatrzymałem się w trzecim UserForm3, gdzie należy wpisać dni w jakich pracownicy nie mogą przybyć do pracy, czyli ich wolne. Nie wiem zupełnie jak napisać program by odpowienie wartości z TextBox13 na podstawie ich zawartości same lokowały się w komórkach D4:AH4. Tabelka w UserForm3 ma taką formę:

    IMIĘ I NAZWISKO.....DNI WOLNE.......FORMA ETATU
    Jan Kowalski............4D, 5DN, 29N....Cały etat
    itd.

    gdzie 4D onacza 4. Dzień miesiaca, 5DN oznacza 5. Dobę miesiąca, a 29N oznacza 29. Noc miesiąca.

    Łopatologicznie robiąc: jeśli w TextBox13 (w UserForm3) wpiszę "4D, 5D, 5N, 29N" to po kliknięciu OK w aktywnym arkuszu w komórkach:
    G4 pojawi się wpis "Wd" (Wolnydzień - przyp. autora)
    G5 pojawi się wpis "W" (Wolny - jako cała doba wolna dla pracownika)
    AE4 pojawi się wpis Wn (Wolnanoc - przyp. autora)

    Program "czytałby" więc pierwszą cyfrę, dopasowywałby ją do odpowiedniego dnia w arkuszu, a na podstawie drugiego znaku(litery) wpisywałby w odnalezioną komórkę odpowiednią wartość: Wd (wolny dzień), W (wolna cała doba), Wn (wolna noc). Wszystko dodałem w załączniku. Pozdrawiam, mam nadzieję że nikt nie zapomniał VB aż tak :D

    0 6
  • #2 02 Kwi 2012 22:33
    adamas_nt
    Moderator Programowanie

    Moje spostrzeżenia:
    Przetestowałem i o wiele szybciej wychodzi mi odszukanie nazwiska i wpisywanie informacji bezpośrednio w grafik, niż za pośrednictwem formularza.
    Jakoś nie mam przekonania do rozwiązania w tej formie. Bardzo łatwo o błędy i musiałbyś porządnie przed nimi zabezpieczyć. Byłoby warto, gdyby formularz ułatwiał pracę, a po mojemu tego nie robi...
    W arkuszu możesz zastosować poprawność danych dla symboli dni wolnych. O wiele prościej skorygować, czy uzupełnić listę niż grzebać w makrach.

    Miałoby to sens gdyby chodziło o sporą liczbę pracowników, filtrowaną listę z wyborem, etc.

    Nie chcę Cię zniechęcać. Widać, że włożyłeś już sporo pracy, ale przemyśl sprawę.

    0
  • #3 03 Kwi 2012 00:23
    kefler
    Poziom 2  

    @adamas_nt, dzięki za spostrzeżenia, jednak taki grafik z formularzem ma czasem jednak jakiś sens. Jego przeznaczeniem jest użytkowanie przez bardzo amatorską osobę(dyrektorkę DPSu), która korzysta już z pewnego systemu wypełniania grafików, tyle że jeszcze ręcznego. A takie formularzowe wprowadzenie do Excela byłoby jak na lekarstwo.

    Program będę wciąż rozwijał, choć przyznam @adamas_nt, że sporo rzeczy rzeczywiście jest pod górkę. Gdybyście zauważyli jak można zamienić komendy na prostsze, czekam na spostrzeżenia. A póki co cały wieczór wałkuję z tym odpowiednim kopiowaniem danych z EditBoxów do komórek...same błędy. W praktyce program na oko nie będzie zbyt długi, przypisanie działania i sposób wpisywania w komórki i zamykamy temat w tej sprawie

    0
  • Pomocny post
    #4 03 Kwi 2012 08:25
    adamas_nt
    Moderator Programowanie

    kefler napisał:
    Jego przeznaczeniem jest użytkowanie przez bardzo amatorską osobę
    Już podpowiadam. Dla w/w osoby: "4D, 5D, 5N, 29N" ; "4d ,5d ,5n ,29n" ; "4D,5D,5N,29N" ; "4D. 5D. 5N .29N" w zasadzie wygląda tak samo. O pomyleniu literki, bo przecież można się pomylić, nawet nie wspomnę. Jeśli 15 razy dziennie nie chcesz słyszeć: "Panie kefler! Ten pana program znowu nie działa!", to zanim zaczniesz wypełniać grafik musisz zrobić porządek ze stringiem.

    Kolejność działania kodu (po mojemu):
    1. Usuwasz wszystkie spacje: Replace(string, " ", "")
    2. Podstawiasz przecinki w miejsce ew. kropek j.w
    3. Zamieniasz małe litery na duże Ucase
    4. Rozbijasz ciąg i zapisujesz w tablicy: tablica=Split(string, ",")

    Jeśli długość >3, to znaczy że ktoś wpisał "4D 5D 5N 29N" (przerywasz i MsgBox'em po oczach, lub dopisz sobie pkt. 5 i 6 wyżej)
    Pierwszy znak z prawej każdego elementu tablicy, to symbol zmiany.
    Reszta (długość -1) to dzień miesiąca.

    Dalej to cała kupa If'ów w pętli.
    Wpisywałbym jak leci sprawdzając najpierw komórkę docelową.
    1. Jeśli jest pusta, wpisujesz
    2. Jeśli jest Wn, a mamy D, znaczy że ktoś dobrał sobie pół dnia i zmieniamy na W (lub w tablicy mamy Np 5D i 5N w dowolnej kolejności)
    3. Odwrotnie tak samo Wd, N > W
    4. Jeśli jest to samo, nie ma problemu (ktoś zapomniał, że wpisywał to rano)

    0
  • #5 03 Kwi 2012 21:31
    kefler
    Poziom 2  

    Świetnie @adamas_nt, jednak trochę za bardzo wybiegłeś w przyszłość z błędami. Ich obsługę zamiaruję dodać po pierwszej działającej wersji programu, wtedy jest już prościej ;) Z pewnością sprawdzą się punkty Twojego planu programu:
    - usuwanie wszystkich spacji za pomocą replace'a
    - rozbicie ciągu i zapis do tablicy oraz finalnie do komórek(z tablicami wydaje się być nieco trudno)

    Mógłbyś określić mniej wiecej zapis kodu w tych dwóch punktach? Męczę już trzeci dzień z różnych stron i error :?: Oczywiście za dotychczasowe leci rep+, pomogło, VBA mniej boli

    0
  • Pomocny post
    #6 03 Kwi 2012 23:08
    adamas_nt
    Moderator Programowanie

    Coś tam naskrobałem. Zauważ, że jeśli kontrolki są nazwane, wszystko idzie łatwiej.
    Ustaw sobie kolejność tabulatora. Zrobiłem tylko pierwsze cztery.

    0
  • #7 04 Kwi 2012 20:56
    kefler
    Poziom 2  

    O to chodziło! Sprawdzę jeszcze działanie i przechodzę dalej, do rozbudowy i konkretnej obsługi błędów w każdym userformie. Tablice to jeszcze dla mnie czarna magia, ale przeanalizuje to.. Dzięki @adamas_nt . Gdyby ktoś miał chętkę na wynikowy program jestem w stanie udostępnić większą część(bez danych osobowych pielęgniarek :D )

    0