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