Soru TextBox'ta süre kontrolü?

Katılım
12 Ocak 2009
Mesajlar
838
Excel Vers. ve Dili
2003
Altın Üyelik Bitiş Tarihi
07-02-2024
Merhaba arkadaşlar.
Userform1 üzerinde bulunan Textbox7 ye girdiğim tarihten sonraki 3 iş günü sonrasını hesaplayacak bir makro lazım.
Örnek 1: tarih 16.12.2019 ise bu tarihten sonraki üçüncü iş günü 19.12.2019 olarak hesaplanması,
Örnek 2: tarih 18.12.2019 ise bu tarihten sonraki üçüncü iş günü, 23.12.2019 olarak hesaplaması gerekiyor.
Hesaplanan tarih bir mesaj kutusunda da gösterilebilir.
Yardımcı olacak arkadaşlara teşekkür ederim.
212162
 

muygun

Özel Üye
Katılım
6 Temmuz 2004
Mesajlar
9,224
Excel Vers. ve Dili
Excel-2003 Türkçe
Merhaba;
Ben Textbox1 (girilen tarih) ve Textbox2 (sonuç) kullandım.

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox1 = Format(TextBox1, "dd.mm.yyyy")
TextBox2 = Format(DateAdd("d", 3, CDate(TextBox1)), "dd.mm.yyyy")
If Weekday(TextBox2) = 7 Then TextBox2 = Format(DateAdd("d", 5, CDate(TextBox1)), "dd.mm.yyyy")
If Weekday(TextBox2) = 1 Then TextBox2 = Format(DateAdd("d", 4, CDate(TextBox1)), "dd.mm.yyyy")
End Sub

Şeklinde deneyin.
İyi çalışmalar.

Girilen tarih dahil-hariç durumuna göre 3 sayısını 2 olarak ve 5-4 sayılarını 4-3 gibi değiştirin.
 

hamitcan

Uzman
Uzman
Katılım
1 Temmuz 2004
Mesajlar
7,761
Excel Vers. ve Dili
Excel 2019 Türkçe
İşgünü fonksiyonunu kullanabilirsiniz. Örnekteki A1:A10 aralığına tatil günleri girilmelidir. Tabii ki bu aralık daha uzun olacaktır. Ben sadece örnek olması açısından yazdım.
Kod:
Sub Tarih()
    MsgBox VBA.FormatDateTime(WorksheetFunction.WorkDay("12/18/2019", 3, Range("a1:a10")), vbShortDate)
End Sub
 
Katılım
12 Ocak 2009
Mesajlar
838
Excel Vers. ve Dili
2003
Altın Üyelik Bitiş Tarihi
07-02-2024
Merhaba;
Ben Textbox1 (girilen tarih) ve Textbox2 (sonuç) kullandım.

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox1 = Format(TextBox1, "dd.mm.yyyy")
TextBox2 = Format(DateAdd("d", 3, CDate(TextBox1)), "dd.mm.yyyy")
If Weekday(TextBox2) = 7 Then TextBox2 = Format(DateAdd("d", 5, CDate(TextBox1)), "dd.mm.yyyy")
If Weekday(TextBox2) = 1 Then TextBox2 = Format(DateAdd("d", 4, CDate(TextBox1)), "dd.mm.yyyy")
End Sub

Şeklinde deneyin.
İyi çalışmalar.

Girilen tarih dahil-hariç durumuna göre 3 sayısını 2 olarak ve 5-4 sayılarını 4-3 gibi değiştirin.
Üstadım teşekkür ederim. Bu haliyle güzel sonuç verdi.
Yalnız küçük bir revize gerekiyor, şöyle ki kaza hafta sonu gerçekleşmiş olursa bildirim için, takip eden ilk pazartesinden itibaren 3 iş gününü hesaplatmak gerekiyor.
Örnek resimde kaza 14.12.2019 da olmuştur. Bu duruma göre hesaplanması gereken bildirim süresi p.tesi gününden başlamalı ve bildirim tarihi 18.12.2019 olarak hesaplanmalı.
212182.
 

muygun

Özel Üye
Katılım
6 Temmuz 2004
Mesajlar
9,224
Excel Vers. ve Dili
Excel-2003 Türkçe
Merhaba;

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox1 = Format(TextBox1, "dd.mm.yyyy")
ilktar = Format(TextBox1, "dd.mm.yyyy")
If Weekday(TextBox1) = 7 Then ilktar = Format(DateAdd("d", 2, CDate(TextBox1)), "dd.mm.yyyy")
If Weekday(TextBox1) = 1 Then ilktar = Format(DateAdd("d", 1, CDate(TextBox1)), "dd.mm.yyyy")

TextBox2 = Format(DateAdd("d", 3, CDate(ilktar)), "dd.mm.yyyy")
If Weekday(TextBox2) = 7 Then TextBox2 = Format(DateAdd("d", 5, CDate(ilktar)), "dd.mm.yyyy")
If Weekday(TextBox2) = 1 Then TextBox2 = Format(DateAdd("d", 4, CDate(ilktar)), "dd.mm.yyyy")
End Sub

Şeklinde deneyin.
İyi çalışmalar.
 
Katılım
12 Ocak 2009
Mesajlar
838
Excel Vers. ve Dili
2003
Altın Üyelik Bitiş Tarihi
07-02-2024
Merhaba;

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox1 = Format(TextBox1, "dd.mm.yyyy")
ilktar = Format(TextBox1, "dd.mm.yyyy")
If Weekday(TextBox1) = 7 Then ilktar = Format(DateAdd("d", 2, CDate(TextBox1)), "dd.mm.yyyy")
If Weekday(TextBox1) = 1 Then ilktar = Format(DateAdd("d", 1, CDate(TextBox1)), "dd.mm.yyyy")

TextBox2 = Format(DateAdd("d", 3, CDate(ilktar)), "dd.mm.yyyy")
If Weekday(TextBox2) = 7 Then TextBox2 = Format(DateAdd("d", 5, CDate(ilktar)), "dd.mm.yyyy")
If Weekday(TextBox2) = 1 Then TextBox2 = Format(DateAdd("d", 4, CDate(ilktar)), "dd.mm.yyyy")
End Sub

Şeklinde deneyin.
İyi çalışmalar.
Üstadım teşekkür ederim.
Örnek resimde de görüleceği üzere hafta sonu (07.12.2019 veya 08.12.2019) olan kazada son bildirim tarihi 11.12.2019 olmalı. Mevcut kod ile bir gün gecikmeye giriyor.
212188
 
Katılım
12 Ocak 2009
Mesajlar
838
Excel Vers. ve Dili
2003
Altın Üyelik Bitiş Tarihi
07-02-2024
Kod:
Private Sub TextBox7_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox7 = Format(TextBox7, "dd.mm.yyyy")
ilktar = Format(TextBox7, "dd.mm.yyyy")
If Weekday(TextBox7) = 7 Then ilktar = Format(DateAdd("d", 1, CDate(TextBox7)), "dd.mm.yyyy")
If Weekday(TextBox7) = 1 Then ilktar = Format(DateAdd("d", 0, CDate(TextBox7)), "dd.mm.yyyy")

Label85 = Format(DateAdd("d", 3, CDate(ilktar)), "dd.mm.yyyy")
If Weekday(Label85) = 7 Then Label85 = Format(DateAdd("d", 5, CDate(ilktar)), "dd.mm.yyyy")
If Weekday(Label85) = 1 Then Label85 = Format(DateAdd("d", 4, CDate(ilktar)), "dd.mm.yyyy")
End Sub
Kod daki 1 ve 2 yi 0-1 olarak değiştirince sorun giderilmiş oldu.
Hamitcan ve muygun üstatlarım tekrar elinize emeğinize sağlık.
 
Katılım
12 Ocak 2009
Mesajlar
838
Excel Vers. ve Dili
2003
Altın Üyelik Bitiş Tarihi
07-02-2024
Yukarıdaki düzenleme ile sadece hafta sonları düzeltilmiş oldu ancak hafta içinde olay bir olayda hafta sonunu hesaba katmadı.
212195
 
Katılım
12 Ocak 2009
Mesajlar
838
Excel Vers. ve Dili
2003
Altın Üyelik Bitiş Tarihi
07-02-2024
Kod:
Private Sub TextBox7_Exit(ByVal Cancel As MSForms.ReturnBoolean)
ilktar = Format(TextBox7, "dd.mm.yyyy")
If Weekday(TextBox7) = 7 Then ilktar = Format(DateAdd("d", 2, CDate(TextBox7)), "dd.mm.yyyy")
If Weekday(TextBox7) = 1 Then ilktar = Format(DateAdd("d", 1, CDate(TextBox7)), "dd.mm.yyyy")

Label85 = Format(DateAdd("d", 3, CDate(ilktar)), "dd.mm.yyyy")
If Weekday(Label85) = 7 Then Label85 = Format(DateAdd("d", 5, CDate(ilktar)), "dd.mm.yyyy")
If Weekday(Label85) = 1 Then Label85 = Format(DateAdd("d", 4, CDate(ilktar)), "dd.mm.yyyy")
End Sub
Pazartesinden Pazara kadar her gün için olasılıkları denedim.
Pazartesinden Çarşambaya kadar doğru sonuç veriyor.
212201
212202
212203
Ancak Perşembe, Cuma ve hafta sonlarını kurala göre hesaplamıyor. Aslında Cuma, Cumartesi ve Pazar günleri için yasal bildirim süresi devam eden Çarşamba günü oluyor.
212204
212205
212206
212207
 

TURKOLOG

Altın Üye
Katılım
13 Kasım 2008
Mesajlar
744
Excel Vers. ve Dili
2016 64 TR
Altın Üyelik Bitiş Tarihi
29-10-2026
Sayın @s.savas dosyanızı paylaşmanız mümkün müdür
 
Katılım
12 Ocak 2009
Mesajlar
838
Excel Vers. ve Dili
2003
Altın Üyelik Bitiş Tarihi
07-02-2024
Sayın @s.savas dosyanızı paylaşmanız mümkün müdür
Elbette, kişisel bilgileri ayıkladıktan sonra paylaşırım.
Programın sorunsuz çalışabilmesi için sisteme kullanıcı adı ve parola ile giriş yapılmaldır. Aksi taktirde çalışmaz.
Kullanıcı:11
Şifre:11
Lokal bağlantı seçilmeli veya yol gösterden klasördeki data.mdb ye yol gösterilmeli.
 

Ekli dosyalar

Son düzenleme:
Katılım
12 Ocak 2009
Mesajlar
838
Excel Vers. ve Dili
2003
Altın Üyelik Bitiş Tarihi
07-02-2024
İyi akşamlar arkadaşlar.
Konuyu güncellemek istedim. Altın üyeliği olmayanlar için.
 
Son düzenleme:

EmrExcel16

Destek Ekibi
Destek Ekibi
Katılım
1 Kasım 2012
Mesajlar
1,524
Excel Vers. ve Dili
Office 365 Türkçe
Merhaba kodlarin arasina bir yere aşağidaki kodu ekleyip istediğiniz tarihi veriyormu denermisiniz ?

Kod:
Msgbox Format(Application.WorkDay(TextBox7, 3), "dd/mm/yyyy")
 

EmrExcel16

Destek Ekibi
Destek Ekibi
Katılım
1 Kasım 2012
Mesajlar
1,524
Excel Vers. ve Dili
Office 365 Türkçe
Bu şekilde dener misiniz.

Kod:
MsgBox Format(Application.WorkDay(CDate(TextBox7), 3), "dd/mm/yyyy")
 
Üst