• DİKKAT !

    Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak Dosya Yükleme tamamen ücretsizdir.

Çözüldü Excel vba userform donma sorunu - arka planda veri işlerken yanıt vermiyor hatası

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Durum
Konu Çözümlendiği İçin Kapatılmıştır.

merveik

Yeni Üye
Katılım
31 Ağu 2026
Mesajlar
6
Aldığı beğeni
2
Katkı
%7
Excel V
Office 2013 TR
Konu Sahibi
Arkadaşlar merhaba, bir süredir uğraştığım bir makro var ama ciddi bir performans optimizasyonu problemine takıldım. Userform üzerinden butona basınca yaklaşık 150 bin satırlık bir veriyi arkada işliyorum. İşlem uzun sürdüğü için kullanıcı ekrana tıkladığı an UserForm beyazlaşıyor ve "Yanıt Vermiyor" moduna geçiyor. Ekrana donma gelmesin diye döngünün içine DoEvents ekledim, bu sefer donma düzeldi ama makro 3 kat daha yavaş çalışmaya başladı. Resmen doevents yavaşlatıyor tüm süreci.Excel vba userform donma sorunu yaşamadan, yani formu kilitletmeden arkada büyük veri işleme işini nasıl çözeriz? RAM'i ve işlemciyi çok yormayacak, DoEvents harici bir callback ya da ekran tazelemeyi askıya alma yöntemi var mıdır?
Şimdiden teşekkürler.
 
Çözüm
Yüksek satırlı veri setlerinde hücreleri direkt döngüye almak en çok zaman kaybettiren tekniktir.

Bunun yerine verileri diziye yükleyip oradan işlem yapmak size inanılmaz hız kazandıracaktır.

Ekteki dosyada bu tekniği kullandım.
Konu Sahibi
Hocam selamlar, verileri form üstünde göstermiyorum. Sadece formdaki butona basınca kod arka planda 150 bin satırı dönüp işlem yapıyor ve rapor sayfasına aktarıyor. Sorun şu ki; işlem uzun sürdüğü için kullanıcı ekrana tıkladığı an form beyazlaşıyor ve 'yanıt vermiyor' oluyor. Döngüye DoEvents koyunca donma gidiyor ama bu sefer de makro aşırı yavaşlıyor (resmen 3 kat fark ediyor). Veriyi formda göstermeden, arkadaki bu uzun döngü esnasında formu kilitletmeyecek ama hızı da düşürmeyecek pratik bir çözümü var mıdır
 
Konu Sahibi
Hocam, standart olarak şu mantıkta bir döngüyle aktarıyorum. Veriyi hücre hücre kontrol edip şart uyuyorsa diğer sayfaya yazdığı için işlem çok uzun sürüyor.

HTML:
CSS:
İçeriği görebilmek için Giriş yap ya da Üye ol.

Buradaki hücre hücre yazma (Cells(satır, x).Value = ...) ve DoEvents işi çok kilitliyor hocam. Formun donmasını engellerken bu kodu en hızlı hale nasıl getirebiliriz.
 
Yüksek satırlı veri setlerinde hücreleri direkt döngüye almak en çok zaman kaybettiren tekniktir.

Bunun yerine verileri diziye yükleyip oradan işlem yapmak size inanılmaz hız kazandıracaktır.

Ekteki dosyada bu tekniği kullandım.
 
Çözüm
Konu Sahibi
Hocam harikasınız, Dediğiniz gibi verileri diziye (Array) yükleyip hafızada işledikten sonra tek seferde sayfaya aktarınca makro inanılmaz hızlandı. Kod neredeyse saniyeler içinde tamamlanıyor ve DoEvents kullanmama bile gerek kalmadan işlem bittiği için UserForm üzerinde en ufak bir donma, beyazlaşma ya da "Yanıt Vermiyor" uyarısı kalmadı. Emeğinize ve bilginize sağlık, çok teşekkür ederim. 🙏
 
Durum
Konu Çözümlendiği İçin Kapatılmıştır.
Geri
Üst