Silinmiş Hücre için MsgBox Uyarısı

hakki83

Altın Üye
Katılım
30 Eylül 2021
Mesajlar
533
Excel Vers. ve Dili
Excel 2016 Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
30-09-2026
Selamlar


A2 ile A10000 arası sırayla tarihler yazılı.

Eğer yanlışlıkla bu tarihlerden bir veya birden fazlası yanlışlıkla silinirse,

Activate olayında MsgBox ile " ........ Hücre-Hücrelerdeki Tarihler Yanlışlıkla Silinmiş, Düzeltiniz"

uyarısı verdirebilir miyiz?

Silinmiş bir tarih yoksa, herhangi bir uyarı vermeyecek.

(Not: Sayfayı Koru özelliğini bu dosyada kullanmıyorum)
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,160
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bu şekilde işinize yarar mı?

C++:
Private Sub Worksheet_Activate()
    If WorksheetFunction.CountBlank(Range("A2:A10000")) > 0 Then
        MsgBox "Bazı tarihlerin silindiği tespit edildi. Lütfen düzeltiniz.", vbCritical
    End If
End Sub
 

dEdE

Destek Ekibi
Destek Ekibi
Katılım
1 Temmuz 2005
Mesajlar
2,605
Excel Vers. ve Dili
Ofis 2013 TR 64 Bit
Alternatif
Kod:
Private Sub Worksheet_Activate()
    ss = Cells(Rows.Count, "A").End(3).Row - 1
    For Each Hücre In Range("A2:A" & ss)
        If Hücre = "" Then
            Satır = Satır & "-" & "A" & Hücre.Row
        End If
    Next
    If Satır <> "" Then _
    MsgBox Satır & vbCrLf & " Hücrelerindeki Tarihler Yanlışlıkla Silinmiş, Düzeltiniz", vbCritical, "D İ K K A T !!!"
End Sub
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,160
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Ek bilgi...

Eğer ilgili alanda silinmiş hücre sayısı çoksa MSGBOX hepsinin adresini görüntülemek için yetersiz kalacaktır.
 

hakki83

Altın Üye
Katılım
30 Eylül 2021
Mesajlar
533
Excel Vers. ve Dili
Excel 2016 Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
30-09-2026
Emekleriniz için teşekkürler değerli hocalarımız.
Kodlar gayet güzel.
 

dEdE

Destek Ekibi
Destek Ekibi
Katılım
1 Temmuz 2005
Mesajlar
2,605
Excel Vers. ve Dili
Ofis 2013 TR 64 Bit
Ek bilgi...
Eğer ilgili alanda silinmiş hücre sayısı çoksa MSGBOX hepsinin adresini görüntülemek için yetersiz kalacaktır.
Korhan Ayhan Hocam,
Bu durumun farkındaydım ama, sayfaya veya UserForm'a yazdırmaktan başka çözüm bulamadım.
Farklı önerileriniz olur mu?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,160
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Silinen hücre adreslerinin görütülenmesi önem taşıyorsa sizin belirttiğiniz çözümlerek ek olarak MSGBOX'ta veriler parçalanarak gösterilebilir.

Ben olsam bu aşamaya gelmeden hücrelere doğru veri girilmesi konusuna odaklanırdım. Böylece sonradan çıkabilecek sorunların önüne geçmiş olursunuz. İlgili verinin silinmesi risk yaratıyorsa sayfa koruması kullanılarak önlem alınabilir.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,160
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Verilerin MSGBOX'ta parçalı şekilde görüntülenmesi ile hazırladığım örnek kod aşağıdadır. Belki kullanmak isteyen olabilir. Forumun arşivinde bulunsun.

C++:
Option Explicit

Private Sub Worksheet_Activate()
    Dim My_Data As Variant, My_Date As Date, X As Long, Y As Long
    Dim Z As Long, My_Check_1 As Boolean, My_Check_2 As Boolean
    
    My_Data = Range("A2:A10000").Value
    My_Date = CDate("01.01.2022")
    ReDim My_List(1 To 1)
    ReDim My_Message(1 To 1)
    
    For X = LBound(My_Data, 1) To UBound(My_Data, 1)
        If My_Date + X - 1 <> My_Data(X, 1) Then
            My_Check_1 = True
            Y = Y + 1
            ReDim Preserve My_List(1 To Y)
            My_List(Y) = "A" & X + 1
            If Y < 50 Then
                If My_Check_2 = True Then My_Check_1 = False
            End If
            If Y > 50 Then
                My_Check_2 = True
                Z = Z + 1
                ReDim Preserve My_Message(1 To Z)
                My_Message(Z) = Join(My_List, vbCrLf)
                Y = 0
                Erase My_List
            End If
        End If
    Next

    If My_Check_1 = True Then
        MsgBox "Aşağıdaki hücrelerde tarihlerde sorun tespit edildi. Lütfen düzeltiniz." & _
               vbCrLf & vbCrLf & Join(My_List, vbCrLf), vbCritical
    End If
    
    If My_Check_2 = True Then
        For X = LBound(My_Message) To UBound(My_Message)
            MsgBox "Aşağıdaki hücrelerde tarihlerde sorun tespit edildi. Lütfen düzeltiniz." & _
                   vbCrLf & vbCrLf & My_Message(X), vbCritical
        Next
    End If
End Sub
 
Üst