Įveskite laiką be dvitaškio - „Excel“ patarimai

Šios savaitės „Excel“ klausimą pateikia Jonas, įsikūręs Okinavoje.

Kuriu „Excel“ skaičiuoklę, kad atspindėčiau išvykimus ir atvykimus. Iš esmės bus trys langeliai: faktinis išvykimo laikas, numatomas laiko maršrutas ir numatomas atvykimo laikas. Norėčiau, kad asmuo galėtų tiesiog įvesti (pavyzdžiui) 2345 ir langelis automatiškai suformatuotų ekraną, kad būtų rodoma 23:45. Tai, ką gaunu, yra 0:00, neatsižvelgiant į formulę ar formatą. Jei vartotojui nepavyksta perkelti klavišo ir dvitaškio, skaičiuojant nebus rodomas nieko, išskyrus 0:00. Žinau, kad tai padaryti atrodo paprasta, tačiau kiekviena išsaugota sekundė yra svarbi, ypač kai „Excel“ įvedami panašūs duomenys vėl ir vėl.

Norėdami tai padaryti, turite naudoti įvykių tvarkytuvą. Įvykių tvarkytojai buvo nauji „Excel 97“ ir apie juos buvo kalbėta dar kartą skiltyje „Vykdyti makrokomandą kiekvieną kartą, kai„ Excel “keičiasi langelio vertė. Tačiau atgal į šį patarimą įvykių tvarkytojas tam tikroms langeliams pritaikė kitokį formatą. Ši programa yra šiek tiek kitokia, todėl dar kartą apsilankykime renginių tvarkytuve.

Įvykių tvarkytuvas yra nedidelis makrokodo kodas, kuris vykdomas kiekvieną kartą, kai įvyksta tam tikras įvykis. Šiuo atveju norime, kad makrokomanda būtų paleista, kai pakeisite langelį. Norėdami nustatyti įvykių tvarkytuvą, atlikite šiuos veiksmus:

  • Įvykių tvarkytuvas susietas tik su vienu darbalapiu. Pradėkite nuo to darbalapio ir paspauskite alt-F11, kad atidarytumėte VB redaktorių.
  • Viršutiniame kairiajame lange (Projektas - VBA projektas) dukart spustelėkite savo darbalapio pavadinimą.
  • Dešinėje srityje spustelėkite kairįjį išskleidžiamąjį meniu ir pakeiskite „General“ į „Worksheet“.
  • Dešiniajame išskleidžiamajame meniu pasirinkite Keisti.

Tai paskatins „Excel“ iš anksto įvesti šį makrokomandos apvalkalą:

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

Bet kuriuo metu pakeitus langelį, pakeista ląstelė perduodama šiai programai kintamajame „Target“. Kai kas nors į darbalapį įrašys laiką su dvitaškiu, jis bus įvertintas mažiau nei vienu skaičiumi. Jei blokas pakeičia langelius, tik jei jie yra didesni nei viena. Naudoju kairę () ir dešinę () funkcijas, norėdamas suskaidyti vartotojo įvestį į valandas ir minutes ir tarp jų įterpti dvitaškį.

Kai tik vartotojas įves „2345“, programa pakeis šį įrašą į 23:45.

Galimi patobulinimai

Jei norite apriboti programos veikimą tik A ir B stulpeliuose, galite patikrinti „Target.Column“ reikšmę ir atlikti kodo bloką tik tada, jei esate pirmuose dviejuose stulpeliuose:

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

Jei kada norite keisti darbalapį neįvedę dvitaškių (pavyzdžiui, ar reikia pridėti formules, pakeisti antraštes ir pan.), Galite pasukti įvykių tvarkytuvą naudodami šią trumpą makrokomandą:

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

Jei perimsite šią sąvoką ir ją pakeisite, turite žinoti svarbią sąvoką. Kai įvykių apdorojimo makrokomanda priskiria naują reikšmę langeliui, nurodytam „Target“, „Excel“ tai skaičiuoja kaip darbalapio pakeitimą. Jei trumpai nesukate įvykių tvarkytojų, „Excel“ rekursyviai pradės skambinti įvykių tvarkytuvui ir gausite netikėtų rezultatų. Prieš keisdami darbalapį pakeitimų įvykių tvarkyklėje, būtinai laikinai sustabdykite įvykių tvarkymą naudodami eilutę „Application.EnableEvents“.

Įdomios straipsniai...