< návrat zpět

MS Excel


Téma: Čas v textboxu rss

Zaslal/a 25.3.2017 8:22

lajosZdravím,
Potřeboval bych poradit s následujícím problémem.V Userform
zadávám:
TextBox1 "čas začátek" např.21:05
TextBox2 "čas konec" např.22:15
Textbox3 "výsledný čas"Výsledek-1:10

Tedy v TextBox3 se vypočte čas mezi časy v TxB1 a TxB2.To problém není.Problém je,že bych potřeboval ve výsledku mít čas v minutách,tedy v tomto konkrétním případě "70"minut
Teď to mám pořešené formáty v tabulce,ale potřeboval bych to mít pořešené už v Userformu.
Děkuji za případnou pomoc.

Zaslat odpověď >

#035740
lajos
Přikládám příklad
Příloha: zip35740_pokus-vypocet-casu.zip (12kB, staženo 26x)
citovat
#035741
elninoslov
Mohlo by to byť aj takto:
Private Sub TextBox1_Change()
Call Vypocet
End Sub

Private Sub TextBox2_Change()
Call Vypocet
End Sub

Sub Vypocet()
Dim Cas As Double
On Error Resume Next
Cas = TimeValue(TextBox2) - TimeValue(TextBox1)
If Err <> 0 Then TextBox3 = "" Else TextBox3 = Hour(Cas) * 60 + Minute(Cas)
On Error GoTo 0
End Sub


alebo

Sub Vypocet2()
Dim Cas As Double
On Error Resume Next
Cas = TimeValue(TextBox2) - TimeValue(TextBox1)
If Err <> 0 Then TextBox3 = "" Else TextBox3 = WorksheetFunction.Text(Cas, "[m]")
On Error GoTo 0
End Sub
citovat
#035744
lajos
Děkuji.
V rámci "jedněch"24hodin je výpočet v pořádku.Pokud jde přes půlnoc,tak výpočet nesouhlasí.
TxtB1"22:30"
Txt2B"0:01"
TxtB3"výsledek nevychází

Problém s formátem?citovat
#035746
elninoslov
Sub Vypocet()
Dim Cas As Double, T1 As Double, T2 As Double, M1 As Integer, M2 As Integer
On Error Resume Next
T1 = TimeValue(TextBox1): T2 = TimeValue(TextBox2)
If Err <> 0 Then
TextBox3 = ""
Else
M1 = Hour(T1) * 60 + Minute(T1): M2 = Hour(T2) * 60 + Minute(T2)
TextBox3 = IIf(M1 > M2, 1440 - M1 + M2, M2 - M1)
End If
On Error GoTo 0
End Sub

Ale fungovať to bude iba ak je príznakom prechodu cez polnoc to, že je druhý čas menší ako prvý. Ak hrozí rozdiel medzi časmi >=24 hod (1440 min), tak potrebujete aj dátum.citovat
#035747
lajos
Elnislov,
Děkuji za více než pomoc a přeji hezký den:-)citovat
#035750
avatar
Vždyť je to triviální - NELZE porovnávat časy, je nutné porovnávat celé datumy.

Při startu do proměnné uložit startovní datum a čas, mít též proměnnou pro konec:
Dim start As Date, konec As Date
start = Now

Do 1. textboxu přijde
TextBox1.Text = Format$(start, "h:nn")

Do 2. textboxu přijde koncový čas
konec = Now
TextBox2.Text = Format$(konec, "h:nn")
konec = konec - start
TextBox3.Text = Hour(konec) * 60 + Minute(konec)
a žádná půlnoc mě nemusí vzrušovat.

A, proboha, proč všichni používáte neobratnou, hromotluckou vlastnost Value, která pracuje s hodnotou typu Variant, a píšete
TextBox = ... ?
To tak nesnášíte mnohem jednodušší stringy? Čtěte MS Helpy a vyhýbejte se Variantům, kdykoli to jde.citovat
#035751
elninoslov
Samozrejme, ak chcete počítať cez polnoc treba dátum, tiež som to písal. Ale začalo to úplne inak. Prečítajte si:
...V Userform zadávám:... "čas začátek" ...

Teda z toho vyplýva, že žiadna polnoc sa nerieši a dátum sa nikam nezadáva, iba čas, teda dátum je irelevantný.
Až potom bolo upresnenie na polnoc, plus stále platí zadávanie času do TextBoxu. Žiaden dátum sa stále nezadáva/nespomína. Preto predpoklad jednoduchého porovnania čas1 < alebo > čas2.
Z dátumom sa to dá samozrejme tiež ošetriť pri zadávaní (alebo iný spôsob získania dátumu), ale to treba už presnejšie špecifikovať odkiaľ a za akých okolností sa bude brať aký dátum pre ktorú položku, alebo či bude priamo pri zadaní v TextBoxe...
3xValue v jednoduchom kóde nemôže robiť problém. Stringová hodnota je ale samozrejme čistejšia a rýchlejšia. Myslím ale, že zrovna tu je to fuk.

Toto je Form, ale inak u Cell vracia .Text niečo úplne iné ako .Value. Ale tu sa .Text mal použiť.citovat
icon #035752
eLCHa
Myslím, že stačí taktoMe.TextBox3.Text = WorksheetFunction.Text(CDate(Me.TextBox2.Text) - CDate(Me.TextBox1.Text) + Abs(CDate(Me.TextBox2.Text) < CDate(Me.TextBox1.Text)), "[h]:mm")
@elninoslov
jen poznámka
zadávání konkrétní použité vlastnosti je velice dobrý návyk - pokud to necháte na programu, bude vám to v 99% fungovat. A to je ten největší problém, když v nějaké nečekané situaci provede něco jiného... Navíc ve spojení s On Error.

@Jan-Mach
Mohl bych vás poprosit o používání tagu code pro kód a vzorce? Lépe se to potom čte. Děkujicitovat
#035753
elninoslov
To je pravda, to 1 % je väčší žrút času a nervov pri debugovaní, ako často celý ostatok kódu. V tomto prípade (a ja stále hovorím výhradne o tomto presnom zadaní), sa za else chyba nedostane. To On Error treba brať v kontexte rýchleho testu zadaného reťazca na čas, už pri písaní, a je tam zámerne, a funkčné.
Už na to kafrem. lajos -OK- tak potom ...citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje