• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

VBA Zliczanie godzin z innych plików do podsumowania

Object Storage Arubacloud
+1 głos
260 wizyt
pytanie zadane 15 lutego 2021 w Visual Basic przez Strogonovv Nowicjusz (130 p.)
edycja 15 lutego 2021 przez Strogonovv

Cześć,

Dopiero zaczynam programowanie w VBA (potrzeba chwili) i od razu skok na głęboką wodę...
Aktualnie wykonałem arkusz, który tworzy projekt, nadaje mu dane w nagłówku i zapisuje go jako nowy plik:
dod_pro.pngprojekty.pngprojekt.png

Wszystko śmiga jak tra lala, jestem z siebie dumny... jednak przyszedł moment, że trzeba dane zestawić w tabeli, która przedstawiać będzie miesięczne wyrobienie godzin przez poszczególnych pracowników:
zestawienie.png

Wiem co chcę zrobić, jednak nie wiem jak temat ugryźć. Program musi kolejno:

  1. Otwierać plik w określonej lokalizacji.
    to można powiedzieć, że wiem, ale mogę się mylić:
    sciezka_pliku = "\\TECHNOLOGIA\EWIDENCJA GODZIN B+R\Projekty_B+R" & "\"
    nazwa_pliku = Dir(sciezka_pliku & "*.xlsm")
    
    
    Do While nazwa_pliku <> "" 
    Set arkusz = Workbooks.Open(sciezka_pliku & nazwa_pliku)

     

  2. Wyszukiwać, w których wierszach otwartego pliku znajduje się pierwsze nazwisko z zestawienia.
  3. Pobierać z tych wierszy wartość i "czas" (w zależności od daty, bo musi być podział na miesiące).
  4. Sumować czasy i przepisywać je do konkretnego miesiąca pod danym nazwiskiem,
  5. Gdy spisze dane danego nazwiska ze wszystkich plików to przechodzi do drugiego nazwiska, ew. wersja druga: gdy spisze dane wszystkich nazwisk z danego pliku przechodzi do następnego pliku.

Proszę o pomoc, bo gubię się we własnych myslach.

1 odpowiedź

0 głosów
odpowiedź 17 lutego 2021 przez VBService Ekspert (252,740 p.)
edycja 17 lutego 2021 przez VBService

"Wyciąganie" danych z takiego arkusza może okazać nie lada wyczynem. wink

na początek proponowałbym dodanie kolumny stanowisko jako osobnej np. zaraz po kolumnie imię i nazwisko (ułatwi to parse-owanie danych z kolumny imię i nazwisko).
Na załączonym przez Ciebie obrazku widać, że pracownicy generują różne ilości wierszy i tak:
Monika lp.1 - 3 wiersze
Stanisław lp.2 - 8 wierszy itd.

Jedyne co mi na teraz przychodzi do głowy to przeszukiwanie wierszy po Lp. (kolumna A od 5 wiersza w "dół"),
nowy numer Lp. (większy od poprzedniego w kolumnie A), wpis dotyczący innego pracownika.

Ja to bym zrobił osobny formularz (arkusz) do wprowadzania danych pracownika według tych kryteriów co masz teraz, i na osobnym arkuszu zrobił listę dostępnych pracowników w danym projekcie (numer zlecenia) i po kliknięciu "na pracownika" na liście - dopiero pokazują się dane dla konkretnego pracownika, tylko do wydruku robiłbym zbiorczą tabelę.
Osobny formularz (arkusz) daje nam możliwość zapisania danych do np. pliku csv, xml lub nawet txt, daje nam to łatwiejsze "manipulowanie" danymi.

VBA Read file in Excel (txt, xml, csv, binary)

Przykładowy plik z danymi xml  laugh

T-566__25.01.2021.xml

<?xml version="1.0" encoding="UTF-8"?>
<project>
    <project_info>
        <!--b/d - brak danych -->
        <creation_date>25.01.2021</creation_date>
        <name>b/d</name>
        <!--technical_drawing_number - numer rysunku -->
        <technical_drawing_number>b/d</technical_drawing_number>
        <model_number>T-566</model_number>
        <order_number>b/d</order_number>
    </project_info>
    <!-- ewidencja godzin B+R -->
    <records_of_B_R_hours>
        <employee>
            <id>1</id>
            <name>Monika</name>
            <surname>b/d</surname>
            <position>Specjalista R&D</position>
            <operations>
                <operation>
                    <date>11.01.2021</date>
                    <title>Opracowanie dokumentacji technicznej</title>
                    <hours>2</hours>
                </operation>
                <operation>
                    <date>11.01.2021</date>
                    <title>Analiza dokumentacji technicznej</title>
                    <hours>3</hours>
                </operation>
                <operation>
                    <date>28.01.2021</date>
                    <title>Uzgodnienie warunków technicznych</title>
                    <hours>2</hours>
                </operation>                
            </operations>
        </employee>
        <employee>
            <id>2</id>
            <name>Stanisław</name>
            <surname>b/d</surname>
            <position>Technolog</position>
            <operations>
                <operation>
                    <date>19.01.2021</date>
                    <title>Analiza dostarczonej dokumentacji technologicznej</title>
                    <hours>2</hours>
                </operation>
                <operation>
                    <date>19.01.2021</date>
                    <title>Modelowanie 3D</title>
                    <hours>2.5</hours>
                </operation>
                <operation>
                    <date>20.01.2021</date>
                    <title>Przygotowanie</title>
                    <hours>2</hours>
                </operation>
                <operation>
                    <date>20.01.2021</date>
                    <title>Analiza wyników</title>
                    <hours>0.75</hours>
                </operation>
                <operation>
                    <date>21.01.2021</date>
                    <title>Opracowanie dokumentacji 2D</title>
                    <hours>1.5</hours>
                </operation>
                <!-- itd. -->
            </operations>
        </employee>                        
    </records_of_B_R_hours>
</project>

read data from xml file vba excel  wink

Z takiego pliku xml łatwo jest wprowadzić dane do 

jak i przeliczyć dane i wprowadzić do  wink

lub

laugh

sciezka_pliku = "\\TECHNOLOGIA\EWIDENCJA GODZIN B+R\Projekty_B+R\"
nazwa_pliku = "T-566__25.01.2021.xlsm"

Set project_b_r__app = Workbooks.Open(sciezka_pliku & nazwa_pliku)

Podobne pytania

0 głosów
0 odpowiedzi 193 wizyt
pytanie zadane 6 kwietnia 2020 w Visual Basic przez Jarek K. Początkujący (330 p.)
0 głosów
1 odpowiedź 466 wizyt
pytanie zadane 13 czerwca 2019 w Visual Basic przez respecto Nowicjusz (140 p.)
0 głosów
1 odpowiedź 413 wizyt

92,555 zapytań

141,402 odpowiedzi

319,544 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...