Ievadiet laiku bez resnās zarnas - Excel padomi

Satura rādītājs

Šīs nedēļas Excel jautājums nāk no Džona, kurš atrodas Okinavā.

Es veidoju Excel izklājlapu, lai atspoguļotu izlidošanu un ienākšanu. Būtībā būs trīs šūnas: faktiskais izlidošanas laiks, paredzamais laika maršruts un aptuvenais ierašanās laiks. Es gribētu, lai persona vienkārši varētu ievadīt (piemēram) 2345 un šūna automātiski formatētu displeju, lai parādītu 23:45. Tā vietā es saņemu 0:00 neatkarīgi no formulas vai formatējuma. Ja lietotājs neizdodas nospiest taustiņu un kolu, aprēķins neparādīs tikai 0:00. Es zinu, ka tas šķiet vienkārši izdarāms, tomēr katra mazā saglabātā sekunde ir svarīga, īpaši, ja Excel programmā atkal un atkal ievadāt līdzīgus datus.

Lai tas darbotos, jums jāizmanto notikumu apstrādātājs. Notikumu apstrādātāji bija jauni programmā Excel 97, un tie tika apspriesti sadaļā Makro izpildīšana katru reizi, kad šūnas vērtība mainās programmā Excel. Tomēr šajā padomā notikumu apstrādātājs dažām šūnām piemēroja citu formātu. Šī lietojumprogramma ir nedaudz atšķirīga, tāpēc vēlreiz apmeklēsim pasākumu apstrādātāju.

Notikumu apstrādātājs ir neliels makro koda gabals, kas tiek izpildīts katru reizi, kad notiek noteikts notikums. Šajā gadījumā mēs vēlamies, lai makro darbotos ikreiz, kad maināt šūnu. Lai iestatītu notikumu apstrādātāju, rīkojieties šādi:

  • Notikumu apstrādātājs ir saistīts tikai ar vienu darblapu. Sāciet no šīs darblapas un nospiediet alt-F11, lai atvērtu VB redaktoru.
  • Augšējā kreisajā logā (Project - VBA Project) veiciet dubultklikšķi uz darblapas nosaukuma.
  • Labajā rūtī noklikšķiniet uz kreisās nolaižamās izvēlnes un mainiet vispārīgu uz Worksheet.
  • Labajā nolaižamajā izvēlnē atlasiet Mainīt.

Tas liks programmai Excel iepriekš ievadīt šo makro apvalku:

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

Jebkurā laikā, kad šūna tiek mainīta, mainītā šūna tiek pārsūtīta šai programmai mainīgajā ar nosaukumu “Target”. Kad kāds darblapā ievada laiku ar kolu, tas tiks novērtēts ar skaitli, kas ir mazāks par vienu. Ja bloķē, šūnas var mainīt tikai tad, ja tās ir lielākas par vienu. Es izmantoju kreiso () un labo () funkcijas, lai sadalītu lietotāja ievadīto informāciju stundās un minūtēs un starp tām ievietotu kolu.

Ikreiz, kad lietotājs ievada "2345", programma mainīs šo ierakstu uz 23:45.

Iespējamie uzlabojumi

Ja vēlaties ierobežot programmas darbību tikai A un B kolonnās, varat pārbaudīt Target.Column vērtību un izpildīt kodu bloku tikai tad, ja atrodaties pirmajās divās kolonnās:

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

Ja kādreiz vēlaties veikt izmaiņas darblapā bez kolu ievadīšanas (piemēram, vai jums jāpievieno formulas vai jāmaina virsraksti utt.), Varat pagriezt notikumu apstrādātāju ar šo īso makro:

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

Ja jūs lietojat šo jēdzienu un maināt, ir jāzina svarīgs jēdziens. Kad notikumu apstrādes makro piešķir jaunu vērtību šūnai, uz kuru norāda Target, Excel to ieskaita kā darblapas izmaiņas. Ja īsi neapmeklējat notikumu apstrādātājus, Excel rekursīvi sāks zvanīt uz notikumu apstrādātāju, un jūs saņemsiet negaidītus rezultātus. Pirms izmaiņu veikšanas izmaiņu notikumu apstrādātāja darblapā noteikti uz laiku apturiet notikumu apstrādi, izmantojot līniju Application.EnableEvents.

Interesanti raksti...