İki Nokta Olmadan Saati Girin - Excel İpuçları

İçindekiler

Bu haftanın Excel sorusu Okinawa'da görevli John'dan geliyor.

Kalkışları ve varışları yansıtmak için bir Excel elektronik tablosu oluşturuyorum. Temel olarak üç hücre olacaktır: Gerçek Kalkış Zamanı, Tahmini Kalan Süre ve Tahmini Varış Zamanı. Kişinin (örneğin) 2345 girebilmesini ve hücrenin ekranı 23:45 gösterecek şekilde otomatik olarak biçimlendirmesini istiyorum. Bunun yerine, formül veya biçimlendirmeden bağımsız olarak 0:00 elde ediyorum. Ayrıca, kullanıcı tuşu ve iki nokta üst üste kaydırmayı başaramazsa, hesaplama 0:00 dışında hiçbir şey göstermez. Bunu yapmanın basit göründüğünü biliyorum, ancak kaydedilen her saniye, özellikle Excel'de tekrar tekrar benzer verileri girerken önemli.

Bunun işe yaraması için bir olay işleyicisi kullanmanız gerekir. Olay işleyicileri Excel 97'de yeniydi ve Excel'de Her Zaman Bir Hücre Değeri Değiştiğinde Bir Makro Çalıştır bölümünde tartışıldı. Bununla birlikte, o ipucunda, olay işleyicisi belirli hücrelere farklı bir format uyguluyordu. Bu uygulama biraz farklıdır, öyleyse olay işleyicisini tekrar ziyaret edelim.

Bir olay işleyici, belirli bir olay meydana geldiğinde her seferinde yürütülen küçük bir makro kodu parçasıdır. Bu durumda, bir hücreyi her değiştirdiğinizde makronun çalışmasını istiyoruz. Bir olay işleyicisi ayarlamak için şu adımları izleyin:

  • Bir olay işleyici, yalnızca tek bir çalışma sayfasıyla ilişkilendirilir. Bu çalışma sayfasından başlayın ve VB düzenleyiciyi açmak için alt-F11'e basın.
  • Sol üst pencerede (Proje - VBA Projesi) çalışma sayfanızın adına çift tıklayın.
  • Sağ bölmede, sol açılır menüye tıklayın ve genel olarak Çalışma Sayfası olarak değiştirin.
  • Sağdaki açılır menüden Değiştir'i seçin.

Bu, Excel'in sizin için aşağıdaki makro kabuğunu önceden girmesine neden olur:

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

Bir hücre her değiştirildiğinde, değiştirilen hücre "Hedef" adlı değişkende bu programa geçirilir. Bir kişi çalışma sayfasında iki nokta üst üste ile bir zaman girdiğinde, birden küçük bir sayı olarak değerlendirilecektir. If bloğu, hücrelerin yalnızca birden büyük olmaları durumunda değiştirilmesini sağlar. Kullanıcı girişini saat ve dakikalara ayırmak ve aralarına iki nokta üst üste eklemek için left () ve right () işlevlerini kullanıyorum.

Kullanıcı "2345" i her girdiğinde, program bu girişi 23:45 olarak değiştirecektir.

Olası Geliştirmeler

Programı yalnızca A&B sütunlarında çalışmak üzere sınırlamak istiyorsanız, Target.Column değerini kontrol edebilir ve kod bloğunu yalnızca ilk iki sütunda iseniz çalıştırabilirsiniz:

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

İki nokta üst üste girilmeden çalışma sayfasında değişiklik yapmak isterseniz (örneğin formül eklemeniz veya başlıkları değiştirmeniz vb.) Bu kısa makro ile olay işleyiciyi kapatabilirsiniz:

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

Bu kavramı alır ve değiştirirseniz, dikkat edilmesi gereken önemli bir kavram vardır. Olay işleyici makrosu, Hedef tarafından başvurulan hücreye yeni bir değer atadığında, Excel bunu bir çalışma sayfası değişikliği olarak sayar. Olay işleyicilerini kısaca çevirmezseniz, Excel yinelemeli olarak olay işleyiciyi çağırmaya başlar ve beklenmedik sonuçlar alırsınız. Bir değişiklik olay işleyicisindeki bir çalışma sayfasında değişiklik yapmadan önce, Application.EnableEvents satırıyla olay işlemeyi geçici olarak askıya aldığınızdan emin olun.

Ilginç makaleler...