• DİKKAT

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

eşitsizlik varsa pop-up uyarısı

Katılım
25 Ocak 2006
Mesajlar
763
Excel Vers. ve Dili
2019 tr
http://dosya.co/pl06tpynlxjz/Kitap1.xlsx.html
linkteki örnekte belirtmiş olduğum hücrelerin birbirinden farklı olması durumunda, excelden çıkarken kaydetme mesajından önce belli bir metni içeren hata mesajı vermesini istiyorum. devam et dersek kaydedip kapatsın, iptal dersek o sayfa açılsın. böyle bir şey mümkün mü?
 
Merhaba.

Öncelikle üyelik profilinizdeki eksik bilgileri tamamlamanızı hatırlatmak isterim.
Kullandığınız excel dili ve versiyon bilgisi bile yok.

Aşağıdaki basit bir örnek verdim, kendi isteğinize göre düzenleme yapabilirsiniz sanırım.

-- Belgeniz açıkken ALT+F11 tuşlarına basarak VBA ekranını açın,
-- Sol taraftan Bu Çalışma Kitabı (ThisWorkbook)'na çift tıklayın,
-- Sağdaki boş alana aşağıdaki kod'u yapıştırın.
-- Belgeyi 2003 versiyonuyla veya Makro İçerebilen Excel Belgesi olarak kaydedin,
-- Belgeyi kaydederek kapatın, sonraki ilk açılışta makroları etkinleştirin.

Kod Sayfa1 adlı sayfadaki A1 hücresi BOŞ ise veya A1 ve A2 hücrelerinin değeri birbirinden farklı ise
UYARI içerikli bir MESAJ KUTUSU görüntülenmesini sağlar ve KAYDET/KAYDETME ekranı gelmez.
.
Kod:
[B]Private Sub Workbook_BeforeClose(Cancel As Boolean)[/B]
    If Sheets("Sayfa1").[[B][COLOR="Red"]A1[/COLOR][/B]].Value <> "" Or _
        Sheets("Sayfa1").[[B][COLOR="Red"]A1[/COLOR][/B]].Value <> Sheets("Sayfa1").[[B][COLOR="Red"]A2[/COLOR][/B]].Value Then
        MsgBox "[B][COLOR="Red"]A1[/COLOR][/B] ve [B][COLOR="Red"]A2[/COLOR][/B] hücrelerinin değeri aynı DEĞİL!" & vbLf & _
        "[B][COLOR="Red"]A1[/COLOR][/B] ve [B][COLOR="Red"]A2[/COLOR][/B] hücrelerini kontrol ediniz!", vbCritical, "..::.. DOSYADA HATA VAR ..::.."
        Cancel = True
    Else
        Cancel = False
    End If
[B]End Sub[/B]
 
Ömer BARAN, öncelikle verdiğin kod için sağolasın. profil bilgilerini düzenledim ama bunların sizlerin cevap vermesi ya da nazik davranması için etken olacağı aklımın ucundan geçmezdi. neyse verdiğiniz makro ile ilgili olarak düzenleme yaptım ama eşit olmama durumunda excelden çıkamıyorum. benim maklsadım excelden çıkamamak değil, sadece uyarı gelecek ve devam etmek istediğimde atıyorum devam et ve iptal tuşları olsa, devam et basıldığında kaydet kaydetme penceresi tekrar gelerek isteyen kaydedip çıkacak.
 
cancel = false yapınca uyarıdan sonra kaydet kaydetme yazısı geliyor. onu çözdüm. kendi eşit olması gereken hücrelere göre de yazdım herşeyi. bir tek, sadece o sekmede olduğumda uyarı veriyor. başka sekmede de olsam eşitsizlik olduğunda uyarı çıkmasını nasıl yapacağımı bulamadım.
 
Tekrar merhaba.

Örnek belgenizde, belgenizde olmayan sayfa/belgelere atıflar içeren ve mevcut haliyle #DEĞER!
hatası veren formüller var.
Belgeyi içerisinde harici bağlantı kalmayacak şekilde güncellemeniz yerine olur sanırım.
Ayrıca UYARI sözcüğü bana ENGELLEMEyi çağrıştırıyor.
Sanki sizin isteğiniz uyarı değil BİLGİ verme ve ENGELLEME İÇERMİYOR doğru mudur?
.
 
Tekrar merhaba.

Son belgenize bakmadım.
Eski belge üzerinden FORMÜL HATASInı da araştıran kod satırları ekledim.

Bir de böyle deneyin.
-- ALT+F11 tuşlarına basarak VBA ekranını görüntüleyin.
-- VBA ekranında sol tarafta BuÇalışmaKitabı (ThisWorkbook)'na çift tıklayın,
-- Sağdaki boş alana aşağıdaki kod'u yapıştırın.
-- Dosyayı kapatmak üzere köşedeki X'e tıklayıp sonucu gözlemleyin.
-- Kod'da End Sub satırından önceki Cancel = True kısmını False olarak değiştirirseniz,
hata (1 TL üstü fark veya HATA SONUCU döndüren FORMÜL) düzeltilmeden de belgenin kaydedilip kapatılmasına engel olmaz.
.
Kod:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set s = Sheets("kntrl")
If IsError(s.[D4]) Or IsError(s.[D5]) Or IsError(s.[D6]) Or IsError([D7]) Then
    MsgBox "ÖDEME DURUMU hücrelerinde [B]FORMÜL HATASI[/B] var, önce bu hata düzeltilmelidir", vbCritical
    Cancel = False
ElseIf Abs(s.[D4] - s.[D5]) > 1 Or _
        Abs(s.[D5] - s.[D6]) > 1 Or _
        Abs(s.[D6] - s.[D7]) > 1 Then
            MsgBox "Ödeme durumunda uyumsuzluk var." & vbLf & _
                "Yine de çıkmak istiyor musunuz?", _
                vbCritical, "::..ÖDEME DURUMU HATASI..::"
Else
    Cancel = False
    s.Activate
End If
If IsError(s.[I4]) Or IsError(s.[I5]) Or IsError(s.[I6]) Then
    MsgBox "BORÇ DURUMU hücrelerinde  [B]FORMÜL HATASI[/B] var, önce bu hata düzeltilmelidir", vbCritical
    Cancel = False
ElseIf Abs(s.[I4] - s.[I5]) > 1 Or _
        Abs(s.[I5] - s.[I6]) > 1 Then
            MsgBox "Borç durumunda uyumsuzluk var." & vbLf & _
                "Yine de çıkmak istiyor musunuz?", _
                vbCritical, "::..BORÇ DURUMU HATASI..::"
Else
    Cancel = False
    s.Activate
End If
    
If IsError(s.[N25]) Or IsError(s.[N42]) Then
    MsgBox "BÜTÇE TERTİBİ DURUMU hücrelerinde  [B]FORMÜL HATASI[/B] var, önce bu hata düzeltilmelidir", vbCritical
    Cancel = True
ElseIf Abs(s.[N25] - s.[N42]) > 1 Then
            MsgBox "Bütçe tertibi toplamlarında uyumsuzluk var." & vbLf & _
                "Yine de çıkmak istiyor musunuz?", _
                vbCritical, "::..BÜTÇE TERTİBİ TOPLAMI HATASI..::"
Else
    Cancel = False
    s.Activate
End If
[B][COLOR="Red"]Cancel = True[/COLOR][/B]
[B]End Sub[/B]
 
merhaba, denedim. makro dediğim gibi hangi sayfada olsam da hata varsa soruyu soruyor. fakat kaydet kaydetme çıkmıyor. yani hatayı düzeltmeden çıkamıyorum. bazen hatayı bulmamız günleri alabiliyor :).
 
Önceki cevabımda belirtmiştim.
End Sub satırının hemen üstündeki Cancel=True değerini False olarak değiştirip deneyin.
 
Önceki cevabımda belirtmiştim.
End Sub satırının hemen üstündeki Cancel=True değerini False olarak değiştirip deneyin.

tamamdır. onu çözmüştüm zaten, ben yazınızdan öyle yapmayın yaparsan bişey olur gibi algıladım. o halde sıkıntı kalmadı. maksadım zaten sadece uyarı mesajı çıkmasıydı. çok teşekkür ediyorum. iyi akşamlar.
 
Ömer hocam merhaba. Ben de bu kodu kullanmak istiyorum. K sütununda verilerim var. L sütununa da olması gereken rakamları yazacağım. K2 değeri L2 değerinden küçük ise uyarı penceresi çıkacak. Buraya kadar sorun yok sanırım sadece eşit değilleri küçük yapacağım ama benim 7000 satıra yakın verim var. Bunu nasıl yapabilirim? Bir akıl verebelir misiniz?

K2=100
L2= 150

K3=75
L3=100

Yukarıdaki gibi her satırın L değeri farklı olacak.

Merhaba.

Öncelikle üyelik profilinizdeki eksik bilgileri tamamlamanızı hatırlatmak isterim.
Kullandığınız excel dili ve versiyon bilgisi bile yok.

Aşağıdaki basit bir örnek verdim, kendi isteğinize göre düzenleme yapabilirsiniz sanırım.

-- Belgeniz açıkken ALT+F11 tuşlarına basarak VBA ekranını açın,
-- Sol taraftan Bu Çalışma Kitabı (ThisWorkbook)'na çift tıklayın,
-- Sağdaki boş alana aşağıdaki kod'u yapıştırın.
-- Belgeyi 2003 versiyonuyla veya Makro İçerebilen Excel Belgesi olarak kaydedin,
-- Belgeyi kaydederek kapatın, sonraki ilk açılışta makroları etkinleştirin.

Kod Sayfa1 adlı sayfadaki A1 hücresi BOŞ ise veya A1 ve A2 hücrelerinin değeri birbirinden farklı ise
UYARI içerikli bir MESAJ KUTUSU görüntülenmesini sağlar ve KAYDET/KAYDETME ekranı gelmez.
.
Kod:
[B]Private Sub Workbook_BeforeClose(Cancel As Boolean)[/B]
    If Sheets("Sayfa1").[[B][COLOR="Red"]A1[/COLOR][/B]].Value <> "" Or _
        Sheets("Sayfa1").[[B][COLOR="Red"]A1[/COLOR][/B]].Value <> Sheets("Sayfa1").[[B][COLOR="Red"]A2[/COLOR][/B]].Value Then
        MsgBox "[B][COLOR="Red"]A1[/COLOR][/B] ve [B][COLOR="Red"]A2[/COLOR][/B] hücrelerinin değeri aynı DEĞİL!" & vbLf & _
        "[B][COLOR="Red"]A1[/COLOR][/B] ve [B][COLOR="Red"]A2[/COLOR][/B] hücrelerini kontrol ediniz!", vbCritical, "..::.. DOSYADA HATA VAR ..::.."
        Cancel = True
    Else
        Cancel = False
    End If
[B]End Sub[/B]
 
Geri
Üst