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 2007 - przycisk lub wpis sumujący komórki i czyszczący komórki

LeBmo 08 Gru 2014 18:40 1428 13
  • #1 08 Gru 2014 18:40
    LeBmo
    Poziom 14  

    Dzień dobry.

    Czy trudne jest zrobienie makra które po wciśnięciu przycisku "DODAJ" doda wartości dwóch komórek do trzeciej, a następnie wyczyści zawartość jednej z nich i czterech innych?

    Chodzi o to, że w komórkach "L" jest obliczana wartość na podstawie komórek H,I,J,K tego samego wiersza. W komórce "M" wartość czasem jest wpisywana z ręki, a czasem nic tam nie ma. Na komórki "O" nie zwracajcie uwagi
    Wciskając przycisk w komórce "P" wartość "M" i "L" dodałyby się do "N" i zaraz po tej procedurze komórki H,I,J,K i M zostałyby oczyszczone (puste, bez zmiany formatowania).
    Chciałbym to wykorzystywać w wielu miejscach i kopiować/powielać całe wiersze dlatego taż nie wiem czy nie lepsza byłaby możliwość wpisania w komórkę "P" znaku "+" i wcisnąć Enter zamiast robić przycisk? Po prostu nie wiem czy od tak można kopiować przycisk z wierszami.

    VBA - Excel 2007 - przycisk lub wpis sumujący komórki i czyszczący komórki

    0 13
  • #2 08 Gru 2014 22:01
    adamas_nt
    Moderator Programowanie

    Ad.2 Kopiowanie wiersza z przysikiem, to żaden problem. Problemy zaczynaja sie przy usuwaniu wierszy, bo przycisk zostaje i zwykle nakłada się na następny. Po jakimś czasie może być ich mnóstwo "na kupce"

    Ad.1 Napisać makro wg Twojego opisu, to, na oko, żaden problem. Sugerowałbym którąś z procedur zdarzeniowych arkusza (Np Change dla kolumn H, I, J, K, M, gdzie L może również być obliczana w VBA)

    0
  • #3 08 Gru 2014 22:17
    LeBmo
    Poziom 14  

    Może faktycznie lepiej by było bez przycisku w takim razie ale wtedy ten "+" musiałby również znikać.

    "L" bym raczej zostawił chyba, że z jakiegoś powodu powinno być w makrze.

    0
  • Pomocny post
    #4 08 Gru 2014 22:34
    adamas_nt
    Moderator Programowanie

    Oj, bo nie doczytałem. Chcesz usuwać dane z H,I,J,K, zostawiając formułę w L.
    To wykorzystaj SelectionChange w kolumnie P, gdzie widać tekst "Dodaj".

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #5 09 Gru 2014 04:25
    PRL
    Poziom 33  

    Dostosuj sobie tylko indeks kolumny:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Dla wygody możesz też tak:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #6 09 Gru 2014 08:38
    LeBmo
    Poziom 14  

    Indeksy kolumn są idealne:
    reakcja na P=16
    suma L=12 + M=13 w N=14
    usunięcie H=8 do K=11 oraz M=13

    Zastanawiam się co robię nie tak skoro nie ma reakcji. Mam nadzieję, że dobrze robię kopiując kod do nowego modułu, zapisując jako XLSM i włączając obsługę makr? Chyba coś jeszcze musiałem pominąć.

    0
  • Pomocny post
    #7 09 Gru 2014 09:06
    PRL
    Poziom 33  

    Cytat:
    Mam nadzieję, że dobrze robię kopiując kod do nowego modułu


    No właśnie źle.
    W edytorze VBA, w drzewku z arkuszami, kliknij 2x właściwy arkusz i dopiero teraz wklej ten poniższy kod.
    Następnie klikaj dwukrotnie w odpowiednie wiersze w kolumnie P.

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #8 09 Gru 2014 18:13
    LeBmo
    Poziom 14  

    Dziękuję Wam bardzo za pomoc.

    A zastanawiając się gdzie to wpisać przeczytałem, że Sub jest globalny, więc wymyśliłem, że pewnie w module i kucha.

    Ten pomysł z podwójnym kliknięciem jest niesamowity - idealny do tego!
    Zmieniłem jedną linijkę żebym mógł ciągle dodawać do "N", bo zapomniałem uszczegółowić, że chciałem wpisywać i dodawać, wpisywać i dodawać, wpisywać... itd.
    Cells(w, 14) = Cells(w, 14) + Cells(w, 12) + Cells(w, 13)

    P.S.
    Przy tej okazji zauważyłem, że Ctrl+z nie działa po wykonaniu makra. Dla mnie ciekawostka, na którą trzeba uważać ale nie przeszkadza mi to - jest pięknie!

    0
  • #9 09 Gru 2014 18:20
    PRL
    Poziom 33  

    Cytat:
    A zastanawiając się gdzie to wpisać przeczytałem, że Sub jest globalny, więc wymyśliłem, że pewnie w module i kucha.


    To nie tak.
    Procedury (Sub) i funkcje (Function), które znajdują się w module skoroszytu są dostępne wszędzie.

    Procedury i funkcje znajdujące się w module arkusza są dostępne tylko w tym arkuszu.

    Otwórz Excela. Alt+F11. 2x klik w drzewko 'Arkusz1'. W okienku edytora po prawej stronie pojawi się 'General' - rozwiń i wybierz 'WorkSheet'.
    Rozwiń listę wyboru z prawej strony - zobaczysz zestaw funkcji wywoływanych w tych zdarzeniach.
    To wszystko.

    P.S.
    Cytat:
    Ten pomysł z podwójnym kliknięciem jest niesamowity

    Też to zauważyłem, jak zainstalowałem Wimndows 3.1;)

    0
  • #10 10 Gru 2014 09:01
    LeBmo
    Poziom 14  

    Cytat:
    Rozwiń listę wyboru z prawej strony - zobaczysz zestaw funkcji wywoływanych w tych zdarzeniach.

    Jest tam kilka funkcji. Między innymi Calculate, change, Dectivate ale nie widać ich w tych kilku skopiowanych od Ciebie linijkach.
    Czy to znaczy, że Calculate zostało i tak użyte, ponieważ są tam wykorzystane sumowanie, a np. Change , bo dokonują one zmian w komórkach opróżniając je?

    Cytat:
    Też to zauważyłem, jak zainstalowałem Wimndows 3.1

    Dobre!

    0
  • Pomocny post
    #11 10 Gru 2014 09:14
    PRL
    Poziom 33  

    Cytat:
    Jest tam kilka funkcji. Między innymi Calculate, change, Dectivate ale nie widać ich w tych kilku skopiowanych od Ciebie linijkach.


    Musisz Kolego pocztrać sobie trochę o VBA w Excelu. Proponuję wygooglać kurs VBA - jest tego mnóstwo.

    Te 'kilka funkcji', to zdarzenia arkusza. Działa to tak, że jak np. w kodzie którym napisałem, jeżeli nastąpi podwójne kliknięcie, to wykonany zostanie kod ujęty w funkcji 'Worksheet_BeforeDoubleClick'.

    Cytat:
    ale nie widać ich w tych kilku skopiowanych od Ciebie linijkach.


    No nie widać, bo te moje kilka linijek robi to, co chciałeś.;)

    0
  • #12 10 Gru 2014 13:27
    LeBmo
    Poziom 14  

    Podoba mi się!
    Na podstawie Twoich linijek i Helpa dodałem w tym samym Sub po End If jeszcze coś, co wcześniej musiałem wpisywać z ręki lub za pomocą skrótów Ctrl+; i Shift+Ctrl+; , a teraz klikam dwa razy i jest data oraz godzina.

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #13 10 Gru 2014 13:41
    PRL
    Poziom 33  

    Cytat:
    Podoba mi się!


    Mi też podoba się Twój zapał do poznawania nowego, wyręczania siebie przez maszynę i ogólnie, że Ci się chce.:)

    0
  • #14 29 Gru 2014 10:40
    LeBmo
    Poziom 14  

    Pięknie to teraz działa.
    Jeszcze raz dziękuję za pomoc w rozwiązaniu problemu.
    Temat zamykam.

    0