Posted by
Wizard of Wor
Haz
3
Diğer blog sayfam Web defteri‘nin Bilgisayarı kullanmak bölümü blog’un bütünüyle pek de uyuşmadığı için, arama motorlarından gelen ziyaretçiler de genelde bu bölümdeki yazılara geldiğinden, karma karışık, kime ve neye hizmet ettiği belli olmayan bir sayfa yerine farklı kulvarlada iki blog tutmanın daha doğru olduğuna karar verdim.
Kod Defteri böyle doğdu. Artık Windows için pratik ipuçları, Visual Basic ve PHP kod parçaları, örnek Access uygulamaları tarzı şeyler için ayrı bir blog var. Bu tarz yazıların hepsini Kod Defteri’ne taşıyorum.
Posted by
Wizard of Wor
May
9
Excel için hazırlanan VBA makrolarının en büyük handikapı performans problemidir. Eğer VBA ile Excel sayfası arasında çok fazla veri alış verişi varsa hatrı sayılır bir süre beklemeniz gerekebilir. Bu yazıdaki ip uçlarını kullanarak makrolarınız performansını biraz arttırabilirsiniz.
1. Hücreleri teker teker okumak yerine bütün bir range’i tek seferde bir dizi değişkenine atayın. Aynı şey verileri geri yazarken’de geçerli.
1
2
3
4
5
| Dim A as Variant
'okuma
A = Range("SomeRange").Resize(10,20)
'geri yazma
Range("SomeRange").Resize(10,20) = A |
2. Değişkenleri değişken tipleriyle beraber tanımlamak size hız kazandıracaktır.
3. Kullanıdığını worksheet fonksiyonlarının yerine VBA kodlarıyla kendi fonksiyonlarınızı yazabiliyorsanız bu daha hızlı çalışacaktır.
4. Daha hızlı çalışmak için makro başladıktan sonra ekran güncellemesini kaptın. İşiniz bittikten sonra tekrar açarsınız.
1
| Application.ScreenUpdating = False |
5. Aynı şekilde otomatik hesaplama özelliği de geçici olarak kapatılabilir.
1
2
3
| Application.Calculation = xlManual
'Eski duruma dönmek için
Application.Calculation = xlAutomatic |
6. Eğer makronuzun çalışması uzun sürecekse durum çubuğundan kullanıcıya işin ilerlemesi hakkında bilgi vermek faydalı olabilir. Fikir olması açısından text dosyasından okuma yapan bir makroya ait aşağıdaki örnek kodu inceleyebilirsiniz:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| dBoy = FileLen(dosya) / 128 'dosyanın boyutunu al ve 128'e böl.
Open dosya For Input As #1
Do While Not EOF(1) ' dosyanın sonuna gelinceye dek kadar devam et
Line Input #1,metin
N = N + 1 'satırları say
'Loc() her 128 bayt'lık bloklar halinde dosyanın içindeki pozisyonu verir
bunu kularak yüzde olarak dosyanın neresinde olduğumuzu anlayabiliriz.
Bu bilgiyi kullanarak durum çubuğunda ilerleme durumu gösterelim ve
her 100 kayıtta bir durum çubuğunu güncelleyelim
If N Mod 100 = 0 Then Application.StatusBar = "İlerleme " & Format(Loc(1)/dBoy,"0%")
Loop
Close
'durum çubuğunu tekrar Excel'e bırakalım.
Application.StatusBar = False |
7. Text dosyasından hızlı bir şekilde veri almak ve yazmak için aşağıdaki kodu deneyebilirsiniz.
1
2
3
4
5
6
7
8
9
10
| 'yazmak için
Open "c:temptest.txt" For Binary As #1
Put #1,,A
Close
'okumak için
Dim A(30,10) As Single
Open "c:temptest.txt" For Binary As #1
Get #1,,A
Close |
Umarım bu bilgiler işinize yarar.
Kaynak: http://www.avdf.com/apr98art_ot003.html