Çözüldü VBA Kod Neden Yavaş Çalışır?

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

ycicek

Site Üyesi
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe
Merhaba sevgili ExcelDestek.Com Üstadları,

Daha önce @Ömer BARAN Üstadımızın kıymetli emekleri ile bitirme aşamasına geldiğim projeme VBA ile Veri Giriş Formu yaptım.

Form üzerindeki textboxlar "Personel Listesi" sayfasında ilgili hücrelere veri işlemektedir. "Vardiya" sayfasıda "Personel Listesi" sayfasında veri çekmektedir.

Soru : "Vardiya" sayfasındaki " İzin Rapor Giriş" butonu ile aktif olan Form üzerine girilen veriler Kaydet butonuna bastıktan sonra "Personel Listesi" sayfasına işlenirken işlemci 6-7 defa işlem yapmakta ve sonuçta veriyi işlemektedir. Vba Form neden yavaş çalışıyor? Bunu hızlandırmanın yöntemi nedir?

Soru:2 Vba kod verileri işledikten sonra, "Vardiya" sayfasındaki D16:AH21 arasındaki alana gelmesi gereken kısayollar Sayfayı Yenile yapsak bile gelmiyor.
Form üzerinden değil de manuel olarak elle girilince değerler sayfayı yenile yapınca kısayollar geliyor. Bunu neden yapar?
 

Ekli dosyalar

Çözüm
Sayın @ycicek .

Kodlarınızda düzenlemeler yaptım.
F2+ENTER ile verilerin üzerinden geçilmeden sonuç alınamamasının nedeni,
aktarılan tarihlerin TARİH gibi görünse de TARİH değil METİN olmalarıydı.

Belgenin yeni versiyonunu deneyiniz.

.
Merhaba Sayın @ycicek .

Bence amacınıza ulaşmak için adım adım ilerlemekte yarar var.

Belgedeki formülleriniz, eklediğiniz makro kodları ve düğmelerindeki amaçları netleştirelim.
-- Ayın son günü sayısına göre farklı düğmelerle/makrolarla/formüllerle/sütunlarda işlem yapmaktaki amacınız nedir?
-- Vardiya sayfası AF33'ten aşağı doğru olan formüllerde neden Kaynak sayfasındaki tüm sütunu (Kaynak!$G:$O gibi) kullanıyorsunuz?
Bu yapı, tüm sütunun (excel versiyonuna göre 65536 / 1.048.576 satırın) kontrolü anlamına geliyor çünkü.

.
 
Merhaba Sayın @ycicek .

Bence amacınıza ulaşmak için adım adım ilerlemekte yarar var.

Belgedeki formülleriniz, eklediğiniz makro kodları ve düğmelerindeki amaçları netleştirelim.
-- Ayın son günü sayısına göre farklı düğmelerle/makrolarla/formüllerle/sütunlarda işlem yapmaktaki amacınız nedir?
-- Vardiya sayfası AF33'ten aşağı doğru olan formüllerde neden Kaynak sayfasındaki tüm sütunu (Kaynak!$G:$O gibi) kullanıyorsunuz?
Bu yapı, tüm sütunun (excel versiyonuna göre 65536 / 1.048.576 satırın) kontrolü anlamına geliyor çünkü.

.

Üstadım Haftada 5 gün çalışma 6.Gün mesai olduğundan TOPLAMLAR altında AF33:AF38 arasına her vardiya personelinin 6.Gününü yani Hafta Tatilinden bir gün önceki günü ( HT Perşembe ise 6.Gün Çarşamba oluyor.) Dolayısıyla o ay kaç tane Çarşamba var hesaplayabilmek için Kaynak Sayfasından veri çağırıyorum. ( Şimdi etraflıca düşününce günleri saydırıyorum ama ya Yıllık İzin veya Raporlu olduğu tarihe denk geliyorsa o halde yanlış veri olacak )

Ay 31 Günden az olduğundan takvimde boş günler oluştuğu için formülü düzenleyebilmek adına 28-29-30-31 AyYirmiSekiz - AyYirmiDokuz - AyOtuz - AyOtuzBir Makrolarını oluşturdum. Ay 28 olduğunda 28 makrosu çalıştırılarak AF33:AF38'deki formülü yeniliyor.
 
A personeli için Ayın 15 ile 14'ü arasında kaç tane ( 08-16 16-24 24-08 'ler içinde ) HT'nin bir gün öncesi var. ( R-Yİ-G-S İzinleri haricindeki günler )
HT Perşembe ise Çarşambaları saydıracağız. Böylelikle Toplamlar altında personelin kaç 6.günü yani kaç mesaisi var oraya varmış olacağız. İnşallah ifade edebilmişimdir.
 
Tekrar merhaba Sayın @ycicek .

-- HT'den bir önceki günlerde çalışılan gün sayısı:
Anladığım kadarıyla Kaynak sayfasındaki H-O sütunlarına (dolayısıyla 30'uncu gün, 29'uncu gün gibi makrolara da) ihtiyaç yok.
Bu sütunları silince tüm sütunu kullanan formüller de silinmiş olacak belgenizde hız azalması olmayacaktır.

Sonuçları ney için kullanacaksınız onu siz biliyorsunuz ama Vardiya sayfası AF33 hücresine uygulanacak aşağıdaki birinci formül;
kişinin HT gününden bir önceki günlerde soldan ilk karakteri SAYI olanların adetini bulur. Formülü aşağı doğru kopyalayın.

İlave bir bilgi: ARA işlevindeki birinci { ... } arasındaki kriterler metinse alfabetik, sayıysa küçükten büyüğe doğru sıralanmalıdır,
ikinci { .... } arasındakiler ise sırasıyla birincideki elemanlara karşılık gelen sonuç değerlerdir.
Örneğin; G33'te Perşembe var. Perşembe, alfabetik sıralanmış ilk köşeli parantezin 6'ncı elemanı,
ARA işlevinin kullanıldığı kısmın sonucu, ikinci köşeli parantez içindeki 6'ncı eleman olan ÇAR değeridir.


-- İkinci konu; D16:AH21 aralığında kullanılan BRN isimli AD TANIMLAMASI.
Belgenizde, iki adet Yıllık İzin alanı oluşturmuşsunuz ve 31'inci satırdan itibarenki sütunlarda yer değişiklikleri de var.
Bu durum BRN ismiyle eklenen AD TANIMLAMASIna ait formülün de güncellenmesini gerektiriyor.
Buna göre; Vardiya sayfası D16 hücresi seçiliyken AD TANIMLAMASI'ndaki BRN'ye ait formülü, aşağıdaki ikinci formül ile değiştirin.
VBA:
You must log in to view
(1 satır)

VBA:
You must log in to view
(6 satır)
 
Tekrar merhaba Sayın @ycicek .

-- HT'den bir önceki günlerde çalışılan gün sayısı:
Anladığım kadarıyla Kaynak sayfasındaki H-O sütunlarına (dolayısıyla 30'uncu gün, 29'uncu gün gibi makrolara da) ihtiyaç yok.
Bu sütunları silince tüm sütunu kullanan formüller de silinmiş olacak belgenizde hız azalması olmayacaktır.

Sonuçları ney için kullanacaksınız onu siz biliyorsunuz ama Vardiya sayfası AF33 hücresine uygulanacak aşağıdaki birinci formül;
kişinin HT gününden bir önceki günlerde soldan ilk karakteri SAYI olanların adetini bulur. Formülü aşağı doğru kopyalayın.

İlave bir bilgi: ARA işlevindeki birinci { ... } arasındaki kriterler metinse alfabetik, sayıysa küçükten büyüğe doğru sıralanmalıdır,
ikinci { .... } arasındakiler ise sırasıyla birincideki elemanlara karşılık gelen sonuç değerlerdir.
Örneğin; G33'te Perşembe var. Perşembe, alfabetik sıralanmış ilk köşeli parantezin 6'ncı elemanı,
ARA işlevinin kullanıldığı kısmın sonucu, ikinci köşeli parantez içindeki 6'ncı eleman olan ÇAR değeridir.


-- İkinci konu; D16:AH21 aralığında kullanılan BRN isimli AD TANIMLAMASI.
Belgenizde, iki adet Yıllık İzin alanı oluşturmuşsunuz ve 31'inci satırdan itibarenki sütunlarda yer değişiklikleri de var.
Bu durum BRN ismiyle eklenen AD TANIMLAMASIna ait formülün de güncellenmesini gerektiriyor.
Buna göre; Vardiya sayfası D16 hücresi seçiliyken AD TANIMLAMASI'ndaki BRN'ye ait formülü, aşağıdaki ikinci formül ile değiştirin.
VBA:
You must log in to view
(1 satır)

VBA:
You must log in to view
(6 satır)

Formül Düzeltmelerini uyguladım elinize sağlık. Çok teşekkür ederim. Biz çalıyı dolaşırken siz kestirmeden gidiyorsunuz. Buna da tecrübe ve birikim deniyor. Üstadım UserForm veri işleme hala çok yavaş çok fazla alan olduğu için mi? Bir diğer konu da ilk mesajımda bahsettiğim userform verileri işliyor fakat D16:AH21 aralığında bulunan BRN Ad Tanımlamasının olduğu alanlardaki Yİ - S- R gibi değerler gelmiyor. Userform kullanılmadığında elle yazıldığında Sayfayı Yenile dediğimizde Hücre biçimlendirmeleri geliyor. Buna çözüm üretebilir miyiz?
 
Ben userform ile ilgili hiçbir işleme bakmadım.
Belgeye yaptığınız eklemeleri anlamaya çalışıyordum ve anladığımı sanıyorum.
Belki de BRN ad tanımlamasından vazgeçip, bu ad tanımlamasındaki formülü doğrudan hücreye uygulayarak da bir deneyin isterseniz.
Hız farkı oluşuyor mu oluşmuyor mu?
AD TANIMLAMASIndaki formülü, D16 hücresi seçiliyken AD TANIMLAMASI ekranına geçip oradan veya forumda verdiğim yerden kopyalayarak alın.

Uygun olduğumda UserForm ile ilgili olaylara da bakarım elbette.

Şu anda sizin sıkıntınız, formüllerle sonuç alma aşamasından makrolarla sonuç almaya geçiş ile ilgili.
Şayet şimdiye kadar makrolarla çok ilgilenmemişseniz bu geçiş dönemi biraz sıkıntılı olabilir.

Bence mevcut izin giriş userformundan önce, temelden başlayarak belgeyi formüllerden arındırma olayına
adım adım girilmeli. Bir userform ile veri girişi vs zor olmayan mevzular, halledilir neticede.

Belgenizin yapısı gördüğüm kadarıyla oturmuş durumda, artık formülleri makro ile yer değiştirme aşamasına geçilebilir.
Yavaş yavaş ona bakmak lazım.
Kabaca fikrim şöyledir; yapılacak kodlamalar, belgedeki TERFİ MERKEZİ SEÇİM hücresi, BAŞLANGIÇ VARDİYASI seçim
hücreleri, BAŞLANGIÇ VERİLERİ bölümündeki hücreler..... özetle elle veri girişi yapılan ve sonuçların değişmesine neden olacak hücrelerde
değişiklik olduğunda tetiklenecek yapıda kurgulanmalı.
Bu aşamaya biraz daha var sanırım.

.
 
Üstadım Ad Tanımlamasından kaynaklanmıyor daha önce denediğim gibi az önce de denedim. Formülden makroya geçiş konusunda haklısınız. Geceniz hayr olsun. Teşekkür ederim. Fikrinize sağlık. 🙏 🤗
 
O zaman şimdilik;
- UserForm'un kayıt yapan kodlarının başına aşağıdaki birinci kod satırını,
-- End Sub satırından önce de aşağıdaki ikinci satırı yapıştırın.
VBA:
You must log in to view
(2 satır)
 
Üstadım bu son haliyle formüllerden arındırılmış olması belgeyi çok hızlandırmış. Elinize sağlık. Uer Form üzerinden aynı problem devam ediyor ama çok da elzem değil User Formu iptal edip manuel olarak sayfadan giriş yaptıracağım. Tekrar teşekkür eder hayırlı geceler dilerim. 🙏 🤗 💪

Saygılarımla.
 
Eyvallah.
Sadece; Userform kodlarındaki CommandButton1_Click kodunda
kırmızı satırı silip, yerine yeşil olanı ekleyin. Bu şekilde daha şık olur.
VBA:
You must log in to view
(2 satır)

.
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Konuyu başlatan
Site Üyesi
Katılım
Konu Bilgi
Durum
Çözüldü 
Forum
Excel Formül Soruları
Başlangıç tarihi
Son yanıt tarihi
Cevaplar
18
Üst