Unesite vrijeme bez dvotočke - Excel savjeti

Ovotjedno pitanje za Excel dolazi od Johna stacioniranog na Okinawi.

Izrađujem proračunsku tablicu Excel kako bi odražavala odlaske i dolaske. U osnovi će biti tri ćelije: Stvarno vrijeme polaska, Procijenjeno vrijeme putovanja i Procijenjeno vrijeme dolaska. Želio bih da ta osoba može samo unijeti (na primjer) 2345 i neka ćelija automatski formatira zaslon tako da prikazuje 23:45. Umjesto toga dobivam 0:00, bez obzira na formulu ili oblikovanje. Izračun neće prikazati ništa osim 0:00 ako korisnik ne uspije pomaknuti tipku i dvotačku. Znam da se to čini jednostavno, međutim, svaka mala spremljena sekunda je važna, pogotovo kad se u Excel iznova unose slični podaci.

Da bi ovo uspjelo, trebate koristiti rukovatelj događajima. Obrađivači događaja bili su novi u programu Excel 97, a raspravljalo se o njima u Pokretanju makronaredbe svaki put kad se vrijednost vrijednosti ćelije promijeni u programu Excel. Međutim, još u tom savjetu, voditelj događaja primjenjivao je drugačiji format na određene stanice. Ova se aplikacija malo razlikuje, pa posjetimo voditelj događaja.

Obrađivač događaja je mali komad makronaredbe koji se izvršava svaki put kad se dogodi određeni događaj. U ovom slučaju želimo da se makronaredba pokrene kad god promijenite ćeliju. Da biste postavili obrađivač događaja, slijedite ove korake:

  • Obrađivač događaja povezan je sa samo jednim radnim listom. Počnite s tog radnog lista i pritisnite alt-F11 da biste otvorili VB editor.
  • U gornjem lijevom prozoru (Projekt - VBA projekt) dvaput kliknite naziv svog radnog lista.
  • U desnom oknu kliknite lijevi padajući izbornik i općenito promijenite u Radni list.
  • U desnom padajućem izborniku odaberite Promijeni.

To će uzrokovati da Excel unaprijed unese sljedeću ljusku makronaredbi za vas:

Private Sub Worksheet_Change(ByVal Target As Range) UserInput = Target.Value If UserInput> 1 Then NewInput = Left(UserInput, Len(UserInput) - 2) & ":" & Right(UserInput, 2) Application.EnableEvents = False Target = NewInput Application.EnableEvents = True End If End Sub

Kad god se stanica promijeni, stanica koja je promijenjena prosljeđuje se ovom programu u varijabli nazvanoj "Cilj". Kada netko unese vrijeme s dvotačkom u radni list, to će se izračunati brojem manjim od jedan. Blok If osigurava promjenu stanica samo ako su veće od jedne. Koristim funkcije left () i right () da podijelim unos korisnika na sate i minute i umetnem dvotačku između.

Kad god korisnik unese "2345", program će taj unos promijeniti u 23:45.

Moguća poboljšanja

Ako želite ograničiti program na rad samo na stupcima A&B, možete provjeriti vrijednost Target.Column i izvršiti blok koda samo ako ste u prva dva stupca:

Private Sub Worksheet_Change(ByVal Target As Range) ThisColumn = Target.Column If ThisColumn 1 Then NewInput = Left(UserInput, Len(UserInput) - 2) & ":" & Right(UserInput, 2) Application.EnableEvents = False Target = NewInput Application.EnableEvents = True End If End If End Sub

Ako ikada poželite izmijeniti radni list bez unošenja dvotačaka (na primjer, trebate li dodati formule ili promijeniti naslove, itd.), Možete okrenuti obrađivač događaja s ovom kratkom makronaredbom:

Sub TurnEventHanderOff() Application.EnableEvents = False End Sub You can turn event handlers back on with this macro: Sub TurnEventHanderOff() Application.EnableEvents = True End Sub

Ako uzmete ovaj koncept i promijenite ga, mora biti svjestan važnog koncepta. Kada makronaredba događaja dodijeli novu vrijednost ćeliji na koju se poziva Target, Excel to računa kao promjenu radnog lista. Ako nakratko ne okrenete obrađivače događaja, tada će Excel rekurzivno započeti pozivati ​​obrađivač događaja i dobit ćete neočekivane rezultate. Prije promjene na radnom listu u obrađivaču događaja promjene, privremeno obustavite rukovanje događajima linijom Application.EnableEvents.

Zanimljivi članci...