Excel VBA Dátum művelet feltételként

Excel VBA Dátum művelet feltételként
2015-10-02T18:03:04+02:00
2015-10-06T08:31:01+02:00
2022-12-02T21:05:40+01:00
Danyzol
Sziasztok!

Adott egy excel VBA script ami azt csinálja hogy egy form megfelelő textboxjaiból a megfelelő cellákba emeli be az adatokat, plusz elvégez pár műveletet ami megkönnyíti az adatokat feldolgozó munkáját.(Mielőtt megkérdőjeleznénk létezésének a célját: azért kell így mert sokan visznek fel adatokat a táblába ami jelszóval van levédve. Ezt a védelmet a script automatikusan feloldja az adatok beírása előtt, majd visszaállítja utána. A sűrűn elkövetett hibázások kiküszöbölésére szolgál,a jelszót az adatrögzítő emberek nem tudják.)

A probléma éppen az egyik ilyen "könnyítéssel" van. Rögzítik a munka kezdetét és végét. Ha a munka több mint két órát tartott akkor jelölnöm kell színezéssel. Ezt a következőképpen teszem:

With ActiveSheet lastrow = .Cells(.Rows.Count, "D").End(xlUp).Row + 1 End With 'testhour = end_hour - start_hour' If end_hour - start_hour > max_hour Then ActiveSheet.Range(Cells(lastrow, "H"), Cells(lastrow, "I")).Interior.ColorIndex = 6 End If
end_hour tárolja a végzés időpontját, start_hour a kezdetét. max_hour egy konstans, értéke 02:00. Az összes változó date típusúként van deklarálva. A kódrészlet tök jól működik néha... néha viszont akkor is beszínezi a cellát ha end_hour - strat_hour = 02:00. Ez pedig nem jó. Több órás gúglizás után sem tudok rájönni hol a hiba. Van valakinek ötlete?
Mutasd a teljes hozzászólást!
Mivel a dátum típus egy lebegőpontos szám, ezért előfordulhatnak pontatlanságok az összehasonlításnál, ha nagyon közel van a 2 órához a számított érték. Ha ez gondot jelent, akkor érdemes kerekítést használni a műveletekben vagy a kivonás helyett a datediff() függvényt használd percben számított különbséggel.
Mutasd a teljes hozzászólást!

  • Köszönöm szépen a tippet. Megpróbáltam a datediff()-et, de végül elvetettem, mert nem működött elsőre és nem tartom olyan bonyolultnak a problémát hogy órákat fecceljek bele a függvényes megoldásba. Helyette inkább integer változókkal dolgozok és így működik. Végül a megoldás ez lett (leírom, ha valaki hasonlóval találkozik akkor hasznos lehet):

    kezd_hour_int = Text_time_from_1.Value * 60 kezd_min_int = Text_time_from_2.Value kezd_int = kezd_hour_int + kezd_min_int veg_hour_int = Text_time_till_1.Value * 60 veg_min_int = Text_time_till_2.Value veg_int = veg_hour_int + veg_min_int With ActiveSheet lastrow = .Cells(.Rows.Count, "D").End(xlUp).Row + 1 End With If veg_int - kezd_int > 120 Then ActiveSheet.Range(Cells(lastrow, "H"), Cells(lastrow, "I")).Interior.ColorIndex = 6 End If
    text_time_from_1 és _2 a kezdő idő textbox-jai (Óra,perc) a _till_1 és _2 a végzés idejének a textbox-jai(Óra,perc). Onnantól pedig egyszerű matek! :) Mivel te vagy az egyetlen hozzászóló és te mondtad meg a hiba okát, ami a megoldást is szülte így jár a pont! ;) Köszönöm!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd