Унесите време без двотачке - Екцел савети

Преглед садржаја

Овонедељно Екцел питање долази од Џона стационираног на Окинави.

Израђујем Екцел табелу која одражава одласке и доласке. У основи ће бити три ћелије: Стварно време поласка, Процењено време обилажења и Процењено време доласка. Волео бих да особа само може да уђе (на пример) 2345 и да ћелија аутоматски форматира екран тако да приказује 23:45. Уместо тога добијам 0:00, без обзира на формулу или форматирање. Израчун неће приказати ништа осим 0:00 ако корисник не успе да помери тастер и двотачку. Знам да се чини тако једноставно, међутим, свака мала сачувана секунда се рачуна, посебно када се у Екцел изнова уносе слични подаци.

Да би ово успело, потребно је да користите руковач догађајима. Обрађивачи догађаја су били нови у програму Екцел 97, а о њима се расправљало у делу Покретање макроа сваки пут када се промене вредности ћелије у програму Екцел. Међутим, још у том савету, водитељ догађаја је примењивао другачији формат на одређене ћелије. Ова апликација се мало разликује, па хајде да поново посетимо обрађивач догађаја.

Обрађивач догађаја је мали део макро кода који се извршава сваки пут када се догоди одређени догађај. У овом случају желимо да се макро изврши сваки пут када промените ћелију. Да бисте поставили обрађивач догађаја, следите ове кораке:

  • Обрађивач догађаја повезан је са само једним радним листом. Почните од тог радног листа и притисните алт-Ф11 да бисте отворили ВБ едитор.
  • У горњем левом прозору (Пројекат - ВБА пројекат) двапут кликните на назив свог радног листа.
  • У десном окну кликните леви падајући мени и промените опште у Радни лист.
  • У десном падајућем менију изаберите Промени.

То ће довести до тога да Екцел унапред унесе следећу љуску макронаредби за вас:

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

Сваки пут када се ћелија промени, ћелија која је промењена прослеђује се овом програму у променљивој названој „Циљ“. Када неко на радном листу унесе време са двотачком, оно ће се израчунати бројем мањим од један. Блок Иф осигурава да ћелије мењају само ако су веће од једне. Користим функције лево () и десно () да разбијем унос корисника на сате и минуте и да између њих убацим двотачку.

Кад год корисник унесе „2345“, програм ће променити овај унос у 23:45.

Могућа побољшања

Ако желите да ограничите програм на рад само на колонама А&Б, можете проверити вредност Таргет.Цолумн и извршити блок кода само ако сте у прве две колоне:

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

Ако икада пожелите да направите промене на радном листу без уношења двотачака (на пример, да ли треба да додате формуле или промените наслове итд.), Можете да окренете руковач догађајима помоћу овог кратког макронаредбе:

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

Ако узмете овај концепт и промените га, мора бити свестан важног концепта. Када макро за обраду догађаја додели нову вредност ћелији на коју се позива Таргет, Екцел то рачуна као промену радног листа. Ако не окренете на кратко обрађиваче догађаја, Екцел ће рекурзивно почети да позива обрађивач догађаја и добићете неочекиване резултате. Пре него што промените радни лист у обрађивачу догађаја промена, привремено обуставите руковање догађајима помоћу линије Апплицатион.ЕнаблеЕвентс.

Занимљиви Чланци...