Adja meg az időt kettőspont nélkül - Excel tippek

Tartalomjegyzék

Az e heti Excel-kérdés az Okinawában tartózkodó John-tól származik.

Excel-táblázatot építek az indulások és az érkezések tükrében. Alapvetően három cella lesz: Tényleges indulási idő, Becsült időutazás és Becsült érkezési idő. Szeretném, ha az illető csak beírhatná (például) a 2345 kódot, és a cella automatikusan megformázná a kijelzőt, hogy 23:45 legyen. Amit kapok helyette, az 0:00, függetlenül a képlettől és a formázástól. És a számítás nem mutat mást, csak 0:00, ha a felhasználó elmulasztja a kulcs és a kettőspont eltolását. Tudom, hogy egyszerűnek tűnik ezt megtenni, azonban minden elmentett másodperc számít, különösen akkor, ha hasonló adatokat írunk be újra és újra az Excelbe.

A működéshez eseménykezelőt kell használnia. Az eseménykezelők újdonságok voltak az Excel 97-ben, és a Makró futtatása minden alkalommal, amikor egy cella értéke megváltozik az Excelben című témakörben már szó esett róluk. Viszont ebben a tippben az eseménykezelő más formátumot alkalmazott bizonyos cellákra. Ez az alkalmazás kissé eltér, ezért nézzük meg újra az eseménykezelőt.

Az eseménykezelő egy kis makrókód, amelyet minden alkalommal végrehajtanak, amikor egy bizonyos esemény megtörténik. Ebben az esetben azt akarjuk, hogy a makró fusson, amikor cellát cserél. Eseménykezelő beállításához kövesse az alábbi lépéseket:

  • Az eseménykezelő csak egyetlen munkalaphoz van társítva. Indítsa el azt a munkalapot, és nyomja meg az Alt-F11 billentyűt a VB szerkesztő megnyitásához.
  • A bal felső ablakban (Projekt - VBA projekt) kattintson duplán a munkalap nevére.
  • A jobb oldali ablaktáblában kattintson a bal oldali legördülő menüre, és állítsa az általános értéket Munkalapra.
  • A jobb oldali legördülő menüben válassza a Módosítás lehetőséget.

Ez azt eredményezi, hogy az Excel előre megadja a következő makrohéjat az Ön számára:

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

Bármikor, amikor egy cellát megváltoztatnak, a megváltoztatott cellát átadják ennek a programnak a "Target" nevű változóban. Amikor valaki kettőspontot ír be a munkalapba, az kevesebb, mint egy számot fog értékelni. Az If blokk csak akkor változtatja meg a cellákat, ha azok nagyobbak, mint egy. A bal () és a jobb () függvényt használom arra, hogy a felhasználói bevitelt órákra és percekre bontsam, és kettőspontot illesszek közé.

Amikor a felhasználó beírja a "2345" szót, a program ezt a bejegyzést 23: 45-re változtatja.

Lehetséges fejlesztések

Ha azt szeretné, hogy a program csak az A&B oszlopokra működjön, ellenőrizheti a Target.Column értékét, és csak akkor hajthatja végre a kódblokkot, ha az első két oszlopban tartózkodik:

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

Ha valaha is módosítani szeretné a munkalapot kettőspont megadása nélkül (például képleteket kell hozzáadnia, vagy címsorokat kell módosítania, stb.), Akkor ezzel a rövid makróval megfordíthatja az eseménykezelőt:

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

Ha ezt a koncepciót átveszi és megváltoztatja, akkor fontos tudnivalókkal kell rendelkeznie. Amikor az eseménykezelő makró új értéket rendel a Target által hivatkozott cellához, az Excel ezt munkalap-változásként számolja. Ha röviden nem kapcsolja be az eseménykezelőket, akkor az Excel rekurzív módon elkezdi hívni az eseménykezelőt, és váratlan eredményeket kap. Mielőtt módosítaná a munkalapot a változásesemény-kezelőben, győződjön meg arról, hogy ideiglenesen szünetelteti az eseménykezelést az Application.EnableEvents sorban.

érdekes cikkek...