ďťż

Ł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
  •