• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Hücreye Veri Girişinin Engellenmesi

mijuf

Altın Üye
Katılım
17 Aralık 2021
Mesajlar
14
Excel Vers. ve Dili
2016
Merhaba,
Mümkünse bir ricam olacak. Elimdeki tabloda B2 hücresinden itibaren B sütununun tamamına bir veri girişi olması durumunda C sütunundaki karşılık hücreye bir veri girişinin engellenmesi gibi bir ihtiyacım var.

Ben eğer B2 hücresine bir veri girdiysem C2 hücresinin veri girişine açık olması, boş bıraktıysam C2'nin kilitli (veri girişine müsade edilmemesi) gibi bir imkan var mı?

Veri doğrulama olarak denedim ama olmadı.

İyi akşamlar.
 
Merhaba,

Ekteki örnek dosyayı inceleyiniz.

Dosyada iki sayfa var. İlk sayfada VERİ DOĞRULAMA uygulanmıştır. İkinci sayfada ise işlem MAKRO ile yapılmaktadır.

Dilediğinizi kullanabilirsiniz.
 

Ekli dosyalar

Merhaba,
Resimdeki gibi dener misiniz?
Geç kalmışım :)

245230
 
Hayırlı sabahlar eski bir konu ama Korhan Hocam bu kodları B sütunundan başlayarak Z harfine veya istediğimiz bir sütuna kadar bir önceki hücre boş ise veri girilemez şeklinde uyarlamak mümkün mü? A boş ise B ye B boş ise C ye veri girilemez şeklinde düzenlenmesi mümkün mü?
 
Bu kod ile, belirttiğiniz gibi, A sütunundaki bir hücre boşsa, B sütununa veri giremez. Eğer B sütunu boşsa, C sütununa veri giremez. Bu mantık tüm sütunlar için geçerlidir ve ihtiyaca göre kolayca uyarlanabilir.


Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Sütun As Long
    Dim Satır As Long

    ' Değişiklik yapılan hücrenin sütun numarasını belirleyelim
    Sütun = Target.Column
    Satır = Target.Row

    ' Sadece B2:Z1000 hücrelerini kontrol etmek için
    If Sütun >= 2 And Sütun <= 26 And Satır >= 1 Then
        ' Eğer B sütunundaki hücre boşsa, C sütununa veri girilemez
        If Sütun = 2 And IsEmpty(Cells(Satır, 1).Value) Then
            MsgBox "A sütunundaki hücre boş olduğu için B sütununa veri giremezsiniz.", vbExclamation
            Application.EnableEvents = False
            Target.ClearContents ' B sütununa yazılan değeri temizle
            Application.EnableEvents = True
            Exit Sub
        End If
        
        ' Eğer C sütunundaki hücre boşsa, D sütununa veri girilemez
        If Sütun = 3 And IsEmpty(Cells(Satır, 2).Value) Then
            MsgBox "B sütunundaki hücre boş olduğu için C sütununa veri giremezsiniz.", vbExclamation
            Application.EnableEvents = False
            Target.ClearContents ' C sütununa yazılan değeri temizle
            Application.EnableEvents = True
            Exit Sub
        End If
        
        ' Bu mantığı diğer sütunlar için de devam ettirebiliriz:
        If Sütun > 2 And IsEmpty(Cells(Satır, Sütun - 1).Value) Then
            MsgBox Chr(64 + Sütun - 1) & " sütunundaki hücre boş olduğu için " & Chr(64 + Sütun) & " sütununa veri giremezsiniz.", vbExclamation
            Application.EnableEvents = False
            Target.ClearContents ' Hedef hücreyi temizle
            Application.EnableEvents = True
            Exit Sub
        End If
    End If
End Sub


  • Excel dosyanızı açın.
  • Alt + F11 tuşlarına basarak VBA editörünü açın.
  • Sol taraftaki "VBAProject" penceresinde, çalıştığınız sayfayı (örneğin Sheet1) seçin.
  • Sağ tıklayın ve "View Code" seçeneğine tıklayın.
  • Aşağıdaki kodu açılan pencerede yapıştırın.
Kullanım:
  • Bu VBA kodu, A, B, C... Z sütunları arasında B sütunundan başlayarak, bir hücreye veri girilmeden önce önceki hücrenin boş olup olmadığını kontrol eder.
  • Eğer boşsa, o hücreye veri girişi engellenir ve kullanıcıya uyarı mesajı gösterilir.
 
Cems hocam emeğine sağlık çok teşekkür ederim. küçük bir sorum daha olacak boş hücre uyarısını verdikten sonra imleci o boş olan hücreye atabilir mi? B sütunu hücresi boş dediğinde örneğin B10 hücresi ise o hücreye dönüş yapabilir mi?
 
Merhaba,
Alternatif olsun.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Row < 2 Or Target.Value = "" Then Exit Sub

If Target.Column > 1 And Target.Offset(0, -1) = "" Then
    MsgBox "Sol Hücre Dolu Değil.....", vbInformation
    Target.Value = ""
    Target.Select
End If

End Sub
 
boş hücre uyarısını verdikten sonra, imleci boş olan hücreye yönlendirebilirsiniz. Bunun içinTarget değil Application.Goto kullanmak dogru olur


Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Sütun As Long
    Dim Satır As Long

    ' Değişiklik yapılan hücrenin sütun numarasını belirleyelim
    Sütun = Target.Column
    Satır = Target.Row

    ' Sadece B2:Z1000 hücrelerini kontrol etmek için
    If Sütun >= 2 And Sütun <= 26 And Satır >= 1 Then
        ' Eğer B sütunundaki hücre boşsa, A sütununa bakılır
        If Sütun = 2 And IsEmpty(Cells(Satır, 1).Value) Then
            MsgBox "A sütunundaki hücre boş olduğu için B sütununa veri giremezsiniz.", vbExclamation
            Application.EnableEvents = False
            Target.ClearContents ' B sütununa yazılan değeri temizle
            Application.EnableEvents = True
            ' B sütunundaki o hücreye odaklanalım
            Application.Goto Cells(Satır, 2)
            Exit Sub
        End If
        
        ' Eğer C sütunundaki hücre boşsa, B sütununa bakılır
        If Sütun = 3 And IsEmpty(Cells(Satır, 2).Value) Then
            MsgBox "B sütunundaki hücre boş olduğu için C sütununa veri giremezsiniz.", vbExclamation
            Application.EnableEvents = False
            Target.ClearContents ' C sütununa yazılan değeri temizle
            Application.EnableEvents = True
            ' C sütunundaki o hücreye odaklanalım
            Application.Goto Cells(Satır, 3)
            Exit Sub
        End If
        
        ' Bu mantığı diğer sütunlar için de devam ettirebiliriz:
        If Sütun > 2 And IsEmpty(Cells(Satır, Sütun - 1).Value) Then
            MsgBox Chr(64 + Sütun - 1) & " sütunundaki hücre boş olduğu için " & Chr(64 + Sütun) & " sütununa veri giremezsiniz.", vbExclamation
            Application.EnableEvents = False
            Target.ClearContents ' Hedef hücreyi temizle
            Application.EnableEvents = True
            ' İlgili hücreye odaklanalım
            Application.Goto Cells(Satır, Sütun - 1)
            Exit Sub
        End If
    End If
End Sub

Dener ve sonucu bildirirseniz sevinirim. Bu arada çok değerli Sayın @Necdet kodu baya kısaltmış şimdi farkettim :)
 
Cemss hocam emeğine sağlık çok güzel çalışıyor. çok sağolasın Necdet Hocam sizede çok teşekkür ederim kısa ve öz ancak sizin kodlarınızda da sol hücreğe değil aynı hücre de kalıyor boş olarak belirttiği hücreye imleci atabilir miyiz. Sayın Cemss hocamın belirttiği şekil bu kodu Application.Goto yapmaya çalıştım ancak yapamadım.
 
Merhaba,
Sanırım siz satırda ilk boş hücreyi seçsin istiyorsunuz. Eğer öyle ise aşağıdaki kodu kullanabilirsiniz.
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Row < 2 Or Target.Value = "" Then Exit Sub

If Target.Column > 1 And Target.Offset(0, -1) = "" Then
    MsgBox "Sol Hücre Dolu Değil.....", vbInformation
    Target.Value = ""
    Target.End(xlToLeft).Offset(0, 1).Activate
End If

End Sub
 
çok daha iyi olmuş Necdet Hocam emeğine sağlık istediğim veri girilen hücreden önceki hücre boş ise imlecin oraya gitmesi idi ancak böyle daha güzel komple satırı kontrol etmiş oluyor çok teşekkür ederim
 
Aslında kodları WorkSheetChange olayında değil Worksheet_SelectionChange olayında olursa doğrudan boş hücreye veri giriş yapar hale gelirsiniz.
Onu da siz yaparsınız artık.
 
Worksheet_SelectionChange bu şekilde aynı sayfada başka kodlar başlıyor hocam o zaman da debug hatası veriyor ki onu benim uyarlamam çok zor bu şekil ziyadesiyle işimi görüyor çok sağolasın
 
Necdet hocam A sütununa veri girdiğim de
If Target.Column > 1 And Target.Offset(0, -1) = "" Then
bu satırda hata var diyor A sütununa daha önce veri girilmiş ise veya A sütunu boş bırakılırsa sorunsuz çalışıyor
 
Merhaba,
ilk kontkrolde target.row demişim aslında target.column olmalıydı

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column < 2 Or Target.Value = "" Then Exit Sub

If Target.Column > 1 And Target.Offset(0, -1) = "" Then
    MsgBox "Sol Hücre Dolu Değil.....", vbInformation
    Target.Value = ""
    Target.End(xlToLeft).Offset(0, 1).Activate
End If

End Sub
 
Necdet hocam 10 gündür şehir dışında idim bakamamıştım emeğine sağlık çok teşekkür ediyorum. Geç dönüş yaptığım için kusura kalma
 
Geri
Üst