• DİKKAT

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

Kullanıcı Tanımlı Fonsiyon Güncelleme Hatası..

Katılım
23 Eylül 2004
Mesajlar
1,754
Excel Vers. ve Dili
Excel 2010 TR
Kod:
Function İzin_günü(Giris_tarihi, Çıkış_Tarihi, Yarım)
    Dim t1      As Date, _
        t2      As Date, _
        c1c       As Range, _
        D1d       As Range, _
        i       As Long, _
        Gun     As Integer, _
        Tatil   As Double
    Set s1 = Sheets("Data")
    
  If Giris_tarihi = "" Or Çıkış_Tarihi = "" Then
   İzin_günü = 0
    Else
        t1 = Giris_tarihi
        t2 = Çıkış_Tarihi - 1
        Tatil = 0
        Gun = (t2 + 1) - t1
  
            For i20 = t1 To t2
            ayss = Weekday(i20, vbSunday)
            tarih_t = Format(i20, "DD.MM.YYYY")
                        
            If ayss = 1 Then
            Tatil = Tatil + 1
            Else
            Set c1c = s1.Range("A2:A15").Find(tarih_t, LookIn:=xlValues)
            If Not c1c Is Nothing Then Tatil = Tatil + 1
            Set D1d = s1.Range("B2:B15").Find(tarih_t, LookIn:=xlValues)
            If Not D1d Is Nothing Then Tatil = Tatil + 0.5
            End If
                  
            Next i20
    End If
            If Yarım <> 0 Then
            İzin_günü = Gun - Tatil - 0.5
            Else
            İzin_günü = Gun - Tatil
            End If

    End Function

Ekli kodlarla izin sürelerini hesaplıyorum... 16.04.2012 ve 02.05.2012 tarihleri arasında 14 gün var pazarlar hariç. ve 02.05.2012 işe başlama tarihi olduğu için onuda saymıyorum..

Aşağıdaki formul ile A2:A15 satırları arasında tatil günleri yazılı ve eğer bu 16 nisan - 02 mayıs arasındaki gunlerde tatil varsa onları izin gününden düşüyorum bu tarihler arasında 23 nisan ve 01 mayıs denk geliyor ve sonuç olarak 12 gün elde ediyorum buraya kadar herşey normal çalışıyor.

tarih_t = Format(i20, "DD.MM.YYYY")
Set c1c = s1.Range("A2:A15").Find(tarih_t, LookIn:=xlValues)
If Not c1c Is Nothing Then Tatil = Tatil + 1


Dosyanın İzin Dosyası sayfasında kayıt no değiştirinde diğer kişilerin bilgilerini getiriyor ve işlem yapıp tekrar kaydettiyorum.

izin dosyası sayfasına 1604-0205 tariler arasında izin kullanan kişiye tekrar geldiğimde izin_süresi function 12 gün hesapladığı gün sayısını 14 yapıyor formulun olduğu hücrenin üzerine gelip F2+Enter dersem tekrar 12 düşürüyor. burda bir refresh hatası var ama bir türlü çözemedim application.Volatile işe yaramadı.

İzin dosyası sayfası C3 satırına 56 yazıp enter derseniz H2 satırı 14 oluyor.

aynı şekilde güncelle butonuna basıncada aynı sorun ile karşılaşıyorum.

Bu konu hakkında yardımcı olabilirseniz sevinirim.

Win 7 64 bit ofiice 2010

İyi Çalışmalar.
 

Ekli dosyalar

Merhaba,

Aşağıdaki fonksiyonu denermisiniz.

Kod:
Option Explicit
 
Function İZİN_HESAPLA(İlk_Tarih As Range, Son_Tarih As Range, Yarım_Gün As Range)
    Dim SD As Worksheet, X As Date, Gün_Kontrol As Byte, Tatil As Double
    
    If İlk_Tarih = "" Or Son_Tarih = "" Then
        İZİN_HESAPLA = 0
        Exit Function
    End If
    
    Application.ScreenUpdating = False
    Application.Volatile True
    
    Set SD = Sheets("Data")
    
    For X = İlk_Tarih To Son_Tarih
        Gün_Kontrol = Weekday(X, vbSunday)
        
        If Gün_Kontrol = 1 Then
            Tatil = Tatil + 1
        Else
            If WorksheetFunction.CountIf(SD.Range("A:A"), X) > 0 Then
                Tatil = Tatil + 1
            End If
            
            If WorksheetFunction.CountIf(SD.Range("B:B"), X) > 0 Then
                Tatil = Tatil + 0.5
            End If
        End If
    Next
    
    İZİN_HESAPLA = IIf(Yarım_Gün.Value <> 0, _
                   Son_Tarih - İlk_Tarih - Tatil - 0.5, _
                   Son_Tarih - İlk_Tarih - Tatil)
    
    Application.ScreenUpdating = True
End Function
 
Geri
Üst