Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Makro do zbierania danych z dziennego raportowania w jednym pliku zbiorczym

jackwarner 22 Oct 2017 20:03 1101 30
  • #1
    jackwarner
    Level 6  
    Witam,
    mam plik w którym każdego dnia wypełnia się dane, a na końcu ostatniej zmiany są one kasowane i w to miejsce wpisuje się kolejne dane z dnia następnego. Mam pytanie czy jest możliwość stworzenia takiego makra ,które pobiera dane z określonego dnia na podstawie listy rozwijanej dotyczącej daty i kopiuje je w odpowiednią tabelę i zapisywało się nawet jeśli osoba wypełniająca usunie dane w arkuszu za dzień poprzedni?
    W załączniku przesyłam uproszczony schemat .
  • #2
    JRV
    VBA, Excel specialist
    jackwarner wrote:
    na podstawie listy rozwijanej dotyczącej daty i kopiuje je w odpowiednią tabelę
    jaky sens listy, gdy "na końcu ostatniej zmiany są one(dane) kasowane "?
    Makro moze na poczatku I zmiany przenosic dane do tabeli, nastepnie kasowac.
  • #3
    jackwarner
    Level 6  
    Do raportowania potrzebne byłyby dane jako suma z 3 zmian, czyli jednego dnia, więc to data gra tu główną rolę. Zatem (pomijając już listy rozwijane) czy jest możliwość stworzenia takiego makra które przypisuje te sumy do tabeli w pliku w drugiej zakładce , mimo iż dane w pierwszej zakładce pliku będą codziennie kasowane?
  • #4
    JRV
    VBA, Excel specialist
    jackwarner wrote:
    więc to data gra tu główną rolę.
    Tak. Data nie możemy zawrócić i przyspieszyć do przodu. Np. Pierwsza zmiana zaczyna się o ósmej. O dziewięć makro zapisze do tabeli dla poprzedniego dnia i czyści dane. Do slowa, computer czynny 24 godziny?

    Dodano po 11 [minuty]:

    Ktorza godzina pierwsza zmiana zaczyna?
  • #5
    jackwarner
    Level 6  
    Myślę że poza wylogowaniem, komputer pracuje bez przerwy. Pierwsza zmiana zaczyna o godzinie 6 rano i pracuje do 14, kolejna 14-22 no i 3 22—6.

    Dodano po 10 [minuty]:

    Samo czyszczenie powinno odbywać się między 6.30 a 6.45 bo plik jest raportowany co godzinę więc uwzgledniam tu ewentualny poślizg 3 zmiany i jakieś 15 minut do wypełnienia przez pierwszą zmianę , pierwszej godziny pracy.

    Dodano po 53 [minuty]:

    Samo czyszczenie powinno odbywać się między 6.30 a 6.45 bo plik jest raportowany co godzinę więc uwzgledniam tu ewentualny poślizg 3 zmiany i jakieś 15 minut do wypełnienia przez pierwszą zmianę , pierwszej godziny pracy.
  • #7
    jackwarner
    Level 6  
    Dziękuję bardzo JRV, makro jest genialne. Postaram się je ogarnąć bo i jakoś zaimplementować do swojego pliku. Mam tylko pytanie czy "idat" przywołuje zegar systemowy bo nie widze deklaracji?
  • Helpful post
    #8
    JRV
    VBA, Excel specialist
    idat wpisywane recznie, na poczatku nowej I zmiany, lub gdy juz potrzeba wpisac dane I zmiany(nowej). wtedy kasuje sie tabela I, II, III zmiany. Makro dodaje nowy wiersz ze wpisana data.
    Dane w 'Tabela zapisu ' gotowe kazdy raz, jak byly zmiany w itab
  • #9
    jackwarner
    Level 6  
    Jeszcze raz dzięki za pomoc. Temat uważam za zamkniety.
  • #10
    jackwarner
    Level 6  
    Witam ponownie, jednak zbyt pochopnie zamknąłem temat. Struktura pliku uległa modyfikacji i teraz każda z 3 zmian jest raportowana w osobnym arkuszu. Mam pytanie jak ustawić to makro żeby odnosilo się do trzech arkuszy i je kasowalo po pobraniu sumy z 3 zmian do jednej tabeli?
  • #11
    JRV
    VBA, Excel specialist
    T.j. istnieje jedna 'Tabela zapisu' i trzy 'idat'? W ktorzym arkuszu formula sumowania lub brak je?
    Gdzie przykladowy plik?
  • #12
    jackwarner
    Level 6  
    Własnie chciałbym uniknąć trzech idat bo to może przysporzyć dodatkowe problemy w postaci kilku dodatkowych rekordów , dla jednej daty .Jakby miało to wyglądać zawarłem w arkuszu w załączniku.
  • #14
    jackwarner
    Level 6  
    Plik po ściągnięciu uruchomił się normalnie , bez błędu
  • #17
    jackwarner
    Level 6  
    Świetna robota , ale niestety nie potrafię go zaimplementować do mojego pliku w pracy. Chciałbym się dowiedzieć co dokładnie oznacza ten kod w poniższym listingu z makro w pliku zbiorczym.

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rn As Range, i&
    Set rn = Me.Cells(Rows.Count, 4).End(xlUp)
    If Not Intersect(Target, Range("idat")) Is Nothing Then
    Application.EnableEvents = False
    rn.Resize(, 4).Copy
    rn.Offset(1).PasteSpecial xlFormats
    rn.Offset(1) = Range("idat").Value
    Application.CutCopyMode = False
    For i = 1 To 3
    For s = 0 To 7
    Sheets(i).Range("zm_" & i).Offset(, s * 4).ClearContents
    Next
    Next
    Application.EnableEvents = True
    End If
    End Sub

    Dlaczego jest od 0 do 7 warunek? i dlaczego w offset mnoży się razy 4?


    oraz w zmiana I

    Private Sub Worksheet_Change(ByVal Target As Range)
    For i = 0 To 7
    If Not Intersect(Target, Range("zm_1").Offset(, i * 4)) Is Nothing Then zbior
    Next
    End Sub

    dlaczego jest od 0 do 7 czy to godziny? i dlaczego znowu *4?
  • #18
    JRV
    VBA, Excel specialist
    Kazda godzina paportu ma 4 kolumny
    W celu nie czyszczenia 'Produkt' - myslim ze rodzaj ich jest mniej-wjac staly
    od 0 do 7 = 8 razy 4 kolumny = 32 kolumny jedna zmiana

    Dodano po 4 [minuty]:

    Wejdz w menager nazw - wybierz np. zm_1 - ustaw kursor w dolu na formule - bedzie widac na arkuszu ten zakres. offset - to samo tylko wprawo o 4 kolumny razy 7

    Dodano po 21 [minuty]:

    jackwarner wrote:
    W menedżerze nazw opisałem zakresy które są do kasowanie
    tylko 16 z 32 ??(od EF do WX)? a co ostatni 16 ?

    Dodano po 16 [minuty]:

    III zmiana juz nie bedzie?
  • #19
    jackwarner
    Level 6  
    Tyle zrobiłem ale III będzie juz analogicznie więc wystarczą mi II . Ten zakres mogę zaznaczyć jeśli go nie widać w menedzerze nazw pod nazwa zm_1 i zm_2
  • #20
    JRV
    VBA, Excel specialist
    w menedzere
    miana II'!$E$9:$F$28;'Zmiana II'!$F$3:$G$4;'Zmiana II'!$E$31:$F$50;'Zmiana II'!$E$54:$F$73;'Zmiana II'!$E$76:$F$95;'Zmiana II'!$L$3:$M$4;'Zmiana II'!$K$9:$L$28;'Zmiana II'!$K$31:$L$50;'Zmiana II'!$K$54:$L$73;'Zmiana II'!$K$76:$L$95;'Zmiana II'!$R$3:$S$4;'Zmiana II'!$Q$9:$R$28;'Zmiana II'!$Q$31:$R$50;'Zmiana II'!$Q$54:$R$73;'Zmiana II'!$Q$76:$R$95;'Zmiana II'!$X$3:$Y$4;'Zmiana II'!$W$9:$X$28;'Zmiana II'!$W$31:$X$50;'Zmiana II'!$W$54:$X$73
    jest to 19 prostokatow, trzeba wszystkie 32 ??
  • #21
    jackwarner
    Level 6  
    Tak , muszą być wszystkie usuniętę które przypisałem do zm_2 w menedzerze

    Dodano po 47 [sekundy]:

    To samo tyczy się zm_1
  • #23
    jackwarner
    Level 6  
    Dziękuję bardzo za pomoc JRV . Temat rozwiązany.

    Dodano po 1 [godziny] 23 [minuty]:

    Jeszcze mam pytanie o ten czas czy da się w końcu robić te save'y w oparciu o czas systemowy zamiast date wypełniania ręcznie?
  • #24
    JRV
    VBA, Excel specialist
    Jeżeli jesteś pewien, że do siódmej wszystkie zmiany są wypełnione.
    Z drugiej strony zależy od tego, gdy start komputera lub uruchomiona Excel(otwarcie pliku).
    Proponuję, po prostu dodając przycisk, który zmienia datę.

    Dodano po 4 [minuty]:

    dla tego przycisku:

    sub set_date
    range("idat")=date()
    end sub

    Dodano po 3 [minuty]:

    lub raczej, ze nie wielokrotne klikanie
    sub set_date
    If range("idat")<>date() Then range("idat")=date()
    end sub
  • #25
    jackwarner
    Level 6  
    A byłaby taka możliwość żeby stworzyć okienko msgbox które po kliknięciu pokazuje tekst "Jesteś pewien że chcesz zmienić date i skasować wszystkie dane w pliku?" i wtedy tak albo anuluj
  • #26
    JRV
    VBA, Excel specialist
    Code: vbscript
    Log in, to see the code
  • #27
    jackwarner
    Level 6  
    Tylko nie wiem tera jak wywołać tą funkcję bez przycisku tylko po zmianie daty. To znaczy w którym miejscu kodu z arkusza umieścic tą instrukcję ?
  • #28
    JRV
    VBA, Excel specialist
    hmm.. to jest dla przycisku

    Dodano po 8 [minuty]:

    Code: vbscript
    Log in, to see the code

    nastepnie jak bylo
  • #29
    jackwarner
    Level 6  
    To wiem . Tylko chodziło mi o taką informację przy próbie zmiany daty w arkuszu , a w przypadku przycisku to się dzieje poza autonomicznie bo i tak można zmienić datę a dopiero potem nacisnąć guzik i w ten sposób mamy dwa rekordy tej samej daty
  • #30
    JRV
    VBA, Excel specialist
    Patrz powyzej
    sub nowa data usun