Enter ile makro tetikleme

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,781
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Merhaba Arkadaşlar,
ilkokulda okuyan torunlarım için toplama çalışması yapmaya çalışıyorum.
G3:J3 arasında 1 yada 2 yada 3 yada 4 basamaklı bir sayı geliyor
G5:J5 arasında 1 yada 2 yada 3 yada 4 basamaklı bir sayı geliyor
Toplam ise G8:J8 e yazılıyor. Alt alta yapılan toplama işlemi kurallara uygun olarak sağdan sola doğru yapılıyor.
Örnek olarak 15 ve 30 sayılarını toplayalım.
J8 e 5 yazıp entere basınca I8 e geçiyor,
I8 e 4 yazıp entere basınca H8 e geçiyor, H8 ilk boş hücre F8:J8 alanında. H8 de entere basınca Bitir adlı makro çalışsın istiyorum.
Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Static rng As Range
    If Not Intersect(Range("F8:J8"), Target) Is Nothing And Target.Text = "" Then
        If Not rng Is Nothing Then
            If rng.Text = "" Then
                Call Bitir
            End If
        End If
        Set rng = Target
    End If
End Sub
Arkadaşların desteği ile oluşan bu makro ilk çalışmada doğru çalışıyor, ikincide maalesef hatalı.
Uygun olan arkadaşım destek atarsa çok makbule geçer.
Saygılarımla
 

Ekli dosyalar

AdemCan

Altın Üye
Destek Ekibi
Katılım
1 Eylül 2008
Mesajlar
1,386
Excel Vers. ve Dili
2019 TR
Merhaba, alternatif olarak kullanabilirsiniz.
Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$J$8" Then
        If Target.Offset(-3, 0) = "" And Target.Offset(0, -1) = "" Then
            Call Bitir
        End If
    ElseIf Target.Address = "$I$8" Then
         If Target.Offset(-3, 0) = "" And Target.Offset(0, -1) = "" Then
            Call Bitir
        End If
    ElseIf Target.Address = "$H$8" Then
         If Target.Offset(-3, 0) = "" And Target.Offset(0, -1) = "" Then
            Call Bitir
        End If
    ElseIf Target.Address = "$G$8" Then
         If Target.Offset(-3, 0) = "" And Target.Offset(0, -1) = "" Then
            Call Bitir
        End If
    End If
End Sub
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,781
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Sayın AdemCan Hocam,
İlginize çok teşekkür ederim, İnceleyip bilgi vereceğim.
Saygılarımla
 

AdemCan

Altın Üye
Destek Ekibi
Katılım
1 Eylül 2008
Mesajlar
1,386
Excel Vers. ve Dili
2019 TR
Mevcut kullandığınız kodlar içinde
Getir() kodlarındaki Range("J8").Select satırını Range("K8").Select olarak değiştirip SelectionChange kodunu da güncelleyiniz.
Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Static rng As Range
    If Not Intersect(Range("G8:J8"), Target) Is Nothing Then
        If Not rng Is Nothing Then
            If rng.Offset(-3, 0) = "" And rng.Offset(0, -1) = "" Then
                Call Bitir
            End If
        End If
        Set rng = Target
    End If
End Sub
Toplama işlemi başa dönünce K8 hücresini seçeceği için ilk başta da Enter tuşuna basmanız gerekecek.
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,781
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Gördüm onu üstadım. İlginize tekrar teşekkür ederim.
Saygılarımla
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,781
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Sayın AdemCan Hocam,
İlginize teşekkür ederim, ancak ilk mesajınızdaki makro, iki basamaklı sayıları toplarken toplam sonucu 3 basamaklı olduğunda yüzler basamağını yazdırmayıp hatalı olarak belirtip yeni işleme geçiyor. İkinci mesajınızdaki makro ise bir sefer doğru bir sefer yanlış işlem yapıyor.
Saygılarımla
 

AdemCan

Altın Üye
Destek Ekibi
Katılım
1 Eylül 2008
Mesajlar
1,386
Excel Vers. ve Dili
2019 TR
Merhaba, örnek dosyanızdaki işlemlere göre ilk kodlar doğru sonuç veriyor.

Ancak İşlemleri 3 ve 4 basamaklı olacak şekilde değiştirip aşağıdaki kod ile 2 - 4 basamaklı işlemleri yapabilirsiniz.
Sadece toplam sonucu 5 basamaklı olan işlem yapmamanız gerekir.

Getir() kodunda tekrardan Range("J8").Select satırını kullanabilirsiniz.
Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Static rng As Range
    If Not Intersect(Range("F8:J8"), Target) Is Nothing Then
        f = [J8]:  e = [I8]: d = [H8]: c = [G8]
        zz = c & d & e & f
        If Not rng Is Nothing Then
            If Len(zz) = Len([D1]) Then
                Call Bitir
            End If
        End If
        Set rng = Target
    End If
End Sub
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,781
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Sayın AdemCan Hocam,
İlginize çok teşekkür ederim1 basamaklıda da gayet düzgün çalışıyor. Ben Getir makrosunda [J5]=[B1] yazmışım, [J5]=[C1] olacak. Ayrıca 8. satırda da hata varmış. Fark etmemişim. Kusuruma bakmayın lütfen.
Saygılarımla
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,781
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Sayın AdemCan Hocam,
Tekrar ilginize teşekkür ederim. Koşula bağlı olmadan çalışıyor diye düşünüyorum.
Saygılarımla
Harici_Baglanti
not : Harici_Baglanti silinebilir
 

Ekli dosyalar

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,781
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Bir şey istemiyorum. Bu haliyle 1 basamaklı da 4 basamaklı da çalışıyor. Sonuç 5 başaklı da olsa yine çalışıyor. Tekrar teşekkür etmek için yazmıştım.
Saygılarımla
 

AdemCan

Altın Üye
Destek Ekibi
Katılım
1 Eylül 2008
Mesajlar
1,386
Excel Vers. ve Dili
2019 TR
Rica ederim :) Sizin elinize sağlık.
 
Üst