Zamrznjen čas

Pomoč pri delu z MS Excelom
Odgovori
mkralj123
Prispevkov: 77
Pridružen: Sr Jan 14, 2009 12:21 pm

Zamrznjen čas

Odgovor Napisal/-a mkralj123 »

Pozdrav

Imam en problem, ki ga ne znam rešiti, in bi prosil koga na forumu, da mi pomaga.
Ob izpolnjenem pogoju v neki celici bi rad da mi se mi v sosednji celici izpiše čas, kdaj je bil ta pogoj izpolnjen (vpisan).
Primer
v celici A1 vpišem DA, kar je hkrati izpolnjen pogoj, in v celici B1 se mi izpiše čas, ko se je ta vpis zgodil.
Zadevo znam sam rešiti samo na način da v B1 vpišem =IF(A1="DA"; NOW();"") vendar mi ta čas ne ostane "zamrznjen", ko dokument naslednjič ponovno odprem.
Rad bi na nek način zamrznil podatek, kdaj se je izpolnitev pogoja zgodila. Zadevo bi rad rešil z uporabo funkcij in ne makroja.
Hvala za morebitno pomoč.
lp m
Stenly
Prispevkov: 223
Pridružen: Sr Jul 27, 2005 11:29 pm

Re: Zamrznjen čas

Odgovor Napisal/-a Stenly »

Pozdravljen

Tole boste dodali pod makro in vklopili makre:

Koda: Izberi vse

Sub Auto_Close()
'
Range("B1").Value = Range("B1").Value

End Sub
Lp
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Zamrznjen čas

Odgovor Napisal/-a admin »

Brez uporabe makra tega ne boste mogli rešiti, saj se funkcije v Excelu preračunajo vsakič ko je to potrebno in tedaj se vam bo preračunal tudi čas. Rešitev je torej:
  • Ali uporaba makra
  • Ali ročno kopiranje vrednosti celic namesto njihovih formul
lp,
Matjaž Prtenjak
Administrator
mkralj123
Prispevkov: 77
Pridružen: Sr Jan 14, 2009 12:21 pm

Re: Zamrznjen čas

Odgovor Napisal/-a mkralj123 »

Stenly napisal/-a:Pozdravljen

Tole boste dodali pod makro in vklopili makre:

Koda: Izberi vse

Sub Auto_Close()
'
Range("B1").Value = Range("B1").Value

End Sub
Lp

Hvala za odgovor, bi želel še malo pomoči. Ne znam namreč naslednjega "tole boste dodali pod makre:" Kako se to naredi? :oops:
Pa tudi, kaj pa je potrebno za vklop makrojev? Ali se samo nastavi ustrezno visoka (nizka) varnost ali je potrebno še kaj drugega?
(upam da nisem postavil preveč trivialnih vprašanj)

Mimogrede še tole. Če napisan makro rešuje moj problem, kako to da ni nikjer v njem navedene celice A1, saj je tam namreč zapisa pogoj "DA", ki je potreben za to da se v celici B1 izpiše trenutni čas, tako kot sem napisal že v prvem prispevku.
Že vnparej hvala za odgovor lp m
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Zamrznjen čas

Odgovor Napisal/-a admin »

mkralj123 napisal/-a: Ne znam namreč naslednjega "tole boste dodali pod makre:" Kako se to naredi? :oops:
Razlago boste našli med VBA nasveti.
mkralj123 napisal/-a: Pa tudi, kaj pa je potrebno za vklop makrojev? Ali se samo nastavi ustrezno visoka (nizka) varnost ali je potrebno še kaj drugega?
Glede na ustrezno izbiro varnsoti so makri omogočeni oz. onemogočeni. Nič drugega ni potrebno storiti. Če ima uporabnik varnost nastaviljeno tako visoko, da so makri onemogočeni so pač onemogočeni. Tega ne morete zaobiti. Če pa je varnost nižja pa je potem odvisno od uporabnika ali bo makre dovolil ali ne. Seveda pa je lahko varnost tudi tako nizka, da so makri izvršljivi že po privzetem...
mkralj123 napisal/-a: (upam da nisem postavil preveč trivialnih vprašanj)
Zakaj bi se pa tega bali... Nihče ne ve vsega. Določene stvari so nekomu trivialne, drugemu pa nepojemljive in seveda obratno! Vprašati ni greh.

mkralj123 napisal/-a: Mimogrede še tole. Če napisan makro rešuje moj problem, kako to da ni nikjer v njem navedene celice A1, saj je tam namreč zapisa pogoj "DA", ki je potreben za to da se v celici B1 izpiše trenutni čas, tako kot sem napisal že v prvem prispevku.
Makro, ki vam ga je zapisal Stenly seavtomatično izvede ob zapiranju delovnega zvezka in tedaj pač "zamrzne" tisto, kar je v celici B1 (torej vaš izračunan čas!)... S to rešitvijo po vsej verjetnosti ne boste zadovoljni, ker:
  1. Ko boste zaprli zvezek, boste izgubili formulo v B1
  2. Ko boste vnesli vrednost v celico A1, se vam bo čas sicer zapisal v B1 a če boste zvezek preračunali se bo čas spremenil
Prava rešitev bo z uporabo Worksheet_Change dogodka, za katerega pa je potrebno vedeti malce več - če nič drugega, ga morate znati vpisati na pravo mesto! Poglejte si zatorej tematike v forumu, ki govorijo o Worksheet_Change, saj je tam napisano tudi kako in zakaj se uporablja. Za iskanje uporabite iskalno polje zgoraj desno...
lp,
Matjaž Prtenjak
Administrator
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Re: Zamrznjen čas

Odgovor Napisal/-a cedra »

Na netu sem našel rešitev, ki zgornji problem reši tudi brez uporabe makra. Rešitev ima sicer manjšo "napakico", ki jo bom opisal na koncu...
Naprej v nek modul zvezka z vašim problemom, prekopirajte spodnjo funkcijo:

Koda: Izberi vse

Function DateStamp(myCell As Range) As Date
Volatile = False
DateStamp = Now
End Function
Nato pa formulo v celici kjer jo potrebujete, spremenite oz. prekopirajte tole

Koda: Izberi vse

=IF(A1="DA"; DateStamp(A1);"")
Sedaj se vam celica s formulo ne bo več spreminjala, pa karkoli boste že pač urejali v zvezku.
Pa še o "napakici"...celica s formulo se bo spremenila le v primeru, če bi pobrisali na listu katerikoli cel stolpec ali celo vrstico in pa še, da pobrišete neko območje, ki ste ga izbrali, na sledeči način: Desni klik na območje > Delete..., kjer vas potem vpraša, kam naj pomakne celice!
Lahko pa označen cel stolpec, celo vrstico ali pa označeno območje, brez skrbi pobrišete s pritiskom na tipko Delete na tipkovnici...
lahko, da vam bo ta rešitev ustrezala! :D saj potem ni treba imeti vklopljeno Izvajanje makrov
Pa še stran, kjer sem našel rešitev:http://www.eggheadcafe.com/software/asp ... hange.aspx
lp,

cedra
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Zamrznjen čas

Odgovor Napisal/-a admin »

Če pogledate vašo rešitev, boste videli, da ste napisali funkcijo... ki je makro... kar pomeni da je to rešitev z makri ;)...

In da bi stvar delovala boste morali imeti vklopljene makre :?
lp,
Matjaž Prtenjak
Administrator
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Re: Zamrznjen čas

Odgovor Napisal/-a cedra »

Upps :oops: ,res je tako.
lp,

cedra
zorro43
Prispevkov: 2
Pridružen: Ne Sep 21, 2014 9:17 pm

Re: Zamrznjen čas

Odgovor Napisal/-a zorro43 »

Pozdravljeni1
spodnjo kodo imam v Excelovem zvezku in deluje super oz. je delovala dokler nisem naložil najnovejši MS Office 2013. Zdaj pa mi datuma in časa ne zamrzne več, celo vse že vpisane celice posodobi na trenutni čas in datum. Ali mi lahko kako pomagate, da bi se čas zopet zamrznil tudi v pisarni 2013

Function DateStamp(myCell As Range) As Date
Volatile = False
DateStamp = Now
End Function
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Zamrznjen čas

Odgovor Napisal/-a admin »

Pozdravljeni,

Na žalost ste si izbrali "napačno" rešitev, ki je delovala bolj po pomoto, kot zares. Vsa "magija" te funkcije je bila v prvi vrstici (Volatile = False), ki Excelu zaukaže, da mu ni potrebno izračunati te funkcije, ko že ima rezultat. In kot ste sami uvideli oz. je bilo tudi zapisano se je ob določenih pogojih (brisanje celotne vrstice ipd.) preračunala. A kakorkoli, ta funkcije bi se lahko kadarkoli preračunala, saj ste Excelu rekli samo, da mu ni potrebno funkcije preračunati, niste pa mu zaukazali, da je ne sme preračunati! Excel 2013 je pri preračunavanju pač bolj natančen in preračuna vse (tudi če mu ni potrebno :))

O teh in podobnih problemih se po spletu odpira veliko tematik in vse rešitve so vedno v tem stilu, kot je bila tista, ki ste jo uporabljali vi. Vse se zanašajo na neke lastnosti Excela ki niso nujno vedno izpolnjene. Največkrat tako, da dovolite rekurzivne funkcije in omejite število rekurzij... Reči želim da so vse rešitev bolj ali manj neki obvozi, ki včasih delujejo včasih ne.

Jaz osebno bi to rešil na drug način, ki zagotovo deluje a je odvisen od konkretnih potreb in to tako, da bi sprogramiral funkcijo Worksheet_Change tako da bi v željene celice zapisala datum samo tedaj, ko je pač izpolnjen tisti pogoj, ki ga iščete. Velika slabost te rešitve pa je, da morate pogoje pač zapisati v VBA in ne znotraj lista... No saj bi se dalo tudi znotraj lista a to zahteva pa res kar precej več dela.

Prilagam vam primer, ki vam v celico B1 zapiše trenutni čas tedaj, ko v celico A1 vpišete x:

Koda: Izberi vse

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim celica As Range
  
  Set celica = Intersect(Target, Range("A1"))
  If celica Is Nothing Then Exit Sub
  
  If celica = "x" Then Range("B1") = Now
End Sub
lp,
Matjaž Prtenjak
Administrator
zorro43
Prispevkov: 2
Pridružen: Ne Sep 21, 2014 9:17 pm

Re: Zamrznjen čas

Odgovor Napisal/-a zorro43 »

Hvala, to pa dela ko ura ;-)
blacky1
Prispevkov: 11
Pridružen: Pe Jan 13, 2012 8:52 am

Re: Zamrznjen čas

Odgovor Napisal/-a blacky1 »

Pozdravljeni,

Moram pohvaliti Vaš forum. Z opisi in nasveti sem si že zelo pomagal. Ker pa sem naletel na težavo in sem nov v uporabi z makroji bi Vas prosil za nasvet.

Uporabil sem to kodo, ki zamrzne čas vnosa, ki zelo lepo deluje kadar je znan 1 pogoj za vnos. Tu pa nastopi moja težava.
Kako popraviti kodo, da bi zapisal čas kadar je vnesen kakršen koli podatek v določenem stolpcu.

Primer:
v stolpec A od vrstice 5 naprej vnašam podatke, ki so lahko števila ali besedilo.
V stolpec B pa bi naj zapisoval čas vnosa.
A B
1B 06.04.2016
2 06.04.2016
B 07.04.2016

Lep pozdrav.

P.s.
Samo tako naprej ker je res zelo v pomoč.
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Zamrznjen čas

Odgovor Napisal/-a admin »

Malce drugače, kot prej:

Koda: Izberi vse

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim celica As Range
  
  Set celica = Intersect(Target, Range("A:A"))
  If celica Is Nothing Then Exit Sub
  If (celica.Row < 5) Then Exit Sub
  
  If celica <> "" Then celica.Offset(0, 1) = Now
End Sub
lp,
Matjaž Prtenjak
Administrator
blacky1
Prispevkov: 11
Pridružen: Pe Jan 13, 2012 8:52 am

Re: Zamrznjen čas

Odgovor Napisal/-a blacky1 »

Hvala, dela kot mora.

Lp
Odgovori