Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Problem z wyszukiwaniem Visual Basic / Excel

12 Cze 2009 17:46 2075 6
  • Poziom 10  
    Mam taki problemu załącz cały arkusz z moimi wypocinami;) Czwarta cześć ma wyglądać tak ze wybieram pracownika rok i miesiąc i ma mi wypisać godzi pracy w danym miesiącu ale w ząb nie wiem jak to zrobić :|
    Załączniki:
  • Moderator Programowanie
    Proponuję:
    W arkuszu "ewidencja" w G2 wpisać formułę: =(F2-E2)*24 format liczbowy i mamy godziny pracy. Trochę więcej zachodu będzie jeśli zakończenie pracy jest następnego dnia Np 23:30 do 6:15 (chociaż z arkusza wynika, że nie).
    Kod formularza UserForm4 przy inicjowaniu moim zdaniem powinien wyglądać tak
    Code:
    Private Sub UserForm_Initialize()
    
        licznik = Sheets("Pracownicy").Range("a1").CurrentRegion.Rows.Count
        For i = 2 To licznik
            pr1 = Sheets("Pracownicy").Cells(i, 1).Value
            pr2 = Sheets("Pracownicy").Cells(i, 2).Value
            pr3 = Sheets("Pracownicy").Cells(i, 3).Value
            pr4 = Sheets("Pracownicy").Cells(i, 4).Value
            pr5 = Sheets("Pracownicy").Cells(i, 5).Value
            UserForm4.cbxPracownik.AddItem (pr1 & " " & pr2 & " " & pr3 & " " & pr4 & " " & pr5)
        Next i
       
        licznik = Sheets("temp").Range("e1").End(xlDown).Row
        For i = 2 To licznik
            rok = Sheets("temp").Cells(i, 5).Value
            UserForm4.cbxrok.AddItem (rok)
        Next

        licznik = 13 'miesiecy jest zawsze 12
        For i = 2 To licznik ' 1 to naglowek
            miesiac = Sheets("temp").Cells(i, 4).Value
            UserForm4.cbxmiesiac.AddItem (miesiac)
        Next i

    End Sub

    Wynik (sumę godzin) można wyliczyć w pętli warunkowej, sumując kolumnę G (lub obliczając godziny w makrze) i sprawdzając czy w wierszu: ID pracownika, rok i miesiąc są zgodne z polami formularza. Wynik wyświetlić można przy pomocy MsgBox lub dodatkowego formularza.

    P.S. Kolumna "A" w arkuszu "Ewidencja" aż prosi się o listę sprawdzania poprawności :)
  • Poziom 10  
    dopiero początkuje w Vba :cry: a możne jakiś gotowy kod pod to userform4 bo tak za bardzo nie czaje ;)
  • Moderator Programowanie
    Tak mniej więcej (zgodnie z tym, co pisałem), nie bardzo przetestowane. W założeniu godziny wyliczone w kolumnie "G" arkusza "Ewidencja".
    Code:
    Private Sub pokaz_Click()
    
        ileWierszy = Sheets("Ewidencja").Range("A1").CurrentRegion.Rows.Count
       
        For i = 2 To ileWierszy
            If Left(Sheets("Ewidencja").Cells(i, 1), 3) = Left(cbxpracownik, 3) And _
            Int(Sheets("Ewidencja").Cells(i, 2)) = Int(cbxrok.Value) And _
            Sheets("Ewidencja").Cells(i, 3) = cbxmiesiac Then
                suma = suma + Sheets("Ewidencja").Cells(i, 7)
            End If
        Next
       
        If suma > 0 Then
            With Sheets("pomocnicza")
                licznik = .Range("a1").CurrentRegion.Rows.Count
                .Cells(licznik + 1, 1).Value = UserForm4.cbxpracownik
                .Cells(licznik + 1, 2).Value = UserForm4.cbxrok
                .Cells(licznik + 1, 3).Value = UserForm4.cbxmiesiac
                .Cells(licznik + 1, 4).Value = Round(suma, 2)
                .Cells(licznik + 1, 5).Value = Now() 'data i czas aktualizacji
            End With
            MsgBox cbxpracownik & " w miesiącu " & cbxmiesiac & "/" & cbxrok _
            & " przepracował " & Round(suma, 2) & " godzin."
        Else
            MsgBox "Brak danych dla tego pracownika..."
        End If
       
    End Sub

    Procedura zapisuje wynik w arkuszu "pomocnicza" z datą aktualizacji.
    Edit 22:05 zmieniłem trochę...
  • Poziom 10  
    dzięki wielkie chodzi ;)
  • Poziom 43  
    Otwarto na prośbę Autora.

    Proszę o doprowadzenie pisowni postów do porządku.
  • Poziom 10  
    temat rozwiązany dziękuje