Hücreyi boş geçemezsin

ASLAN7410

Altın Üye
Altın Üye
Katılım
15 Temmuz 2012
Mesajlar
2,790
Excel Vers. ve Dili
Ofis 2021 TR 64 Bit
Altın Üyelik Bitiş Tarihi
29.03.2025
Merhaba.

Ekte gönderdiğim excel dosyamın N8:N17 hücrelerini yukarıdan aşağıya doğru doldururken, bir hücre boş geçildiğinde hangi hücre boş geçildiyse onun ismini mesaj olarak göstersin ve boş olan hücreye imlecin gitmesini istiyorum.

yardımcı olur musunuz?
 

Ekli dosyalar

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
5,826
Excel Vers. ve Dili
2019 Türkçe
Merhaba.

Sayfa adını sağ tıklatıp açılan sayfaya aşağıdaki kodları kopyalayın.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim bak As Range
    If Not Intersect(Target, Range("N8:N16")) Is Nothing Then
        For Each bak In Range("N8:N10,N12:N14,N16")
            If bak = "" Then
                MsgBox bak.Address & " boş olamaz.", vbCritical
                bak.Select
                Exit Sub
            End If
        Next
    End If
End Sub
 

ASLAN7410

Altın Üye
Altın Üye
Katılım
15 Temmuz 2012
Mesajlar
2,790
Excel Vers. ve Dili
Ofis 2021 TR 64 Bit
Altın Üyelik Bitiş Tarihi
29.03.2025
Sayın dalgalikur, ilginiz için çok teşekkür ederim.

Yazmış olduğunuz kod gayet güzel çalışıyor ellerinize sağlık, ilk hücreyi dolduruyorum, hemen altındaki hücreye geçer geçmez daha birşey yazmadan ekrana mesaj geliyor, gelen mesaja tamam dedikten sonra hücreyi dolduruyorum.

Benim istediğim doldurmaya çalıştığım hücreden çıkış yaptığımda önceki hücre boş ise mesaj versin ve o hücreye gitsin istemiştim.
Örneğin Sicil hücresi boş ve ben izin çeşidi hücresini yazıp çıkış yaptığımda, sicil hücresi boş diye uyarı versin ve sicil hücresine gitsin. Sicil hücresi dolu, izin çeşidi hücresi boş, izin tarihini doldurduğumda izin çeşidi hücresi boş olduğu için izin çeşidi hücresi boş diye uyarı versin ve imleç o hücreye gitsin.
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
5,826
Excel Vers. ve Dili
2019 Türkçe
O zaman aşağıdaki kodu kullanın.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("N8:N16")) Is Nothing Then
        If Target = "" Then
            MsgBox Target.Address & " boş olamaz.", vbCritical
            Target.Select
            Exit Sub
        End If
    End If
End Sub
 

ASLAN7410

Altın Üye
Altın Üye
Katılım
15 Temmuz 2012
Mesajlar
2,790
Excel Vers. ve Dili
Ofis 2021 TR 64 Bit
Altın Üyelik Bitiş Tarihi
29.03.2025
Sayın dalgalikur, yanlış anlattım galiba, bir tane örnek gönderiyorum, bu örnek satırda çalışıyor, çokta işime yarıyor.

Bu örnek gibi sadece "N8:N16" hücre aralığında çalışmasını istiyorum.
 

Ekli dosyalar

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
5,826
Excel Vers. ve Dili
2019 Türkçe
Aşağıdaki kodları deneyin.
Yanlız önceki örnek dosyada birleştirilmiş hücreler vardı onları çözmelisiniz.

Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("N8:N16")) Is Nothing Then
        If Cells(Target.Row - 1, "N") = "" Then
            MsgBox Cells(Target.Row - 1, "N").Address & " boş olamaz.", vbCritical
            Cells(Target.Row - 1, "N").Select
            Exit Sub
        End If
    End If
End Sub
 

ASLAN7410

Altın Üye
Altın Üye
Katılım
15 Temmuz 2012
Mesajlar
2,790
Excel Vers. ve Dili
Ofis 2021 TR 64 Bit
Altın Üyelik Bitiş Tarihi
29.03.2025
Sayın dalgalikur, elinize ve emeğinize sağlık çok teşekkür ediyorum, ama kod istediğim gibi çalışmıyor.

N8 hücresine tıkladığımda, N7 hücresini boş geçemezsiniz diyor. İlk başlangıç yeri zaten N8 hücresi ile başlıyor.
Ayrıca birleştirilmiş hücreleri çözdüğüm zaman şablonum bozuluyor, mesaj kutusunda hücrenin adresi değilde, hangi hücre boş ise olun solundaki yazı gelebilir mi?
 

Ekli dosyalar

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,510
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Deneyiniz.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo 10
    If Intersect(Target, Range("N8:N16")) Is Nothing Then Exit Sub
    If Target <> "" Then
        If Target.Offset(-1, 0).MergeCells = True Then
            If Target.Offset(-1, 0).MergeArea.Cells(1) = "" Then
                MsgBox "Eksik veri girişi yaptınız! Kontrol ediniz!" & _
                Chr(10) & Chr(10) & Target.Offset(-1, -1).MergeArea.Cells(1), vbCritical
                Target.Offset(-1, 0).MergeArea.Cells(1).Select
            End If
        Else
            If Target.Offset(-1, 0) = "" Then
                MsgBox "Eksik veri girişi yaptınız! Kontrol ediniz!" & _
                Chr(10) & Chr(10) & Target.Offset(-1, -1), vbCritical
                Target.Offset(-1, 0).Select
            End If
        End If
10  End If
End Sub
 

ASLAN7410

Altın Üye
Altın Üye
Katılım
15 Temmuz 2012
Mesajlar
2,790
Excel Vers. ve Dili
Ofis 2021 TR 64 Bit
Altın Üyelik Bitiş Tarihi
29.03.2025
Sayın Korhan Bey ilginiz için çok teşekkür ediyorum, ellerinize sağlık kod'da küçük bir değişiklik olursa güzel olacak.

Bu kod mause ile tıkladığımda çalışsa daha iyi olur. Kodu Private Sub Worksheet_SelectionChange(ByVal Target As Range) bu başlık altına aldığımda çalıştıramadım.

Örneğin ilk olarak N14 hücresini tıkladığımda, ilk N8 hücresi boş olduğu için imlecin o hücreye gitmesini Sicili boş bıraktınız şeklinde mesaj vermesini istiyorum.
Ayrıca kod izni geçireceği ilçe boş bırakıldığında da uyarı vermiyor.

Yapmak istediğim N8 ile N16 hücre aralığında hangi boş hücreye tıklarsam, imlecin ilk boş bırakılan hücreyi gitmesini ve imlecin gittiği hücrenin yanındaki yazıyı mesaja getirmesini istiyorum. (Not: İki hücre birleştirilmiş bulunuyor.)
 

Ekli dosyalar

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,084
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Aşağıdaki kodlar ile boş hücreye geçilmesini sağlayabilirsiniz ama ilçe kısmı sıkıntılı. Çünkü ilçeden sonra veri girilecek bir alan bulunmuyor. Bunu sağlamak için oraya veri girmeden yapılmaması gereken işlemin ne olduğunu bilmemiz ve o işlem yapılmak istendiğinde (örneğin yazdırma, başka sayfaya aktarma gibi) bu uyarının verilmesini sağlayabiliriz:

PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Target, [N9, N10, N12, N13, N14, N16]) Is Nothing Then Exit Sub
        For i = 8 To Target.Row - 1
            If Cells(i, "M") <> "" And Cells(i, "N") = "" Then
                MsgBox "Önce " & Cells(i, "M") & " alanını doldurmalısınız!", vbCritical
                Cells(i, "N").Select
                i = 16
            End If
        Next
End Sub
 

ASLAN7410

Altın Üye
Altın Üye
Katılım
15 Temmuz 2012
Mesajlar
2,790
Excel Vers. ve Dili
Ofis 2021 TR 64 Bit
Altın Üyelik Bitiş Tarihi
29.03.2025
Sayın Yusuf Bey, ellerinize sağlık çok güzel olmuş, tam istediğim gibi çalışıyor çok teşekkür ediyorum.

İlçe kısmına şöyle bi çözüm olabilir mi? Sayfa üzerinde illa ki N8 ile N16 arasındaki başka bi hücreye tıklama olduğunda İlçe kısmını boş bıraktınız mesajı olabilir.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,084
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Yapılabilir ama bu durumda her zaman ilk olarak ilçenin doldurulması gerekir. Örneğin sicili doldurdum, adına geçtim, sırayla dolduruyorum, boş bırakmak gibi bir düşüncem yok ama makro beni hep ilçe kısmını doldurmaya zorlar, halbuki sırası gelince zaten dolduracağım. Dediğim gibi siz bu verileri doldurunca mutlaka başka bir işlem de yapıyorsunuzdur. O işlemi yapmadan önce o kontrol yapılabilir.
 

ASLAN7410

Altın Üye
Altın Üye
Katılım
15 Temmuz 2012
Mesajlar
2,790
Excel Vers. ve Dili
Ofis 2021 TR 64 Bit
Altın Üyelik Bitiş Tarihi
29.03.2025
Sayın Yusuf Bey, dediklerinizi anladım.

Bu hücreleri doldurduğumda yazdırma butonuna tıklama yapıyoruz.
O zaman yazdırma kodlarının üst kısmına aşağıdaki kodu ekleyince sorun çözülüyor.
İlginize ve emeğinize çok teşekkürler.
Hayırlı günler diliyorum.

If Range("N16") = "" Then
MsgBox "İzni geçireceği ilçeyi boş bıraktınız", vbInformation
Exit Sub
End If
 

ASLAN7410

Altın Üye
Altın Üye
Katılım
15 Temmuz 2012
Mesajlar
2,790
Excel Vers. ve Dili
Ofis 2021 TR 64 Bit
Altın Üyelik Bitiş Tarihi
29.03.2025
Sorduğum soruya cevap veren herkese ayrı ayrı teşekkür ediyorum.
Hayırlı günler diliyorum.
 

ASLAN7410

Altın Üye
Altın Üye
Katılım
15 Temmuz 2012
Mesajlar
2,790
Excel Vers. ve Dili
Ofis 2021 TR 64 Bit
Altın Üyelik Bitiş Tarihi
29.03.2025
Yapılabilir ama bu durumda her zaman ilk olarak ilçenin doldurulması gerekir. Örneğin sicili doldurdum, adına geçtim, sırayla dolduruyorum, boş bırakmak gibi bir düşüncem yok ama makro beni hep ilçe kısmını doldurmaya zorlar, halbuki sırası gelince zaten dolduracağım. Dediğim gibi siz bu verileri doldurunca mutlaka başka bir işlem de yapıyorsunuzdur. O işlemi yapmadan önce o kontrol yapılabilir.
Sayfa üzerindeki N8:N16 bu hücre aralığı dışındaki başka hücrelere tıklama olduğunda uyarı olabilir mi?
Yani koda N8:N16 dışındaki hücreler diye bi komut verilebilir mi?
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,084
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Öyleyse yazdırma makrosundaki o kısmı şu şekilde kullanmanız daha doğru olur bence, böylece sadece N16 değil herhangi bir alan boşsa yazdırma işini iptal edebilirsiniz:

PHP:
    For i = 8 To 16
        If Cells(i, "M") <> "" And Cells(i, "N") = "" Then
            MsgBox "Önce " & Cells(i, "M") & " alanını doldurmalısınız!", vbCritical
            Cells(i, "N").Select
            i = 16
            Exit Sub
        End If
    Next
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,084
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Sayfa üzerindeki N8:N16 bu hücre aralığı dışındaki başka hücrelere tıklama olduğunda uyarı olabilir mi?
Yani koda N8:N16 dışındaki hücreler diye bi komut verilebilir mi?
Bunun gerekli olduğunu sanmıyorum, çalışmada sık sık hata vermesine neden olacaktır. Yazdırma sırasındaki kontrol bu iş için yeterlidir.
 

ASLAN7410

Altın Üye
Altın Üye
Katılım
15 Temmuz 2012
Mesajlar
2,790
Excel Vers. ve Dili
Ofis 2021 TR 64 Bit
Altın Üyelik Bitiş Tarihi
29.03.2025
Öyleyse yazdırma makrosundaki o kısmı şu şekilde kullanmanız daha doğru olur bence, böylece sadece N16 değil herhangi bir alan boşsa yazdırma işini iptal edebilirsiniz:

PHP:
    For i = 8 To 16
        If Cells(i, "M") <> "" And Cells(i, "N") = "" Then
            MsgBox "Önce " & Cells(i, "M") & " alanını doldurmalısınız!", vbCritical
            Cells(i, "N").Select
            i = 16
            Exit Sub
        End If
    Next
Sayın Yusuf Bey, bu kod şimdi daha güzel oldu, ellerinize sağlık. Çok teşekkür ediyorum.
Hayırlı günler diliyorum.
 
Üst