• DİKKAT

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

False ve True sorunu

Katılım
5 Eylül 2007
Mesajlar
1,247
Excel Vers. ve Dili
ofis 2010
Merhaba; bazı makrolarda tam anlamasında Application.ScreenUpdating = False ve makro sonunda Application.ScreenUpdating = True yazılıyor.
ancak bazı durumlarda böyle yazdığı halde çalışmayı kapatıp açmadan makro tekrar çalışmıyor. Bunu önlemek için ayrı makro olsa da her makrodan sonra onu çalıştırarak bu sorunu kaldırma imkanı olabilir mi? Bazı çalışmalarda konuya vakıf olmadığımız için bir çok makroyu çalıştırıyoruz. Onların üzerinden çözmek zor oluyor. Teşekkürler.
Kod:
Sub yenilenen_DURUM()
Application.ScreenUpdating = False
On Error Resume Next
Set S1 = ThisWorkbook.Worksheets("HAREKET")
Set S2 = ThisWorkbook.Worksheets("TRANSFER_DURUM")
S2.Range("a2:a65536").ClearContents
S2.Range("a2:d65536").Borders.LineStyle = xlNone

For i = 3 To S1.Range("d65536").End(xlUp).Row
If WorksheetFunction.CountIf(S1.Range("d2:d" & i), S1.Cells(i, "d")) = 1 Then
sonsatir = S2.Range("A65536").End(xlUp).Row + 1
S2.Cells(sonsatir, 1) = S1.Cells(i, 4)
S2.Range("a" & sonsatir & ":d" & sonsatir).Borders.LineStyle = xlContinuous 'kenar çizgisi oluşturmak
End If
Next i

Application.ScreenUpdating = True
MsgBox "İşlem TAMAM.", vbInformation

End Sub
 
1.
Eğer kodunuz içinde On Error Resume Next böyle bir satırınız varsa kodlar sonlanmadan önce On Error Goto 0 diyerek resetlemelisiniz.

2.
Application.ScreenUpdating = False
bu satırı kullanmak kodlar çalışırken ekranın update etmemesi, göz konforu ve kod hızı içindir.
Yine kodlarınız sonlanmadan önce Application.ScreenUpdating = True demelisiniz ki resetlemiş olasınız. Yoksa excel ekranında sıkıntı çekersiniz.

Bu ikisini doğru yapıyorsanız sıkıntı olmaması lazım.
 
Bu verdiğiniz kodda öyle bir sorun olma diye düşünüyorum. Çünkü on error resume next satırı ile hata halinde sonraki satıra geç diyorsunuz. Eninde sonunda True satırına gelip makro sonlanacaktır.

Eğer bu satır yoksa kod False'tan sonra hata olduğunda değer False olarak kalarak makro sonlanır, bu durumda tekrar aktif etmek için ayrı bir makro çalıştırmak gerekir.
 
Bu işlemde sorun yoktur, sadece örnek olsun diye yazdım ama zammedersem yanlış yazdım. Bu örnek değil de Application.EnableEvents = True örnekli kodu soracaktım. Böyle kodların kapatılması unutulduğunda yeni makro çalışmıyor.
Kod:
Sub Carp()
On Error Resume Next
Application.ScreenUpdating = False: Application.Calculation = xlCalculationManual

    Application.EnableEvents = False

    Dim Bak As Long
    For i = 2 To [A2000].End(3).Row
        With Worksheets("URUN_LISTE")
            .Cells(i, "F").Value = Cells(i, "D").Value * Cells(i, "E").Value
        End With
     Next
     Range("F:F").NumberFormat = "#,##0.00"
     Application.EnableEvents = True
     Application.ScreenUpdating = True: Application.Calculation = xlCalculationAutomatic

End Sub
 
Kapatılmasını unutan kişi muhtemelen düzeltilmesini sağlayacak kodları da eklemeyi unutacaktır.

Bunun engellemenin en iyi yolu açılan ya da kapatılan her kaydın kapatılmasını ya da açılmasını sağlayacak kodları da o anda eklemesidir.
Örneğin If sorgusu başlattığınızda altına End If satırını da ekleyip aradaki satırları sonra doldurmalısınız.
 
Sizi sıkıntıya sokan satır;

Application.EnableEvents = False

Bu satır uygulamada ki bütün olayları durduran koddur. Dikkatli kullanılması gerekir.

Kodun çalışması anında kod durursa ya da tamamlanması bitmeden yarıda kesilirse bu kod TRUE olmayacağı için bahsettiğiniz sıkıntıları yaşamanız normaldir.
 
Hazır kodları kullanarak bir şeyler yapmaya çalışınca haliyle aksamalar oluyor. Dediğiniz gibi kullandığımız da kontrol etmek lazım. Teşekkürler
 
Bunu dikkatli kullanmak lazım,hatta hiç kullanmasanız daha doğru olur.
on error resume next.
bunuda mümkünse kullanmayın.
application.enableevents = false.
 
Geri
Üst