Ĺadny brzuch
Mam problem z pętlą, chodzi o to że pętla ta nie chce zadziałać, działa tylko wiersz:
If pracaod = 6 And pracado = 14 And zmiennailegodz = 8 Then
zmiennazmiana1 = 8 And zmiennazmiana2 = 0 And zmiennazmiana3 = 0
czyli 2 zagnieżdżona. POMÓŻCIE CO ROBIE ŹLE?
Sub PracaZmianowa()
If Len(Me.txtPracaOd.Text) = 0 Or Len(Me.txtPracaDo.Text) = 0 Then
pracaod = Len(Me.txtPracaOd.Text)
pracado = Len(Me.txtPracaDo.Text)
Else
pracado = Me.txtPracaDo
pracaod = Me.txtPracaOd
If pracaod = 6 And pracado = 14 And zmiennailegodz = 8 Then
zmiennazmiana1 = 8 And zmiennazmiana2 = 0 And zmiennazmiana3 = 0
Else
If pracaod = 6 And pracado = 18 Then
zmiennazmiana1 = 8 And zmiennazmiana2 = 4 And zmiennazmiana3 = 0
Else
If pracaod = 7 And pracado = 15 Then
zmiennazmiana1 = 8 And zmiennazmiana2 = 4 And zmiennazmiana3 = 0
Else
If pracaod = 7 And pracado = 19 Then
zmiennazmiana1 = 8 And zmiennazmiana2 = 4 And zmiennazmiana3 = 0
Else
If pracaod = 14 And pracado = 22 Then
zmiennazmiana1 = 0 And zmiennazmiana2 = 8 And zmiennazmiana3 = 0
Else
If pracaod = 18 And pracado = 6 Then
zmiennazmiana1 = 0 And zmiennazmiana2 = 4 And zmiennazmiana3 = 8
Else
If pracaod = 18 And pracado = 2 Then
zmiennazmiana1 = 0 And zmiennazmiana2 = 4 And zmiennazmiana3 = 4
Else
If pracaod = 22 And pracado = 6 Then
zmiennazmiana1 = 0 And zmiennazmiana2 = 0 And zmiennazmiana3 = 8
End If
End If
End If
End If
End If
End If
End If
End If
End If
End Sub
Doton
Nawiasy przedewszystkim
If (pracaod = 6) And (pracado = 14) And (zmiennailegodz = 8) Then
;)
-------------- ------------- ------------- --------------- ------
www.neves.prv.pl
-------------- --------------- ------------- --------------- ----
A nie lepiej zamiast
Else
If
Użyć
ElseIf ??
Instrukcją warunkową nie pętlą :)
Strasznie masz to skomplikowane:) Może lepiej zrobić to select case :)
A może istnieje jakaś lepsza metoda (uwaga dawno w VB nie pisałem:D)
Zauważ, że każda zmiana trwa 8h. Początki zmian 6, 14, 22, 6 nast dnia (zał 30:P)
... 'mamy juz zmienne pracaod i pracado Dim zmiany(1 to 4) as Integer zmiany(1) = 6 zmiany(2) = 14 zmiany(3) = 22 zmiany(4) = 30 Dim czas_pracy(1 to 3) as Integer for i = 1 to 3 if pracaod < 0 then break if zmiany(i+1)>=pracado then temp = zmiany(i+1) - pracaod if temp<0 then czas_pracy(i) = 0 else czas_pracy(i) = zmiany(i+1) - pracaod pracaod = zmiany(i+1) - pracaod end if else temp = pracado - pracaod if temp<0 then czas_pracy(i) = 0 else czas_pracy(i) = pracado - pracaod break ' jest coś takiego w VB mam nadzieje :)?? end if next i ...
Pewnie są jakieś błędy lata nie pisałem w VB, no ale mam nadzieję, że jako tako zadziała. A co do twojego problemu to jest coś takiego jak tryb krokowy (poczytaj o debugowaniu i watches) przydaje sie :)
Aha i nie przewidziałem czegoś takiego jak przekręcenie tzn. na 3. zmianie 6h i na pierwszej 2h (ale to też można wmiarę łatwo uzyskać:) ) (no i mam nadzieję, że sam algorytm jest poprawny:D)
Kodie
Witam. Dzięki za podpowiedzi ale rady na nic sie zdały, gdyż te dwa pierwsze posty niedoprowadziły do poprawy, a z ostatnim mam problem ze zrozumieniem niektórych wierszy.
Jestem początkującym i próbuje zrobić bazę opartą o SQL, a wizualizację w VB, muszę sam popracować.
Ale i tak dzięki za podpowiedzi, dały mi do myślenia i poprawiłem ten kod tak:
Sub PracaZmianowa()
If (pracaod = 6) And (pracado = 14) Then
zmiana1 = 8 And zmiana2 = 0 And zmiana3 = 0
ElseIf (pracaod = 6) And (pracado = 18) Then
zmiana1 = 8 And zmiana2 = 4 And zmiana3 = 0
ElseIf (pracaod = 7) And (pracado = 15) Then
zmiana1 = 8 And zmiana2 = 0 And zmiana3 = 0
ElseIf (pracaod = 7) And (pracado = 19) Then
zmiana1 = 8 And zmiana2 = 4 And zmiana3 = 0
ElseIf (pracaod = 14) And (pracado = 22) Then
zmiana1 = 0 And zmiana2 = 8 And zmiana3 = 0
ElseIf (pracaod = 18) And (pracado = 2) Then
zmiana1 = 0 And zmiana2 = 4 And zmiana3 = 4
ElseIf (pracaod = 18) And (pracado = 6) Then
zmiana1 = 0 And zmiana2 = 4 And zmiana3 = 8
ElseIf (pracaod = 22) And (pracado = 6) Then
zmiana1 = 0 And zmiana2 = 0 And zmiana3 = 8
End If
End Sub
Wszystko było by ok ale działa tylko część tego kodu, a mianowicie:
If (pracaod = 6) And (pracado = 14) Then
zmiana1 = 8 And zmiana2 = 0 And zmiana3 = 0
i
ElseIf (pracaod = 7) And (pracado = 15) Then
zmiana1 = 8 And zmiana2 = 0 And zmiana3 = 0
reszta za każdym razem zmiana1,2 i 3 wychodzi 0, może macie jakiś pomysł czym to może być spowodowane?
Doton
cytat:Doton napisał:
Witam. Dzięki za podpowiedzi ale rady na nic sie zdały, gdyż te dwa pierwsze posty niedoprowadziły do poprawy, a z ostatnim mam problem ze zrozumieniem niektórych wierszy.
Jestem początkującym i próbuje zrobić bazę opartą o SQL, a wizualizację w VB, muszę sam popracować.
Ale i tak dzięki za podpowiedzi, dały mi do myślenia i poprawiłem ten kod tak:
Sub PracaZmianowa()
If (pracaod = 6) And (pracado = 14) Then
zmiana1 = 8 And zmiana2 = 0 And zmiana3 = 0
{ciach}
End If
End Sub
Wszystko było by ok ale działa tylko część tego kodu, a mianowicie:
If (pracaod = 6) And (pracado = 14) Then
zmiana1 = 8 And zmiana2 = 0 And zmiana3 = 0
i
ElseIf (pracaod = 7) And (pracado = 15) Then
zmiana1 = 8 And zmiana2 = 0 And zmiana3 = 0
reszta za każdym razem zmiana1,2 i 3 wychodzi 0, może macie jakiś pomysł czym to może być spowodowane?
Jak to zwykle bywa spowodowane jest to błędem programisty :)
Sub PracaZmianowa() If (pracaod = 6) And (pracado = 14) Then zmiana1 = 8 : zmiana2 = 0 : zmiana3 = 0 ElseIf (pracaod = 6) And (pracado = 18 ) Then zmiana1 = 8 : zmiana2 = 4 : zmiana3 = 0 ElseIf (pracaod = 7) And (pracado = 15) Then zmiana1 = 8 : zmiana2 = 0 : zmiana3 = 0 ElseIf (pracaod = 7) And (pracado = 19) Then zmiana1 = 8 : zmiana2 = 4 : zmiana3 = 0 ElseIf (pracaod = 14) And (pracado = 22) Then zmiana1 = 0 : zmiana2 = 8 : zmiana3 = 0 ElseIf (pracaod = 18 ) And (pracado = 2) Then zmiana1 = 0 : zmiana2 = 4 : zmiana3 = 4 ElseIf (pracaod = 18 ) And (pracado = 6) Then zmiana1 = 0 : zmiana2 = 4 : zmiana3 = 8 ElseIf (pracaod = 22) And (pracado = 6) Then zmiana1 = 0 : zmiana2 = 0 : zmiana3 = 8 End If End Sub
Zamieniłem And po Then na separatory instrukcji :
pozdrawiaMM
SUPER- pomogło wielkie dzięki Marcinku :D, masz u mnie piwko.
Ja męczyłem się z tym kilka dni i już miałem dość a rozwiązanie było takie proste.
Jak byś jeszcze tu zajrzał to wytłumacz mi krótko dlaczego nie mogło być "AND" tylko ":" .
Jeszcze raz wielkie dzięki.
Pozdrawiam wszystkich.
Doton
cytat:Doton napisał:
SUPER- pomogło wielkie dzięki Marcinku :D, masz u mnie piwko.
Ja męczyłem się z tym kilka dni i już miałem dość a rozwiązanie było takie proste.
Jak byś jeszcze tu zajrzał to wytłumacz mi krótko dlaczego nie mogło być "AND" tylko ":" .
Tylko nie 'Marcinku' :) - bez wyzwisk proszę :D
Już tłumaczę:
AND jest operatorem logicznym i służy do operacji logicznych - generalnie do sprawdzenia warunku w IF (CASE, WHILE...)
: jest separatorem instrukcji - coś na kształt i podobieństwo ; z C (Pascal, PHP...). Tylko że w VB uzywa się go TYLKO i WYŁŚCZNIE wtedy, gdy masz kilka instrukcji w jednej linii.
pozdrawiaMM
Wielkie dzięki za pomoc.
Pozdrawiam
Doton
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
If pracaod = 6 And pracado = 14 And zmiennailegodz = 8 Then
zmiennazmiana1 = 8 And zmiennazmiana2 = 0 And zmiennazmiana3 = 0
czyli 2 zagnieżdżona. POMÓŻCIE CO ROBIE ŹLE?
Sub PracaZmianowa()
If Len(Me.txtPracaOd.Text) = 0 Or Len(Me.txtPracaDo.Text) = 0 Then
pracaod = Len(Me.txtPracaOd.Text)
pracado = Len(Me.txtPracaDo.Text)
Else
pracado = Me.txtPracaDo
pracaod = Me.txtPracaOd
If pracaod = 6 And pracado = 14 And zmiennailegodz = 8 Then
zmiennazmiana1 = 8 And zmiennazmiana2 = 0 And zmiennazmiana3 = 0
Else
If pracaod = 6 And pracado = 18 Then
zmiennazmiana1 = 8 And zmiennazmiana2 = 4 And zmiennazmiana3 = 0
Else
If pracaod = 7 And pracado = 15 Then
zmiennazmiana1 = 8 And zmiennazmiana2 = 4 And zmiennazmiana3 = 0
Else
If pracaod = 7 And pracado = 19 Then
zmiennazmiana1 = 8 And zmiennazmiana2 = 4 And zmiennazmiana3 = 0
Else
If pracaod = 14 And pracado = 22 Then
zmiennazmiana1 = 0 And zmiennazmiana2 = 8 And zmiennazmiana3 = 0
Else
If pracaod = 18 And pracado = 6 Then
zmiennazmiana1 = 0 And zmiennazmiana2 = 4 And zmiennazmiana3 = 8
Else
If pracaod = 18 And pracado = 2 Then
zmiennazmiana1 = 0 And zmiennazmiana2 = 4 And zmiennazmiana3 = 4
Else
If pracaod = 22 And pracado = 6 Then
zmiennazmiana1 = 0 And zmiennazmiana2 = 0 And zmiennazmiana3 = 8
End If
End If
End If
End If
End If
End If
End If
End If
End If
End Sub
Doton
Nawiasy przedewszystkim
If (pracaod = 6) And (pracado = 14) And (zmiennailegodz = 8) Then
;)
-------------- ------------- ------------- --------------- ------
www.neves.prv.pl
-------------- --------------- ------------- --------------- ----
A nie lepiej zamiast
Else
If
Użyć
ElseIf ??
Instrukcją warunkową nie pętlą :)
Strasznie masz to skomplikowane:) Może lepiej zrobić to select case :)
A może istnieje jakaś lepsza metoda (uwaga dawno w VB nie pisałem:D)
Zauważ, że każda zmiana trwa 8h. Początki zmian 6, 14, 22, 6 nast dnia (zał 30:P)
... 'mamy juz zmienne pracaod i pracado Dim zmiany(1 to 4) as Integer zmiany(1) = 6 zmiany(2) = 14 zmiany(3) = 22 zmiany(4) = 30 Dim czas_pracy(1 to 3) as Integer for i = 1 to 3 if pracaod < 0 then break if zmiany(i+1)>=pracado then temp = zmiany(i+1) - pracaod if temp<0 then czas_pracy(i) = 0 else czas_pracy(i) = zmiany(i+1) - pracaod pracaod = zmiany(i+1) - pracaod end if else temp = pracado - pracaod if temp<0 then czas_pracy(i) = 0 else czas_pracy(i) = pracado - pracaod break ' jest coś takiego w VB mam nadzieje :)?? end if next i ...
Pewnie są jakieś błędy lata nie pisałem w VB, no ale mam nadzieję, że jako tako zadziała. A co do twojego problemu to jest coś takiego jak tryb krokowy (poczytaj o debugowaniu i watches) przydaje sie :)
Aha i nie przewidziałem czegoś takiego jak przekręcenie tzn. na 3. zmianie 6h i na pierwszej 2h (ale to też można wmiarę łatwo uzyskać:) ) (no i mam nadzieję, że sam algorytm jest poprawny:D)
Kodie
Witam. Dzięki za podpowiedzi ale rady na nic sie zdały, gdyż te dwa pierwsze posty niedoprowadziły do poprawy, a z ostatnim mam problem ze zrozumieniem niektórych wierszy.
Jestem początkującym i próbuje zrobić bazę opartą o SQL, a wizualizację w VB, muszę sam popracować.
Ale i tak dzięki za podpowiedzi, dały mi do myślenia i poprawiłem ten kod tak:
Sub PracaZmianowa()
If (pracaod = 6) And (pracado = 14) Then
zmiana1 = 8 And zmiana2 = 0 And zmiana3 = 0
ElseIf (pracaod = 6) And (pracado = 18) Then
zmiana1 = 8 And zmiana2 = 4 And zmiana3 = 0
ElseIf (pracaod = 7) And (pracado = 15) Then
zmiana1 = 8 And zmiana2 = 0 And zmiana3 = 0
ElseIf (pracaod = 7) And (pracado = 19) Then
zmiana1 = 8 And zmiana2 = 4 And zmiana3 = 0
ElseIf (pracaod = 14) And (pracado = 22) Then
zmiana1 = 0 And zmiana2 = 8 And zmiana3 = 0
ElseIf (pracaod = 18) And (pracado = 2) Then
zmiana1 = 0 And zmiana2 = 4 And zmiana3 = 4
ElseIf (pracaod = 18) And (pracado = 6) Then
zmiana1 = 0 And zmiana2 = 4 And zmiana3 = 8
ElseIf (pracaod = 22) And (pracado = 6) Then
zmiana1 = 0 And zmiana2 = 0 And zmiana3 = 8
End If
End Sub
Wszystko było by ok ale działa tylko część tego kodu, a mianowicie:
If (pracaod = 6) And (pracado = 14) Then
zmiana1 = 8 And zmiana2 = 0 And zmiana3 = 0
i
ElseIf (pracaod = 7) And (pracado = 15) Then
zmiana1 = 8 And zmiana2 = 0 And zmiana3 = 0
reszta za każdym razem zmiana1,2 i 3 wychodzi 0, może macie jakiś pomysł czym to może być spowodowane?
Doton
cytat:Doton napisał:
Witam. Dzięki za podpowiedzi ale rady na nic sie zdały, gdyż te dwa pierwsze posty niedoprowadziły do poprawy, a z ostatnim mam problem ze zrozumieniem niektórych wierszy.
Jestem początkującym i próbuje zrobić bazę opartą o SQL, a wizualizację w VB, muszę sam popracować.
Ale i tak dzięki za podpowiedzi, dały mi do myślenia i poprawiłem ten kod tak:
Sub PracaZmianowa()
If (pracaod = 6) And (pracado = 14) Then
zmiana1 = 8 And zmiana2 = 0 And zmiana3 = 0
{ciach}
End If
End Sub
Wszystko było by ok ale działa tylko część tego kodu, a mianowicie:
If (pracaod = 6) And (pracado = 14) Then
zmiana1 = 8 And zmiana2 = 0 And zmiana3 = 0
i
ElseIf (pracaod = 7) And (pracado = 15) Then
zmiana1 = 8 And zmiana2 = 0 And zmiana3 = 0
reszta za każdym razem zmiana1,2 i 3 wychodzi 0, może macie jakiś pomysł czym to może być spowodowane?
Jak to zwykle bywa spowodowane jest to błędem programisty :)
Sub PracaZmianowa() If (pracaod = 6) And (pracado = 14) Then zmiana1 = 8 : zmiana2 = 0 : zmiana3 = 0 ElseIf (pracaod = 6) And (pracado = 18 ) Then zmiana1 = 8 : zmiana2 = 4 : zmiana3 = 0 ElseIf (pracaod = 7) And (pracado = 15) Then zmiana1 = 8 : zmiana2 = 0 : zmiana3 = 0 ElseIf (pracaod = 7) And (pracado = 19) Then zmiana1 = 8 : zmiana2 = 4 : zmiana3 = 0 ElseIf (pracaod = 14) And (pracado = 22) Then zmiana1 = 0 : zmiana2 = 8 : zmiana3 = 0 ElseIf (pracaod = 18 ) And (pracado = 2) Then zmiana1 = 0 : zmiana2 = 4 : zmiana3 = 4 ElseIf (pracaod = 18 ) And (pracado = 6) Then zmiana1 = 0 : zmiana2 = 4 : zmiana3 = 8 ElseIf (pracaod = 22) And (pracado = 6) Then zmiana1 = 0 : zmiana2 = 0 : zmiana3 = 8 End If End Sub
Zamieniłem And po Then na separatory instrukcji :
pozdrawiaMM
SUPER- pomogło wielkie dzięki Marcinku :D, masz u mnie piwko.
Ja męczyłem się z tym kilka dni i już miałem dość a rozwiązanie było takie proste.
Jak byś jeszcze tu zajrzał to wytłumacz mi krótko dlaczego nie mogło być "AND" tylko ":" .
Jeszcze raz wielkie dzięki.
Pozdrawiam wszystkich.
Doton
cytat:Doton napisał:
SUPER- pomogło wielkie dzięki Marcinku :D, masz u mnie piwko.
Ja męczyłem się z tym kilka dni i już miałem dość a rozwiązanie było takie proste.
Jak byś jeszcze tu zajrzał to wytłumacz mi krótko dlaczego nie mogło być "AND" tylko ":" .
Tylko nie 'Marcinku' :) - bez wyzwisk proszę :D
Już tłumaczę:
AND jest operatorem logicznym i służy do operacji logicznych - generalnie do sprawdzenia warunku w IF (CASE, WHILE...)
: jest separatorem instrukcji - coś na kształt i podobieństwo ; z C (Pascal, PHP...). Tylko że w VB uzywa się go TYLKO i WYŁŚCZNIE wtedy, gdy masz kilka instrukcji w jednej linii.
pozdrawiaMM
Wielkie dzięki za pomoc.
Pozdrawiam
Doton