• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Makro hızlandırma

Katılım
23 Mart 2007
Mesajlar
93
Excel Vers. ve Dili
2003 Excel Türkce
Arkadaşlar herkese selamalr,
Sayın Yurttaşın altta yazan makrosunu kullanıyorum ancak çok ağır hesaplıyor
sanki Bu makroyu daha hızlı çalıştırabilirmiyiz acaba?

Public Function TOPLATL( _
ParamArray vInput() As Variant) As Variant
Dim rParam As Variant
Dim rCell As Range
Dim vTemp As Variant

Application.Volatile
On Error GoTo Hata
For Each rParam In vInput
If TypeName(rParam) = "Range" Then
With rParam
For Each rCell In Intersect( _
.Cells, .Cells.Parent.UsedRange)
With rCell
If .NumberFormat = "#,##0.00 $" Then
If IsError(.Value) Then
vTemp = .Value
Exit For
ElseIf VarType(.Value2) = vbDouble Then
vTemp = vTemp + .Value2
End If
End If
End With
Next rCell
End With
End If
Next rParam
TOPLATL = vTemp
Devam:
On Error GoTo 0
Exit Function
Hata:
If Err.Number = 6 Then TOPLATL = CVErr(xlErrNum)
Resume Devam
End Function

Public Function TOPLAUSD( _
ParamArray vInput() As Variant) As Variant
Dim rParam As Variant
Dim rCell As Range
Dim vTemp As Variant

Application.Volatile
On Error GoTo Hata
For Each rParam In vInput
If TypeName(rParam) = "Range" Then
With rParam
For Each rCell In Intersect( _
.Cells, .Cells.Parent.UsedRange)
With rCell
If .NumberFormat = "[$$-409]#,##0.00" Then
If IsError(.Value) Then
vTemp = .Value
Exit For
ElseIf VarType(.Value2) = vbDouble Then
vTemp = vTemp + .Value2
End If
End If
End With
Next rCell
End With
End If
Next rParam
TOPLAUSD = vTemp
Devam:
On Error GoTo 0
Exit Function
Hata:
If Err.Number = 6 Then TOPLAUSD = CVErr(xlErrNum)
Resume Devam
End Function

Public Function TOPLAmanat( _
ParamArray vInput() As Variant) As Variant
Dim rParam As Variant
Dim rCell As Range
Dim vTemp As Variant

Application.Volatile
On Error GoTo Hata
For Each rParam In vInput
If TypeName(rParam) = "Range" Then
With rParam
For Each rCell In Intersect( _
.Cells, .Cells.Parent.UsedRange)
With rCell
If .NumberFormat = "#,##0.00 [$MNT]" Then
If IsError(.Value) Then
vTemp = .Value
Exit For
ElseIf VarType(.Value2) = vbDouble Then
vTemp = vTemp + .Value2
End If
End If
End With
Next rCell
End With
End If
Next rParam
TOPLAmanat = vTemp
Devam:
On Error GoTo 0
Exit Function
Hata:
If Err.Number = 6 Then TOPLAmanat = CVErr(xlErrNum)
Resume Devam
End Function
 
Evet oldukça fazla kullanıyorum ama kodu eklemeden önce hiç bir şekilde bu kadar yavaş çalışmıyordu,kodu ekleyince aşırı yavaşladı.
 
Evet oldukça fazla kullanıyorum ama kodu eklemeden önce hiç bir şekilde bu kadar yavaş çalışmıyordu,kodu ekleyince aşırı yavaşladı.
Selam,
Yavaşlamanın sebebi verdiğiniz koldar ile tek başına anlaşılamaz. Ben, hem makro hem de fonksiyon olarak kullandığım sayfalarda şu şekilde yapıyorum
Kod:
Sub örnek()

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'
'
'
'Bu bölümde kodlarım
'
'
'
'
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub

Oldukça hızlanıyor. Örneğin bir sayfam vardı. Bu kodlardan önce 5-10 dk hesaplar iken şimdi 1-2 sn.de hesaplıyor.
Muhtemelen siz Public Function'ları başka kodlar içinde kullanıyorsunuz. İşte bu kullandığınız kodların başına ve sonuna yukarıdaki kodları ekleyerek bir deneyiniz.
 
Sn Ergün Güler öncelikle ilginize teşekkür ediyorum.
Makro konusundo çok fazla bilgim yok bu nedenle demek istediğinizi anlayamadım.
Ben Sn Yurttaşın örnek verdiği makro kodunu kendi sayfama yapıştırdım sadece
işimi görüyor ama çok yavaş çalışıyor,eğer dediğinizi uygulayabilirsem süper olur
ama nasıl?
Cevabınızı bekliyorum
Saygılar...
 
Yardım edebilecek arkadaşlardan cevap bekliyorum.

Saygılar...
 
.

http://www.excel.web.tr/f122/farkly-para-cinslerinin-toplanmasy-yontemleri-t87186.html

Buraya eklediğim dosyada yer alan:

Kod:
Function TOPLATL(alan As Range)

Application.Volatile

For Each Cell In alan
If Cell.NumberFormat = "#,##0.00 $" Then
TOPLA = TOPLA + Cell.Value
End If
Next Cell

TOPLATL = TOPLA
End Function


Function TOPLAD(alan As Range)

Application.Volatile

For Each Cell In alan
If Cell.NumberFormat = "[$$-409]#,##0.00" Then
TOPLA = TOPLA + Cell.Value
End If
Next Cell

TOPLAD = TOPLA
End Function


Function TOPLAE(alan As Range)

Application.Volatile

For Each Cell In alan
If Cell.NumberFormat = "[$€-2] #,##0.00" Then
TOPLA = TOPLA + Cell.Value
End If
Next Cell

TOPLAE = TOPLA
End Function

Function TOPLAP(alan As Range)

Application.Volatile

For Each Cell In alan
If Cell.NumberFormat = "[$£-809]#,##0.00" Then
TOPLA = TOPLA + Cell.Value
End If
Next Cell

TOPLAP = TOPLA
End Function

kodları kendi dosyanıza uyarlayın.


.
 
Sn. Yurttaş bütün formulleri götürüyor bu makro (DEĞER Hatası veriyor)
buna rağmen hızında en ufak bir değişiklik olmadı,hatta dahada ağırlaştı gibi.
 
Sn. Yurttaş sizin yazdığınız ilk makro (1. mesajımdaki) acaba daha hızlı çalışır hale getirilemez mi?
 
Sn. Yurttaş bütün formulleri götürüyor bu makro (DEĞER Hatası veriyor)
buna rağmen hızında en ufak bir değişiklik olmadı,hatta dahada ağırlaştı gibi.

Sayın almrtlr,
Sayın Yurttaş'ın verdiği kodları denedim. herhangi bir sıkıntı yok.
anladığım kadarıyla siz de zaten =TOPLATL gibi fonksiyon mevcut. eski kodları silip yenisini ekleyince (Sayın Yurttaş'ın), hücrelerdeki TOPLATL formüllerini aşağıdaki gibi girerek deneyiniz. E5:E16 aralığı örnektir.
Kod:
=TOPLATL(E5:E16)
[/CODE]
 
Sn Ergün Güler
Dediklerinizi uyguladım ama DEĞER hatası veriyor,sadece TL de değil
diğer para birimlerindede aynı hatayı veriyor,sistem çöküyor yani,
bana ilk örnekteki kodları hızlandıracak bir makro gerekli sanırım...
 
Sn Ergün Güler
Dediklerinizi uyguladım ama DEĞER hatası veriyor,sadece TL de değil
diğer para birimlerindede aynı hatayı veriyor,sistem çöküyor yani,
bana ilk örnekteki kodları hızlandıracak bir makro gerekli sanırım...

Selam,
Dosyanızdaki kodları hızlandırabilmek için, önce sorunlu dosyanızı konuya eklemek içib hızlı olmanız gerekirdi.
dosyanızı eklememekte ısrar ediyorsunuz.
 
Geri
Üst