Hovoríte o CB v liste alebo vo VBA ?
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 ...
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" ...
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.
pr.
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
Pr.
Edit:
Aha teraz mi docvaklo, že to nebude asi vždy doradu. Či?
Veď to je jednoduché. Tu máte príklad. V tom Vašom vzorci nemáte ani "!" za názvom listu ani rozsah (len bunku).
Ako som písal v predošlej téme, ktorú ste založil asi omylom. Vidím, že v tejto máte info navyše, ale nedostatočné.
Prílohu zabalte do ZIP ak je to XLSM, a k je to XLS/XLSX ide priložiť priamo, tam kde píšete máte tlačítko Vybrať súbor. Neviem, aké sú momentálne veľkostné limity, ale voľakedy boli 256 KB.
Popis je nedostatočný preto, lebo mi netušíme čo za hodnoty máte v A$1, a čo má znamenať to "i" a "af". Ak "i" a "af" sú listy, tak máte snáď v A$1 / B$1 kompletnú adresu buniek aj s výkričníkom, teda aby Vám vznikol reťazec podobný tomuto
"af!A100:A200"
v prípade názvu listu s medzerami treba názov obaliť do apostrofov
"'af'!A100:A200"
Tu ju máte použitú v maticovom vzorci od "lubo"
Šmarjá, čo je to zase za prílohu ? Kde je popis, ktoré bunky tam na čo máte ? Do ktorých Vy niečo vpisujete, do ktorých sa počítajú avizované "počítané dáta vzorcom" ? Nikde nevoláte Skok, to som už písal = zbytočná procedúra. Hneď prvý riadok
If Target.Column = 2 And Not Target.Address = "$A$1" Then
Ak je Column=2, tak už nikdy nemôže byť Address="$A$1".
Nefunkčné #ODKAZ vo vzorcoch, nerovnaké vzorce a formáty v stĺpcoch.
Písal ste o súčte vyplnených hodnôt v B:D, a tu vidím texty (ešte k tomu D zbytočný, ten sa môže zapísať naraz, veď predsa ak ide o test, nebudú ho robiť traja...), a navyše ide o Počet a nie Súčet.
Čo je to od A38 dole ?
Akože "musím klikat do jiného pole", tým myslíte ENTER po zápise niečoho do bunky ? To je predsa samozrejmé, tak funguje Excel. Vy chcete odchytávať stlačenie klávesu počas písania v bunke ? To určite nepôjde.
Píšete stále o A1, ale v A1 je slovo "Rychlometr".
A kde je voľba 15/30 otázok?
Čo Vám mám k tomu viac napísať ....
Super vedieť, že takéto niečo je riešiteľné. Srandovne to vyzerá pri krokovaní vzorca, keď v SUMIFS sú všade chyby "#HODNOTA" ale výsledok je OK
Nie, nie. Zoberte prosím Váš hotový súbor, eliminujte citlivé data, v žiadnom prípade ale nemažte všetko a už vôbec nie meniť štruktúru, formát alebo usporiadanie. Ponechajte vzorce. Na konkrétnej ukážke (manuálne si vytvorte výsledok) mi tam ukážte ako to vyzerá pre makrom, a ako po makre. Slovný popis pre Váš problém nestačí! Rozhoduje maličkosť, napr. to že poviete, že tam máte vzorce. Čo znamená tam ? Vzorce vypĺňajú hodnoty, alebo ich sčítajú? To určuje rozdielnu metódu riešenia. Akých 15 hodnôt ? Vraveli ste o súčte 30, nie o počte 15/30. Nemôžete si vycucnúť pár riadkov z navrhnutého kódu, a použiť ich inak. Načo je napr. procedúra Skok, keď nieje volaná, ja som to v mojom makre robil inak... Takže to chce ukážkovú prílohu. Opäť je predpokladám čas, ktorý venujem opakovanému čítaniu toho čo ste napísal (aby som uhádol, čo chcete, ale teraz sa mi to nepodarilo), dlhší ako riešenie.
Inak UserName je niekoľko druhov. Application.UserName je meno čo je zapísané v nastavení Excelu. Environ("UserName") je meno prihláseného užívateľa Win.
MINIFS nieje ani v 2016 Pro. Pravdepodobne iba vo verzii 365 (raz to tu bolo spomínané tuším...)
Podľa toho, čo som čítal, tak sa INDIRECT/NEPŘÍMÝ.ODKAZ nedá používať v maticovom vzorci. A ako 3D (to iba predpokladám) tiež asi nie.
Možno sa mýlim...
Ale ja som napísal aj riešenie druhého problému. Nevolajte vytvorený objekt L1, ale Controls("L1"). Skúste si to napr. na vlastnosti .Caption. Ak dáte L1.Caption="abc" máte chybu, ale ak dáte Controls("L1").Caption="abc" prejde bez chyby.
Samozrejme skúšku robím na kóde s odstránenýi riadkami
D1 = DateAdd("d", Sheets("graf").Range("g30"), labelCounter - 1)
a
.Height = WorksheetFunction.SumIfs(škoda, jméno, Sheets("graf").Range("a5"), datum, D1) / 10
K nim nemáme podklady (prílohu)...
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.