Makro Çalışma Süresi Kısaltma

  • Konuyu başlatan Konuyu başlatan cicosz
  • Başlangıç tarihi Başlangıç tarihi

Kısa Açıklama

Makro Çalışma Süresi Kısaltma isimli başlıkta, ilgili işlemlere dair detaylar yer almaktadır.
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe
Merhabalar,

Raporum için basit bir userform oluşturdum. Userform üzerinden iş kaydetme/silme/sıralama değiştirme gibi işlemleri yapabiliyorum. Eklediğim işlerin sekme adını da firmaya ve sıra numarasına göre belirliyorum. Fakat iş listesi konusunda beceremediğim yerler var. Örneğin mevcut iş listesine yeni iş kaydettiğimde sekme adı oluşturmak için daha önceki işlerin sekme adlarını da yazdırma alanı dışında kalan sütunlardan tarıyorum. Bu tarama işlemi de işlem süresini arttırıyor. İş sayısı arttıkça kaydet/sil/yukarı-aşağı taşı fonksiyonları daha yavaş ilerliyor. Buna yönelik çözüm önerisi ne olabilir?
İkinci olarak peş peşe olan 2 iş aynı firmaya aitse yukarı-aşağı taşıma işleminde sorun çıkıyor, sayfalar çakışıyor. Bunun sebebi de muhtemelen sekme adını firma adı üzerinden belirlememden kaynaklı. Bunu nasıl çözebilirim?
Son olarak da iş silerken, silme işlemi sonrasında userform bazen anlık olarak tekrar yüklenip hemen kayboluyor bir daha da ben form aç demeden ekranda görünmüyor. Diğer butonlarda bu sorunu yaşamıyorum. Bu sorun hakkında hiçbir fikrim yok, nasıl çözebilirim?

Şimdiden teşekkürler.
 
Ekli dosyalar
Merhaba Sayın @cicosz , forumumuza hoşgeldiniz.

Belge ve tasarım size ait olduğu için işleyişi siz biliyorsunuz doğal olarak.
UserForm üzerinden listede aşağı/yukarı hareket, anladığım kadarıyla belgedeki sayfa sıralamasını değiştiriyor
ve siz bu sıralama sonrasında sayfa isimlerindeki SAYI kısımlarında sorun yaşıyorsunuz doğru mudur?
Belgenizde epey bir kodlama mevcut.
Ayrıca gördüğüm kadarıyla; işlemlerinizin merkezinde sayfaların sıralanması olayı var.
Zaten köprü yöntemiyle sayfalara ulaşabildiğinize göre bu sıralamanın üstünde durmanızın sebebini merak ettim doğrusu.
Userform üzerindeki listenin kaynağı FİRMA İŞ LİSTESİ sayfası.

Malum kodlama işi de biraz tarz işi ve herkes kendi tarzında bir kodlama yapıyor.
Başkası tarafından yazılmış / oluşturulmuş bir kodun düzenlenmesi her zaman sıfırdan yazmaktan daha zordur önce onu belirteyim.
Çünkü yapılacak değişikliklerin diğer makro kodlarına/bunlardan kaynaklı olarak belgedeki sayfalara yansımalarını öngörmek zor olabilir.

Belgenize bakacağım ama isterseniz (öncelik sırasını, en temel sıkıntının ne olduğunu siz biliyorsunuz)
en temel sorundan başlayarak adım adım ilerleyelim.
Öncelik sırasında ilk sırada sizce hangi işlem/sıkıntı vardır?
.
 
Merhaba, hoş buldum @Ömer BARAN.

Bu rapor formatının 15 kopya olacağını düşünün. Haliyle sekme adlarında sadece sıra numarası üzerinden gidince, tüm bölgelere ait toplam raporu oluştururken X bölgesinin 1 numarlı işi ile Y bölgesinin 1 numaralı işi çakışıyor. Fakat SıraNo - Firma Adı üzerinden gidince herhangi bir çakışma olmuyor. Çünkü her bölgede işleri yapan firmalar farklı. Kısacası benzersizliği sağlayan Firma Adı, işin önem düzeyini gösteren ise SıraNo. Şu anlık en büyük problemim bu. Zaten Userform sonucuna bakarsak istediğim sonucu veriyor fakat bazı bölgelerdeki bilgisayarlar eski olduğu için bekleme süresi can sıkabiliyor.
İkinci olarak da iş silme işleminde silme işlemi yapılıyor fakat ara sıra userform kendini kapatıyor ve tekrar açılmıyor.

Teşekkürler.
 
Sanırım anladım, uygun vakitte ilgilenip öneride bulunurum.
Bir de belgenizde gizli sayfalarınız var (zaten bu nedenle FİRMA İŞ LİSTESİ sayfasının Index no 11).
Keşke en sondaki (tüm sayfaları görünür yapınca) BOŞ SAYFA isimli sayfa da solda ve
FİRMA İŞ LİSTESİ sayfasından önce konumlandırılsaymış.
Bu sayfayı en sonda tutmanızın özel sebebi var mıdır?

Bu sayfanın konumunu değiştirince, gördüğüm kadarıyla bu işlemden tüm kodlarınız etkilenecek,
zira kodlarınızda sayfa adı (FİRMA İŞ LİSTESİ) yerine bu sayfanın Index numarası (11) kullanılmış.
 
Boş Sayfa (12), İş Listesi(11) ve SıraNo-FirmaAdı(13-14-15......) sayfalarından veri alıp yıl sonu icmali oluşturacak. O yüzden şu an hem içeriği hem de adı boş.
 
Tekrar merhaba Sayın @cicosz .

Belgenizde sadece AŞAĞI OK ile sayfa taşıma ve buna bağlı link düzenleme olayına ilişkin kodlamayı oluşturdum.

Mevcut kodlardaki işlemlerin belki bir maksatı vardır diye düşünerek kodlarınızı silmek yerine,
kendi eklediğim kısım tamamlandıktan sonra ilgili koddan çıkış için Exit Sub satırı ekledim.
Eklediğim Exit Sub satırından sonraki kısım başka bir şey için lazım değilse;
Exit Sub satırı ve devamını silebiliriniz.

Benzer işlemi YUKARI OK için kendiniz düzenleyebilirsiniz diye düşündüm.

Ekteki belgede sadece AŞAĞI OK düğmesiyle ilgili denemeler yapıp sonucunu iletirsiniz.

Konularızı/sorularınızı belge bazlı açmak/sormak yerine işlem türü bazlı olarak açarsanız
(tabi açılacak konu başlığının da ihtiyacı/sorunu özetleyecek şekilde oluşturulması gerekir)
diğer forumdaşlar bakımından da yararlı olur ve yapılacak forum içi aramalarda,
benzer ihtiyacı/sorunu olan üyelerimiz, ilgili konu sayfalarına ulaşabilir.


İyi çalışmalar dilerim.

.
 
Ekli dosyalar
Sayın @cicosz .

Koddaki gizli sayfaları görünür yapıp, işlem sonrasında tekrar gizlenmesini sağlayan aşağıdaki kırmızı kısımlar silinebilir.
Ayrıca yeşil renklendirdiğim kısmı eklemekte de yarar var.

Son dolu satırın tespit edildiği Listbox1.RowSource satırında,
sayfanızda 19 ve devamı satırlarda iş listesiyle ilgili olmayan birşeyler olmayacaksa
[b19].End(xlUp) yerine Cells(Rows.Cound,2).End(3).Row yazarsanız daha iyi olur.
Zira iş listeniz 19'uncu satırdan sonrasına da taşabilecek gibi görünüyor.

Gördüğünüz gibi, işlemler için tüm sayfalar arasında döngülerle gezinmek/işlem/kontrol yapılmasına gerek yok.
Zira neticede işlem yapılacak iki unsur var, sayfada üstten alta, sayfa sıralamasında da soldan sağa yer değiştirme
işlemi yapılan iki adet sayfa ve iki adet hücre var. İşlemlerin bu iki satır/sayfa için yapılması hız bakımından avantaj getirecektir.

Ayrıca; amaçlanan başka bbir şey olup olmadığını bilmediğim için değinmedim ama
kodlarınızda bolca sayfa.select kod satırları var.
VBA kodlamalarında mümkün olduğunca bu tür Select kodu kullanmamanızı önermeliyim.

VBA:
Görüntülemek için giriş yapmanız gerekmektedir.
(11 satır)

.
 
Moderatörün son düzenlenenleri:
Evet, sadece değişen sayfalarda işlem yapmak daha mantıklı. Select konusu şöyle: raporu düzenleyen kişi listboxtan işi seçince, işin sayfasına fotoğraf ekleme işlemini unutmasın diye.
Formun temel işleyişini rahatlıkla çözmüşsünüz. Her türlü öneriye açığım, hatta sil baştan bile oluşturmak isterim.
 
Beni bilen bilir.
El attığım konuyu sonuna kadar takip ederim.
Daha evvel de belirttiğim gibi; diğer forumdaşların da yararlanması bakımından
işlem türü bazlı ve uygun başlıkla konu açtığınız sürece sorun yok, zevkle ilgilenirim.

Aklıma gelen durum örneğin; başka işlem için gerekmiyorsa Worksheet_Change kodu
üzerinden çalışan, L sütununa köprü ekleme kodlarına lüzum yok.
Zaten dikkat ederseniz; o kodun devreye girmemesi için, kodun ilgilili kısmına
Application.EnableEvents=False/True ekleyerek arkasından dolaşmıştım.
Bence o koda ihtiyaç yok.
Satır değiştirme sırasında köprü işi verdiğim kod ile hallediliyor (yukarı kaydırmayı hallettiğinizi sanıyorum).
Onun dışında, sayfaya satır eklendiğinde, (verdiğim koddaki gibi) sadece eklenen satır için köprü ekleme kod satırı yeterli olacaktır.

Forumumuzda mümkün olduğunca sık ve uzun süreli çevrimiçi olmanızı,
destek isteyen diğer forumdaşların sorularına cevaplar verirken de görmek istediğimizi belirterek iyi akşamlar diliyorum.
Bizler her daim buralardayız.

.
 
Sayın @cicosz .

Yukarı OK düğmesiyle ilgili bölümü hallettiniz mi acaba?
Diğer sorunların / CommandButton kodlarının durumu nedir?
Denemiş değilim ama kodlara baktığımda diğer CommanButton işlemlerinde de gereksiz çok fazla işlem kodu fark ettim.
Fark ettiğim bir başka husus ise; sayfa adları değiştiği için aşağı/yukarı taşıma işlemi TÜM İŞLER sayfasını da ilgilendiriyor.
Sayfa ismi değişikliğiyle ilgili başka bağlantı var mıdır bilemiyorum tabi. Varsa iletirsiniz.

Aslına bakarsanız, işlemleri temelden başka bir esasa bağlamanın yerinde olacağını düşünüyorum.
Her iş kaydı yapıldığında, o iş için benzersiz bir kimlik numarası/bilgisi oluşturup
(bu bilgi her iki Listboxa eklenecek birer sütunda görüntülenirse daha iyi olur elbette)
işlemleri/kodlamaları, sayfa adında kullanılan sayı ve firma kısaltmasından bağımsız olarak bu işin hangi sayfanın kaçıncı satırındaki iş olduğuna dair döngülere vs çok gerek kalmayacak gibi düşünüyorum.
Hatta ekranda görünmese bile bu işlerin hangi sayfanın hangi satırında yer aldığı bilgisi,
Userform açıldığı anda Listboxlara eklenecek yeni sütunlarda yer alabilir ve bu bilgiler kodlamalarda kullanılabilir vs.

Herbir işe ait benzersiz kimlik bilgisi, örneğin kaydın yapıldığı tarih/saat anlamına gelecek bir şey olabilir vs, onun kararını siz vereceksiniz.

Teşekkür mesajı yazdınız ama belgenin son durumu ne haldedir bilemiyorum.
Belgenin son halini foruma tekrar yüklerseniz, mevcut durum daha iyi anlaşılmış, gelinen aşama net görülebilmiş olur.

.
 
Merhaba,

Yukarı ok işlemi tamamlandı. Orada da süreden avantaj sağlanmış durumda.
Sayfa adları tüm işler ve iş listesinde işlem görmektedir.
Benzersizlik işlemini silinen işlere eklediğim sayısal değerlerle sağlıyorum şu anda. Ama kayıt esnasında da, bahsettiğiniz durum avantaj sağlayabilir. Bu sefer de sayfa kontrolü zorlaşabilir.
Change altındaki köprü işlemi çok da sistemi yormuyor gibi. Ama o da değiştirilebilir.
Silme konusuna şu ana kadar hiç bakamadım.

Dosya bitince buraya ekleyeceğim. Hatta öncesi - sonrası şeklinde performans karşılaştırması dahi yapılabilir.
 
Geri
Üst