Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  207 208 209 210 211 212 213 214 215   další » ... 302

Takto ? Vyfiltrujete si dátumy, a rozsah bude vždy začínať 1. riadkom (resp. 2. keď 1. je hlavička), lebo ide o filter, no dynamicky sa počíta počet čísel v stĺpci s dátumom (lebo dátum je číslo), plus nechajte nezaškrtnuté "Prázdne". A ak to myslíte tak, že sa vytlačí buď zadaných/vypočítaných počet riadkov, alebo počet vyplnených riadkov, tak sa berie v úvahu Min hodnota z týchto dvoch veličín. Na to je vo vzorci MINR, ktorú si teda odkazujte na tú Vašu vypočítavanú hodnotu, a ak chcete všetky riadky, tak jej dajte hodnotu 500 (alebo 1 000 000) a menšia bude tá zaplnená. Snáď ma chápete.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$16" Then PageSetup.RightHeader = CStr(Range("C16").Value)
End Sub


no a s ďalším textom spolu
... PageSetup.RightHeader = "abc " & CStr(Range("C16").Value)
Jáj, a zápätie/päta (zápatí) bude RightFooter namiesto RightHeader.

Vľavo je LeftHeader/LeftFooter a v strede zase CenterHeader/CenterFooter.

Ak hrozí, že bude hromadná zmena dát (kopírovanie) zároveň s bunkou C16, treba ošetriť nasledovne:
If Not Intersect(Target, Range("C16")) Is Nothing Then ...

Ak má byť kontrola na základe hodnoty menenej vzorcom, tak Worksheet_Change nepomôže, a to bude problém, pretože v Calculate metóde nieje možné nastavovať hlavičku/pätu.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Columns("B:P")) Is Nothing Then Call MacroDatum(Target)
End Sub

Sub MacroDatum(ByRef Target As Range)
Intersect(Target.EntireRow, Columns(1)).Value = Date
End Sub

Ešte ma napadlo priložiť jednoduchší vzorec pre prípad, že budú ID vždy za sebou. Vyberte si...

Alebo makrom. Zatiaľ je urobené tak, že sa počíta s tým, že sú oba stĺpce vedľa seba, a tabuľka má len 2 stĺpce. Dá sa poriešiť inak...

vzorcom iba komplikovanejším, v skrytom stĺpci. Ale zato môžu byť rozhádzané, nemusia byť za sebou.

Inak v jednom prípade vravíte že pri 5 sa použije E2-D2, a potom že sa pri 5 použije MD-D (čo zodpovedá presnému opaku D2-E2) 1
Označte si celé stĺpce a zrušte formátovanie nastavením na Všeobecné alebo Číslo na 2 desatinné.
Spomínaný vzorec od eLCHa Vám musí fungovať, len sa rozhodnite, či D2-E alebo E2-D2 bude pre 5-ku, teda prvý parameter, alebo ako druhý parameter.
=IF(LEFT(B2;1)/1=5;D2-E2;E2-D2)
=KDYŽ(ZLEVA(B2;1)/1=5;D2-E2;E2-D2)

nemôže byť problém ...

Príklad:
Sub OdstranSloupce()
Dim i As Integer, rngDEL As Range, Radek()
Const HDN = 999
With Worksheets("Data")
Radek = .Range("A36:Z36").Value
For i = 1 To UBound(Radek, 2)
If Radek(1, i) = HDN Then
If rngDEL Is Nothing Then Set rngDEL = .Columns(i) Else Set rngDEL = Union(rngDEL, .Columns(i))
End If
Next i
If Not rngDEL Is Nothing Then rngDEL.Delete: Set rngDEL = Nothing
End With
End Sub

A čo Vám na tom nefunguje ? Veď to máte tak, ako potrebujete, nie ?

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" ...

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ť.

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


Strana:  1 ... « předchozí  207 208 209 210 211 212 213 214 215   další » ... 302

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