• 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.

Soru dosyamın aylar ilerledikçe aşırı yavaşlaması

incsoft

Yeni Üye
Katılım
13 Eki 2021
Mesajlar
237
Çözümler
1
Aldığı beğeni
18
Excel V
Office 2019 TR
Konu Sahibi
Arkadaşla günlük takip işlemleri yapmak için kullandığım dosyam var ve bu dosyaları OCAK-ARALIK olarak 12 ay ayrı kaydediyorum ve her dosyamda aylardaki gün sayıları kadar sayfalar bulunuyor ancak her ay ilerledikçe bu dosyamın açılması,kaydet denildiğinde kaydetmesi,kapatması çok aşırı şekilde yavaşlıyor. Birde 12 aylık verileri her ayın içerisinde görebilmem için ayrı sayfam var ancka bunları değere dönüştürüyorum. 1-31 aralığında her sayfada bulunan buttonlarda kodlar olduğundan bu kodlar 31 saydada da oluyor acaba bundanmı yavaşlıyor diyorum kendimce. Bu kodları her sayfaya değilde tek bir yere yazmış olsam o kodlar orda olsa yavaşlama gidermi acaba? Mesela aşağıda ki gibi butonların her birisinde kodlar var. Bu dosyamdaki aşırı yavaşlık sizce neden olabilir nasıl çözerim. Dosyamı göndermek isterim ama içerisinde işyerime ait çok özel veriler vardır. Teşekkürler...

Private Sub CommandButton8_Click()
Private Sub CommandButton9_Click()
Private Sub CommandButton10_Click()
Private Sub CommandButton11_Click()
Private Sub CommandButton13_Click()
Private Sub CommandButton14_Click()
Private Sub CommandButton15_Click()
Private Sub CommandButton17_Click()
Private Sub CommandButton18_Click()
Private Sub CommandButton20_Click()
Private Sub SaveButton1_ButtonPressed()


Private Sub ÇOĞALT_Click()
COGALT
tipdegisikligi
aktar
End Sub

Private Sub TAMÇOĞALT_Click()
tamcogalt
tipdegisikligi
End Sub
 
Sayfa sayısı çok fazla: 12 ay × her ay için 28–31 günlük sayfa + özet sayfalar, çalışma kitabının yapısını büyütüp her işlemde Excel’in tüm yapıyı taramasına neden oluyor.

Her sayfada çok sayıda ActiveX / Form denetimi (CommandButton): Her buton bir nesne; 31 sayfada onlarca buton olunca açılışta bu nesneler tek tek yükleniyor, bu da dosyayı ağırlaştırıyor.

Aynı VBA kodunun her sayfada tekrarlanması: CommandButton8_Click, CommandButton9_Click vb. alt prosedürlerin kopyaları her sayfa modülünde tutuluyorsa, proje büyür; bu da açma/kaydetme sırasında hız düşürür.

Sayfalar arası yoğun formül/bağlantı: Aylık verileri toplayan özet sayfada tüm aylara giden çok sayıda formül varsa, her değişiklikte yeniden hesaplama yapıldığı için yavaşlama olur.

Kodları tek yerde toplamak mantık olarak tek bir modülde ortak prosedür tutup butonlardan onu çağırmak, hem dosya boyutunu hem de kod karmaşıklığını azaltır, bu da performansa olumlu katkı sağlar.

Her butonun içindeki kodu şu hale getir:
Private Sub CommandButton8_Click()
OrtakIslem Me.Name, "8"
End Sub

Ekran güncelleme ve otomatik hesaplamayı makro içinde kapat

Ana dosyayı açıp: Dosya > Bilgi > Boyutuna bak; 10–20 MB üzerindeyse bu yapı için normal ama optimizasyona ihtiyaç var.

2-VBA penceresinde (ALT+F11):
Her sayfadaki buton kodlarını kontrol et; tekrar eden kodları Modül1 gibi bir yere taşı.
Butonların içinde sadece o ortak prosedürü çağıran 1–2 satır bırak.
3- Mümkünse yeni bir “YILLIK_VERİ” sayfası açıp, tüm günlük sayfalardan veriyi burada satır satır toplamak için küçük bir makro yaz; aylık sayfaları kademeli olarak devre dışı bırak.
4-Bir ayın dosyasını kopyalayıp, bu optimizasyonları önce test dosyasında dene; hız farkını gözle.
Bunlar bir öneri size ancak örnek bir dosya olması gerekirki çare olunabilsin
 
Konu Sahibi
Sayfa sayısı çok fazla: 12 ay × her ay için 28–31 günlük sayfa + özet sayfalar, çalışma kitabının yapısını büyütüp her işlemde Excel’in tüm yapıyı taramasına neden oluyor.

Her sayfada çok sayıda ActiveX / Form denetimi (CommandButton): Her buton bir nesne; 31 sayfada onlarca buton olunca açılışta bu nesneler tek tek yükleniyor, bu da dosyayı ağırlaştırıyor.

Aynı VBA kodunun her sayfada tekrarlanması: CommandButton8_Click, CommandButton9_Click vb. alt prosedürlerin kopyaları her sayfa modülünde tutuluyorsa, proje büyür; bu da açma/kaydetme sırasında hız düşürür.

Sayfalar arası yoğun formül/bağlantı: Aylık verileri toplayan özet sayfada tüm aylara giden çok sayıda formül varsa, her değişiklikte yeniden hesaplama yapıldığı için yavaşlama olur.

Kodları tek yerde toplamak mantık olarak tek bir modülde ortak prosedür tutup butonlardan onu çağırmak, hem dosya boyutunu hem de kod karmaşıklığını azaltır, bu da performansa olumlu katkı sağlar.

Her butonun içindeki kodu şu hale getir:
Private Sub CommandButton8_Click()
OrtakIslem Me.Name, "8"
End Sub

Ekran güncelleme ve otomatik hesaplamayı makro içinde kapat

Ana dosyayı açıp: Dosya > Bilgi > Boyutuna bak; 10–20 MB üzerindeyse bu yapı için normal ama optimizasyona ihtiyaç var.

2-VBA penceresinde (ALT+F11):
Her sayfadaki buton kodlarını kontrol et; tekrar eden kodları Modül1 gibi bir yere taşı.
Butonların içinde sadece o ortak prosedürü çağıran 1–2 satır bırak.
3- Mümkünse yeni bir “YILLIK_VERİ” sayfası açıp, tüm günlük sayfalardan veriyi burada satır satır toplamak için küçük bir makro yaz; aylık sayfaları kademeli olarak devre dışı bırak.
4-Bir ayın dosyasını kopyalayıp, bu optimizasyonları önce test dosyasında dene; hız farkını gözle.
Bunlar bir öneri size ancak örnek bir dosya olması gerekirki çare olunabilsin

Bu bağlantı ziyaretçiler için gizlenmiştir. Görmek için lütfen giriş yapın veya üye olun.
 
Merhaba.
Kodlar ve sayfa sayısı sadece dosya boyutunu etkiler hızı etkilemez. Hızı etkileyen en önemli faktör formüllerdir.
Formülleri sadece istediğinizde hesaplayacak şekilde ayarlayın.
Formüller sekmesini açın Hesaplama kısmında bulunan Hesaplama Seçenekleri açılır listesinden El İle seçin.

Gerektiği zaman formülleri elle hesaplamak için
Shift+F9 a basarsanız aktif sayfadaki formüller hesaplanır.
Sadece F9 a basarsanız dosyadaki tüm formüller hesaplanır.
 
PDF’yi doğrudan network klasörüne yazıyorsun
yol = "\\DS1\...\GÜNLÜK GÖNDERİLECEK MAİLLER\"
yol3 = "\\DS1\...\GÜNLÜK ÜRETİM RAPORLARI\"

Network yolu yavaşsa / yoğunluk varsa / izin kontrolü yapıyorsa PDF export çok uzar. Üstüne bir de aynı PDF’yi iki kez üretiyorsun

2) Aynı sayfayı iki kez PDF’e çeviriyorsun. Şu iki satır iki ayrı PDF üretimi demek (en ağır işlem export’un kendisi):
ActiveSheet.Range("A1:Q164").ExportAsFixedFormat ... fileName:=yol & ...
ActiveSheet.Range("A1:Q164").ExportAsFixedFormat ... fileName:=yol3 & ...

Doğru yöntem: PDF’i 1 kere üret, sonra diğer klasöre kopyala.
3) OpenAfterPublish:=True (ilkinde) PDF’i açtırıyor
Bu da PDF görüntüleyiciyi açar, network’ten okumaya çalışır, geciktirir. PDF üretimini bitirmeden ek yük.
Daha hızlı ve sağlam çözüm (1 kere üret + kopyala)

Aşağıdaki kod:
PDF’i önce lokal temp’e alır (çok daha hızlı),
sonra iki network klasörüne kopyalar,
ekran/olayları kapatır (export sırasında gereksiz yük azalır),
PDF’i otomatik açmayı kapatır.

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

“ExportAsFixedFormat” sadece 1 kere çalışır
Network gecikmesi export sırasında değil, basit dosya kopyalamada yaşanır

PDF export Excel’de şu şeylerden etkilenir:
Sayfada çok şekil/buton/resim --- PDF üretirken çizim motoru yavaşlar
Koşullu biçimlendirme ve formül yoğunluğu --- PDF alırken yeniden hesaplama tetiklenebilir
Sayfa düzeni (PageSetup): ölçekleme, sığdır, başlık/altlık, yazdırma alanı karmaşıksa yavaşlar
Network paylaşımında izin/antivirüs taraması → PDF yazarken takılma

Burada sorun formüllerden çok, Excel’in çizim + baskı motorunu zorlayan yapı.
 
A) AŞIRI SAYIDA SHAPE (buton, dikdörtgen, yazı nesnesi) Görünenler:

PDF YAP
ÇOĞALT
SAĞ HAREKE
AŞAĞI HAREKE
TAM TEMİZLE
OTOMATİK HESAP
EL İLE HESAP
TİP DEĞİŞİKLİĞİ
HESAPLAMA KONTROL

Bunların her biri bir Shape nesnesi
Ve bunlar:
PDF alınırken tek tek çizilir
Kaydederken VML olarak yazılır
Açılışta yüklenir

Excel PDF üretirken:
Formül → Çizim → Koşullu biçim → Shape → Yazdırma alanı sırasıyla ilerler.
Shape çoksa, PDF export katlanarak yavaşlar.

B) Koşullu biçimlendirme + geniş aralık
Sarı / kırmızı / yeşil alanlar
Uzun sütunlar (S–AF civarı)
Büyük yazdırma alanı
PDF alırken Excel:
TÜM bu alanları tekrar hesaplar
“Elle hesaplama” açık olsa bile PDF için yeniden değerlendirir

C) Yazdırma alanı çok büyük
Range("A1:Q164")

Ama sayfada:
Görsel alan çok daha geniş
Excel, görünmeyen ama biçimlendirilmiş alanları da hesaba katar

Çözüm önerim;
1) PDF alınacak AYRI, SADE bir sayfa oluştur
Butonlar olmasın
Sadece:
Hücreler
Değerler
Mümkünse minimum koşullu biçimlendirme

Akış ;
Günlük Çalışma Sayfası (butonlu, renkli)

PDF_SAYFA (değer + sade)

PDF

Aşağıdaki Kod hızlandırı;
PDFSayfa.Range("A1:Q164").Value = AnaSayfa.Range("A1:Q164").Value

2) PDF öncesi butonları geçici gizle Eğer ayrı sayfa istemiyorsan:
Dim sh As Shape
For Each sh In ActiveSheet.Shapes
sh.Visible = msoFalse
Next

PDF aldıktan sonra:
For Each sh In ActiveSheet.Shapes
sh.Visible = msoTrue
Next

Bu tek başına PDF süresini düşürür.

3) Yazdırma alanını NETLEŞTİR
Excel’in kafasına bırakma:
ActiveSheet.PageSetup.PrintArea = "$A$1:$Q$164"

4) Koşullu biçimi PDF öncesi geçici kapat
PDF için gerekmezse:Alternatif: renklendirilmiş değer alanı üret

Kısa net sonuç (dürüst cevap)

Sorun kod değil
Sorun formül değil
Sorun: shape + görsel yoğunluk + PDF motoru
 
Aşağıdaki makro mevcut yapını bozmadan, PDF alma süresini genelde ciddi düşürür çünkü:
PDF’yi 1 kez üretir (lokal TEMP’e)
Network klasörlerine Export değil FileCopy yapar
PDF alırken tüm buton/shape’leri geçici gizler
ScreenUpdating / Events / Calculation kapatır
PrintArea’yı netler (Excel’in geniş alan çizmesini engeller)
İş bitince her şeyi eski haline getirir (hata olsa bile)
KODU standart bir Module’e yapıştır (Module1 gibi).
Mevcut PDFYAP yerine bunu kullan.

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

Eğer sayfanda çok fazla koşullu biçimlendirme varsa, PDF’den önce Calculation = Manual zaten var; ama bazı dosyalarda PDF sırasında yine zorlayabiliyor. O durumda ExportAsFixedFormat öncesi şunu ekleyebilirsin:

ActiveWorkbook.ForceFullCalculation = False
 
Test 1 — Makrolar kapalı aç
Dosyayı açarken SHIFT tuşuna basılı tut.
(Excel event makroları çalışmaz.)
Hızlanıyorsa: sorun Workbook_Open veya event’lerde.
Hızlanmıyorsa: sorun shape/usedrange/stil/bağlantı tarafı.

Test 2 — Hesaplamayı “Elle” yapıp aç
Excel > Formüller > Hesaplama Seçenekleri > Elle
Sonra dosyayı kapat-aç.
Hızlanıyorsa: formül/koşullu biçim/hesap yükü.
Değişmiyorsa: şekiller/usedrange/ağ bağlantısı.

Test 3 — Bir kopyada bütün butonları silip aç
Dosyanın kopyasını al, bir sayfada bütün buton/shape’leri seçip sil (test amaçlı).
Kaydet, kapat, aç.

Açılış bariz hızlanıyorsa: ana suçlu shape/VML.
 
Geri
Üst