logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Excel- Szychtownica: Jak zminimalizować długie kody VBA?

JaroFon 29 Lis 2014 15:45 5175 56
Najlepsze odpowiedzi LABEL_AI_GENERATED

Jak zminimalizować bardzo długi kod VBA w Excelu?

Najprościej skrócisz taki kod przez zastąpienie powtarzających się bloków tablicami i pętlami zamiast pisać osobną obsługę dla każdej kontrolki [#14176257] Przy wielu TextBoxach w UserFormie warto zrobić jedną wspólną procedurę dla wszystkich kontrolek i rozróżniać je przez właściwość Tag albo klasę, zamiast powielać zdarzenia _Change/_KeyDown dla każdego pola [#14188467]
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA
  • #1 14176108
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    Witam wszystkich. Właśnie pracuję nad nową wersją mojej szychtownicy. Jednak jak zwykle w moim przypadku mam problem ze zminimalizowaniem moich kodów. Napisałem parę kodów, ale są bardzo długie. Bardzo proszę kogoś o pomoc w zminimalizowaniu kodu:

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 14176257
    markoz7874
    Poziom 31  
    Posty: 1776
    Pomógł: 132
    Ocena: 208
    Użyj tablic.
  • #3 14176287
    JRV
    Specjalista - VBA, Excel
    Posty: 2724
    Pomógł: 805
    Ocena: 455
    Witaj
    A1...A30, ......G1...G30 co to jest? Objekty? (TextBox, Combo, Button, UserForm) ?
  • #4 14176376
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    Wszystko jest w oknie UserForms: A1-A31, B1-B31 to są TextBox-y, a C1-C31, D1-D31 i G1-G31 to są Label
  • Pomocny post
    #5 14176662
    JRV
    Specjalista - VBA, Excel
    Posty: 2724
    Pomógł: 805
    Ocena: 455
    Sprobuj
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #6 14176721
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    Dzięki bardzo, działa rewelacyjnie. Mam jeszcze taki kod jak poniżej. Jak można by go zminimalizować?
    'A1-A31' to TextBox, 'txtMiesiac' to ComboBox a 'lstPracownicy' to ListBox

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #7 14176761
    JRV
    Specjalista - VBA, Excel
    Posty: 2724
    Pomógł: 805
    Ocena: 455
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #8 14176810
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    Dzięki wielkie, działa wyśmienicie
  • #9 14179012
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    Witam ponownie. Mam tym razem prośbę o rozbudowę możliwości kodu. Poniższym kodem do okien Label (G1-G31) wklejam grafik jaki jest wyświetlony w oknie 'labGrafik'. Wszystko jest ok, kod działa dobrze jednak problem jest w tym że grafik jest stworzony dla różnych oddziałów, miedzy innymi dla : "Przypravy, Rubani, R-R' i jeśli będzie potrzeba to dodam inne lub rozszerzę aktualne. Poniższy kod wyświetla grafik od A-F, ale różne oddziały mają takie same symbole i tu jest problem. Potrzebuję aby kod wybrał odpowiedni symbol dla odpowiedniego oddziału. Jak to zrobić?

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Oddziały wybieram w oknie 'labGrafik1' a symbol w 'labGrafk' jak widać na poniższym screenie:
    Excel- Szychtownica: Jak zminimalizować długie kody VBA?

    ...a tak wygląda grafik w arkuszu:

    Excel- Szychtownica: Jak zminimalizować długie kody VBA?

    Wiem że najprościej było by dla każdego grafiku dać inny symbol ale nie mogę tego zrobić, symbole muszą się powtarzać dla różnych oddziałów. Jak to zrobić aby okno wybrało mi odpowiedni grafik?
  • #10 14179554
    JRV
    Specjalista - VBA, Excel
    Posty: 2724
    Pomógł: 805
    Ocena: 455
    Witaj
    Jeśli program ma zmienne z nazwy 'lab', 'lab1' tutaj wymienić na inne
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #11 14179962
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    Niestety kod nie działa. Może źle wyjaśniłem co chcę osiągnąć. Ogólnie to poniższy kod działa poprawnie. Wkleja mi grafik z symbolem jaki jest wyświetlony w oknie ComboBox (o nazwie "labGrafik"). Jednak w kolumnie "DQ" są np. dwa grafiki o symbolu "A" i wklejany jest ten pierwszy od góry, dlatego dodałem kolumnę "DP" w której wpisałem grupy, i te grupy są wyświetlone w oknie ComboBox (o nazwie "labGrafik1") i teraz poniższy kod musi w pierwszej kolejności wybrać odpowiednią grupę a potem odpowiedni symbol jakie są wyświetlane w oknie: "labGrafik1" i "labGrafik"

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #12 14180134
    JRV
    Specjalista - VBA, Excel
    Posty: 2724
    Pomógł: 805
    Ocena: 455
    Trudne bez przykładowego pliku

    Dodano po 5 [minuty]:

    sprobuj zamienic
    
    Set lab1 = Sheets(txtMiesiac.Value).Range("DP:DP").Cells
    Set lab = Sheets(txtMiesiac.Value).Range("DQ:DQ").Cells

    w kolumnie DQ zawsze musi być ostatnią wartość '-', bez względu na to, czy grupa
  • #13 14180408
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    Dla przykładu wklejam plik. Kod po części działa. Jednak nie działa na grupie "R-P" i jak chcę wprowadzić jakiegoś pracownika to wyskakuje błąd, na moim poprzednik kodzie błąd nie wyskakiwał
    Załączniki:
    • Szychtownica2015.rar (571.19 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • Pomocny post
    #14 14180474
    JRV
    Specjalista - VBA, Excel
    Posty: 2724
    Pomógł: 805
    Ocena: 455
    Kod uproszczony.
    Poniżej wszystkiech A, B, C,... w kolumnie DQ więcej umieścić "-" - koniec dane.
    W dodatku wyskakuje błąd, jeśli Wybierzesz z listy np. Przypravy E lub F

    Dodano po 1 [minuty]:

    JRV napisał:
    w kolumnie DQ zawsze musi być ostatnią wartość '-', bez względu na to, czy grupa

    lub zamienic
    While lab(rowStop + 1) <> "-" And lab(rowStop + 1) <> Empty
    rowStop = rowStop + 1
    Wend
  • #15 14180519
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    Teraz musiałem żonę puścić na komputer i jestem na fonie. Potem to sprawdzę. A jeśli chodzi o to że grupa Przyprawy ma mniej symboli od Rubami to druga kwestia i musiał bym to jakoś rozwiązać aby nie było możliwości wyboru innych symboli jak tylko takich jakie ma dana grupa, ale o ty pomyślę jak to rozwiązać.
  • #16 14180565
    JRV
    Specjalista - VBA, Excel
    Posty: 2724
    Pomógł: 805
    Ocena: 455
    Dla labGrafik1_Change() przetwarzania moj makra tak, ze
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #17 14180572
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    Ok, teraz działa poprawnie, ale jak rozwiązać błąd kiedy z listy chcę wybrać pracownika? Po kliknięciu na pracownika wyskakuje błąd w tej linijce:

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #18 14180639
    JRV
    Specjalista - VBA, Excel
    Posty: 2724
    Pomógł: 805
    Ocena: 455
    Kod: text
    Zaloguj się, aby zobaczyć kod

    wtedy
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #19 14180698
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    Dzięki wielkie, rewelacja :)
  • #20 14180725
    JRV
    Specjalista - VBA, Excel
    Posty: 2724
    Pomógł: 805
    Ocena: 455
    JaroFon napisał:
    Po kliknięciu na pracownika wyskakuje błąd w tej linijce:


    Kod Visual Basic - [rozwiń]rowStart = rowStop

    List2 - Przypravy
    12 - Przyprawy
  • #21 14180741
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    Już to zauważyłem i poprawiłem.
  • #22 14182280
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    Mam kolejne pytanie związane z moją szychtownicą. Potrzebuję aby szybko wprowadzać dniówki pracownikom dzień po dniu. Czy można zrobić coś takiego (jeśli tak to w jaki sposób) aby po wprowadzeniu dniówki do okna TextBox i kliknięciu na ENTER przeskoczyło mi automatycznie na kolejnego pracownika? Coś w stylu jak pokazałem na screenie?

    Excel- Szychtownica: Jak zminimalizować długie kody VBA?
  • #23 14183224
    clubs
    Poziom 38  
    Posty: 2219
    Pomógł: 629
    Ocena: 406
    zobacz taki myk

    Kod: text
    Zaloguj się, aby zobaczyć kod


    gdzie textbox1 to twój textbox i listbox to samo
  • #24 14183746
    JRV
    Specjalista - VBA, Excel
    Posty: 2724
    Pomógł: 805
    Ocena: 455
    te godziny i nadgodin numery mogą być dwie cyfry (np. 12) lub jest zawsze jedna cyfra?

    Dodano po 3 [minuty]:

    Można użyć zdarzenia Private Sub A1(A31...B31)_Change, ale jeśli dwa numery, a następnie dwa wydarzenia i będzie zrekompensowane 2 pozycje

    Dodano po 29 [minuty]:

    Sprobuj
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #25 14184086
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    Tak, w jednym polu TextBox mogą być wpisywane symbole np. 1; P; P1; 5,5. Wszystkie dniówki zawsze będę wprowadzał z okna UserForm wiec kod musi działać w TextBox-ach
  • #26 14185823
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    JRV napisał:
    te godziny i nadgodin numery mogą być dwie cyfry (np. 12) lub jest zawsze jedna cyfra?

    Dodano po 3 [minuty]:

    Można użyć zdarzenia Private Sub A1(A31...B31)_Change, ale jeśli dwa numery, a następnie dwa wydarzenia i będzie zrekompensowane 2 pozycje

    Dodano po 29 [minuty]:

    Sprobuj
    Kod: text
    Zaloguj się, aby zobaczyć kod


    W żaden sposób nie potrafię zastosować Twojego kodu, kod nic kompletnie nie robi
  • #27 14185898
    JRV
    Specjalista - VBA, Excel
    Posty: 2724
    Pomógł: 805
    Ocena: 455
    Jeśli dniówki z jednego znaku, działa na przykład, że mam
  • #28 14186003
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    Ja tego jakoś nie potrafię ruszyć. Zrobiłem coś takiego:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    ...działa, ale po wprowadzeniu jednego znaku. Teraz musiałbym wymyślić coś aby można wprowadzać symbole które mają więcej jak jeden znak.
    Zastanawiam się nad tym aby do okna UserForm dodać okna Label z symbolami które mają więcej jak jeden znak i po kliknięciu na odpowiedni symbol wprowadzały by się do okna TextBox które jest aktywne (SetFocus)

    Excel- Szychtownica: Jak zminimalizować długie kody VBA?
  • #29 14186029
    clubs
    Poziom 38  
    Posty: 2219
    Pomógł: 629
    Ocena: 406
    zmień na\
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #30 14186040
    JRV
    Specjalista - VBA, Excel
    Posty: 2724
    Pomógł: 805
    Ocena: 455
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Dodano po 3 [minuty]:

    clubs napisał:
    Private Sub A1_Exit

    Jeśli po prostu przenosi wskaźnik przez okno, a następnie pracować

Podsumowanie tematu

LABEL_AI_GENERATED
W dyskusji poruszono problem minimalizacji długich kodów VBA w aplikacji Excel, szczególnie w kontekście UserForms. Użytkownik zadał pytanie dotyczące optymalizacji kodu, który zmienia kolory tła dla kontrolek na podstawie wartości w innych kontrolkach. Otrzymał sugestie dotyczące użycia tablic oraz pętli do uproszczenia kodu. W kolejnych wiadomościach omawiano również inne aspekty, takie jak weryfikacja wprowadzanych danych w TextBoxach oraz automatyzacja przechodzenia między pracownikami w ListBoxie. Użytkownicy dzielili się kodami, które poprawiały funkcjonalność, a także wskazówkami dotyczącymi obsługi błędów i optymalizacji kodu.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA