Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA Excel - zapisywanie edycji komórki w ustalone miejsce w innym arkuszu.

Kasia_2 27 Maj 2017 13:23 1410 24
  • #1 27 Maj 2017 13:23
    Kasia_2
    Poziom 8  

    Witam,

    Bardzo proszę o pomoc, bo nie mogę sobie poradzić z tym zadaniem :)
    Mam dwa arkusze Form i log. W Form wpisuje dane o różnych porach dnia i po zapisaniu w arkuszu log wpisuje się godzina modyfikacji. Póki co u mnie wygląda to tak, że jak wpisze wartość rano, to godzina modyfikacji wpisuje się 4 razy, a ma się wpisać tylko raz w odpowiednim miejscu w logu.
    Dołączam przykład, bo może będzie bardziej czytelny i z góry dziekuje za wszelkie podpowiedzi.

  • #2 27 Maj 2017 15:58
    JRV
    Specjalista - VBA, Excel

    Witaj
    Cytat:

    Cytat:
    If Application.CountA(Range("noc")) > "" Then

    Range("noc") jest tylko jedna komorka, wystarczy
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Cytat:
    For Each c In Range("noc").Cells

    Jeszcze raz - Range("noc") jest tylko jedna komorka
    Wtedy
    Kod: vb
    Zaloguj się, aby zobaczyć kod

  • #3 27 Maj 2017 16:43
    Kasia_2
    Poziom 8  

    Witaj,

    Masz rację, chciałam dopasować kod z innego formularza. ;)
    A mógłbyś mi jeszcze zdradzić, gdzie wstawić Offset, aby komórka z Form "noc" zwracała czas w log w kolumnie noc i inne rano w kolumnie rano itd? :)

  • #4 27 Maj 2017 17:46
    JRV
    Specjalista - VBA, Excel

    Nie do konca rozumie
    Zrob recznie, jak to powinno wyglądać( przykład bez makro)

  • #5 27 Maj 2017 18:16
    Kasia_2
    Poziom 8  

    hmm ja załączyłam formularz, ale dobrze postaram sie inaczej.

    1. Arkusz o nazwie FORM

    w tym arkuszu uzupełnia się 4 komórki: C7 (noc), N7 (rano), Y7 (południe), AJ (wieczór)

    2. Arkusz o nazwie LOG

    w tym arkuszu są 4 kolumny noc, rano, południe i wieczór.
    ------------------------------------------------------------------------
    I teraz jeśli ktoś wpisze w Arkuszu FORM w komórce C7 (noc) jakąś wartość, to jak ją powiązać aby w Arkuszu LOG w kolumnie noc pojawiła sie godzina?

  • Pomocny post
    #6 27 Maj 2017 18:57
    JRV
    Specjalista - VBA, Excel

    JRV napisał:
    Wtedy
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Analogicznie dla rano .Cells(r + Cells(2, 1), 3).Value = Now
    południe .Cells(r + Cells(2, 1), 4).Value = Now
    i wieczór .Cells(r + Cells(2, 1), 5).Value = Now

    Dodano po 2 [minuty]:

    To było w poście # 2

  • #7 27 Maj 2017 19:32
    lanzul
    Poziom 20  

    Witam,
    A nie jest tu istotne, że za każdym razem bez względu na porę dnia kiedy uruchomimy makro, zawsze będzie się wpisywać w arkuszu 'log' bieżący stempel daty, nawet jeśli już raz coś w komórce zaistniało ?
    Jeśli dajmy na to, uruchomię makro w nocy, to pojawi się "obecne, nocne" "teraz" (Now()), jeśli potem po paru godzinach, rano, uruchomię makro ponownie, to poprzednie "teraz", to 'nocne', zostanie nadpisane nowym "teraz" i stara informacja ulegnie zatarciu ... :| ...

    Ps:
    ... :) ... to co kolega JRV tak ładnie Kasi_2 popoprawiał, można zrobić odrobinę krócej, poprzez jedynie 4-ry linijki z warunkiem "IF" i wykorzystując nr dnia jako wskaźnik wierszy dla arkusza 'log'

  • #8 28 Maj 2017 11:37
    Kasia_2
    Poziom 8  

    Witam ponownie,

    Kolega JRV pomógł mi rozwiązać zapisywanie w odpowiednich kolumnach, dziękuję :), ale faktycznie czas się nadpisuje np. z wieczora na rano i południe.
    Lanzur a czy mógłbyś zdradzić jak to zrobić, aby się nie nadpisywało? Z góry dziękuję.

  • #9 28 Maj 2017 11:56
    JRV
    Specjalista - VBA, Excel

    W przypadky gdy wartosci wpisywane kolejno w noc,rano itd

    Kod: vb
    Zaloguj się, aby zobaczyć kod

  • #10 28 Maj 2017 12:17
    Kasia_2
    Poziom 8  

    Nie wiem co robie źle, tez się nadpisują godziny. :(

  • #11 28 Maj 2017 12:42
    JRV
    Specjalista - VBA, Excel

    jak wiele razy ma makro zapisac w 'noc' i gdzie powinny być następujące godziny.
    Nie wiem kiedy i jak wiele razy naciśnij przycisk 'Zapisz'?

    Dodano po 4 [minuty]:

    wartośći pozostaja do następnego dnia?

    Dodano po 39 [sekundy]:

    opisać, jak wszystko się dzieje

  • #12 28 Maj 2017 12:46
    Kasia_2
    Poziom 8  

    Dzień | noc | rano | południe | wieczór |
    1
    2
    3
    i tak do 31

    Przycisk zapisz przyciska się po każdym wpisaniu wartości. Pierwsza zmiana wpisuje noc (zapisz), druga zmiana wpisuje rano (zapisz), trzecia południe, a czwarta wieczór. Jak w załączniku ;)

  • #13 28 Maj 2017 12:57
    JRV
    Specjalista - VBA, Excel

    Po scisniecju przyciska np. 'noc' ta wartosc 'noc' usuwa sie?
    W komorce A2 zawsze aktualna data?

    Kasia_2 napisał:
    Jak w załączniku
    Tylko jedna wartosc ( 6 w noc ), z tego nie wynika, pozostaje ta wartosc, gdy wpiszeme 'rano' itd. lub 'noc' usunieme i wpiszeme 'rano',
    nastepnie 'rano' bedzie usunute i wpiszeme 'dzien', co jak bedzie wypelniene wszystkie 4 komorki? Czyszczenie ich pred pierwszow zmianow?

  • #14 28 Maj 2017 13:12
    Kasia_2
    Poziom 8  

    W Arkuszu FORM w komórce A2 jest zawsze aktualna data
    W Arkuszu LOG sa wpisane dni aby się uzupełniały z każdym kolejnym dniem.

    Jeśli jest data jak dzisiaj czyli 28 maj to:
    W Arkuszu FORM jak wpisze się wartość na noc, to w Arkuszu LOG wyskakuje przy 28 maja godzina edycji, potem tak samo na rano, południe, wieczór.

    Kolejnego dnia czyli 29 maj:
    W Arkuszu FORM znow wpisana wartość na noc, zapisuję się godzina w Arkuszu LOG pod 29 maj.

    Kasia_2 napisał:
    Po scisniecju przyciska np. 'noc' ta wartosc 'noc' usuwa sie?

    Tak usuwa się ale ja to robie w dalszej części programu, także w tym kodzie nie musi się usuwac.

  • Pomocny post
    #15 28 Maj 2017 13:27
    JRV
    Specjalista - VBA, Excel

    W post #9 kod gdy czyszczenie komorek raz w dobie, pred zmianow 'noc'.
    tylko jest omyl, ma byc
    i = Application.Count(Range("e4:k4"))

  • #16 28 Maj 2017 13:52
    Kasia_2
    Poziom 8  

    Działa prawie idealnie! ale kiedy się wspisuje po kolei noc, rano, południe, wieczór, a jak wybiórczo, to już nie. Ale i tak już jesteśmy do przodu hihi
    Dziekuje serdecznie i miłego dnia :bye:

  • #17 28 Maj 2017 16:40
    lanzul
    Poziom 20  

    Kasia_2 napisał:
    Działa prawie idealnie! ale kiedy się wspisuje po kolei noc, rano, południe, wieczór, a jak wybiórczo, to już nie. Ale i tak już jesteśmy do przodu hihi
    Dziekuje serdecznie i miłego dnia :bye:


    'Łąńżurz' ... :D ... odpowiaduje tak ... :D .... cyt.: "a może by ten kod w ogóle skrócić odrobinę, np.:"
    - wersja nr 1 z nadpisywaniem:
    Kod: vba
    Zaloguj się, aby zobaczyć kod


    - wersja nr 2 bez nadpisywania:
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    W wersji nr 2 dochodzi jedno dodatkowe "Jeśli" sprawdzające, czy wypełniana komórka jest pusta, jeśli "tak", to wpisuje, jeśli "nie", to pomija.
    Wydaje mi się, że przy tak "sztywno" określonych komórkach docelowych nie ma po co wyszukiwać wartości funkcjami położenia. Na zakładce "log" dany dzień i tak położony jest w niezmiennym miejscu opisanym numerem dnia + 1 dodatkowy wiersz z powodu nagłówka tabelki. Tak więc dzień "27" zawsze będzie w wierszu = 27 + 1, a dzień "16" zawsze w wierszu = 16 + 1, itd. "Match" jest tu zbędne.
    Mogłaby natomiast koleżanka pogłówkować nad opcjami "zabezpieczającymi", np.: jak zablokować uruchamianie makra na zakładce "log", jak zabezpieczyć się przed próbą "przemycenia do makra" wartości nieliczbowej dnia danego miesiąca, czy jak zweryfikować, że dane przepisywane są do "majowej" zakładki "log' z "majowej" zakładki "Form", a nie np.: "czerwcowej", czy innej.

  • Pomocny post
    #18 28 Maj 2017 20:01
    Prot
    Poziom 23  

    Kasia_2 napisał:
    Pierwsza zmiana wpisuje noc (zapisz), druga zmiana wpisuje rano (zapisz)...


    A co się dzieje z wartością komórki "noc" po pierwszym zapisie :?: a co przy drugim zapisie ? :D

    W mojej ocenie makro zapisujące powinno na końcu czyścić wpisy poprzedniej zmiany np
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    tak więc dla zapisu czasu przez poszczególne zmiany można wykorzystać Twój pierwotny kod w postaci:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

  • Pomocny post
    #19 28 Maj 2017 21:17
    lanzul
    Poziom 20  

    Prot napisał:
    ... W mojej ocenie makro zapisujące powinno na końcu czyścić wpisy poprzedniej zmiany ...

    Słuszna uwaga ... ale nie za każdym razem, czyli kod w innym miejscu.

    Czyścić powinno się komórki tak, by wykonała to ostatnia zmiana, która będzie tam coś wpisywać, tak aby przed swoim wpisem miała informację o tym, że poprzednicy w ogóle coś wpisywali (bo może nie będą mieli wglądu w arkusz "log", aby to zweryfikować) i aby nie wpadło im do głowy uzupełniać zapisów za poprzedników ... chociaż z drugiej strony, jeśli będzie kontrola, na zakładce "log", tego czy jest tam coś wpisane czy też nie, to nie będzie to odgrywać większej roli za wyjątkiem "psychicznej konieczności poprawy poprzedników".
    W każdym bądź razie, jeśli komórki już mają być wyczyszczone, to powinno się to odbyć, według mnie, tuż przed "zmianą nowego dnia", tak aby to właśnie nowy dzień zaczynać od pustych komórek. Trzeba by tylko określić, czy "noc" należy jeszcze do poprzedniego, czy też już do nowego dnia.

  • #20 30 Maj 2017 09:35
    Kasia_2
    Poziom 8  

    Witam,

    Sedrecznie Wam Panowie wszystkim dziękuje, dzięki Wam rozwiązałam swoje zadanie. Ostatecznie skorzystałam z makra bez nadpisywania, ale wszystkie mi się przydadzą.
    Lanzul przepraszam za przejęzyczenie ;)
    Z tym czyszczeniem, to jest tak, że to opisane tutaj, to jest tylko część kodu, wiec inna już czysci formularz po całej zmianie.

    Miłego dnia hej!

  • #21 30 Maj 2017 10:32
    lanzul
    Poziom 20  

    :) ... Tak sobie jeszcze raz na to spojrzałem ... to jak Kasia_2 lubi tak "pętelkować", to można to jeszcze krócej zapisać ... :) ...

    Kod: vba
    Zaloguj się, aby zobaczyć kod

  • #22 07 Cze 2017 14:26
    Kasia_2
    Poziom 8  

    Witajcie, to jeszcze raz ja z tym samym!

    Wszystko było pieknie, ładnie dopóki był "Maj", a teraz jesrt "Czerwiec" a mi sie log uzupełnia znowu na maj. Jednakże to moja wina dlatego, że nie zastosowałam wyszukiwania miesiąca, jak kolega w pierwszym poscie mi pisał.
    Próbuje z Match i nie wychodzi :(

    Odpowiadając na wczesniejsze pytania, to faktycznie ostatnia zmiana po godz. 00 czyści formularz czyli po uzupełnieniu wpisów z kazdej pory dnia (one musza byc widoczne przez całą dobę).
    Dopiero wtedy przenosimy sie na dzień następny. Dzień i miesiąc.
    Bardzo prosze o pomoc :)

  • Pomocny post
    #23 07 Cze 2017 20:03
    lanzul
    Poziom 20  

    Kasia_2 napisał:
    ... było pieknie, ładnie dopóki był "Maj", a teraz jesrt "Czerwiec" a mi sie log uzupełnia znowu na maj...

    Ale jest pięknie ... dość ładna pogoda przecież ... :) ... przynajmniej w Polsce Wschodnio-Środkowej-Północnej ... :) ... no i na Karaibach oczywiście ... :
    Kod: vba
    Zaloguj się, aby zobaczyć kod


    Ale wydaje mi się, że jeszcze lepszym rozwiązaniem byłoby zrobienie 12 zakładek miesięcznych do wpisu danych z arkusza 'Form' - i wtedy sprawdzanie byłoby podwójne: i po miesiącu wpisanym w arkuszu 'log' w 'A1' i po nazwach zakładek zeszytu.

  • Pomocny post
    #24 10 Cze 2017 00:10
    lanzul
    Poziom 20  

    lanzul napisał:
    ...
    Kod: vba
    Zaloguj się, aby zobaczyć kod


    ALE BABOL z tym dniem ... :) ... :
    dzien = Sheets(ark_wpis).Range("a2").Value
    dzien = CInt(ThisWorkbook.ActiveSheet.Range("a2").Value)

    powinno być oczywiście tak :
    dzien = CInt(ThisWorkbook.Sheets(ark_wpis).Range("a2").Value)

    Kod: vba
    Zaloguj się, aby zobaczyć kod

  • #25 20 Cze 2017 23:16
    Kasia_2
    Poziom 8  

    Witaj Lanzul, tak jest tak pięknie, że az mi się komp spocił i wysiadł, dlatego dopiero teraz odpowiadam.
    Bardzo dziękuje za pomoc, jutro z rana przetestuje i napiszę.
    Swoja drogą ja mam bazę całoroczną na te logi tylko żeby mi to jeszcze zadziałało to by było cudownie ;)

    Pozdrawiam.

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME