kodları modüle taşıyarak for-next döngüsü kurmak

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,421
Excel Vers. ve Dili
excel 2010
merhaba
ekte syn hsayar'ın yazmış olduğu kodlar çalışmasına rağmen düzenleme yapmak gerekiyor. arkadaşlarımız ilgilenir mi acaba?

1-) sayfanın kod bölümünden modüle taşınarak, sayfada ilgili alanda işlem yapıldığında devreye girmesi sağlanacak.
2-) veri girişleri belli sırada olmadığı durumda aktif hücredeki değerin değişmesine bağlı kalmayarak her defasında for-next döngüsü ile bütün veriler kontrol edilecek.
3-) tüm verileri kontrol ettiğinde hata mesajı verecek ama ilk hatalı verinin girildiği hücrede çakılı kalmayacak, tüm hatalı verileri silecek. (kopyala yapıştır ile veri girildiğinde birden fazla hatalı veri girilmiş olabilir)
 
Son düzenleme:
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
hocam yarın bakmaya çalışrım yalnız sormak istediğim bir şey var

Tarihkontol Makrosu aktif sayfayımı tarayacak tüm kitabımı tarayacak
Tarihler G-H-I-J-L de kalacak hala değilmi?
 

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,421
Excel Vers. ve Dili
excel 2010
merhaba
syn hsayar, mevcut sayfalarımda benzer şekilde çok sayıda hesap/işlem yapan makrolarım var. sayfanın kod bölümünde hepsini birleştirmek sorun oluyor. karmaşaya mahal vermemek için madüllerden çağırmak istiyorum.
tarih kontrol makrosu aktif sayfayı tarayacak.
imalat sayfasında G-H-I-J gerçekleşen sayfada sadece L sütununda çalışacak

not: takvim denetimini mevcut kodların dışında tutmakta fayda var. DatePicker takvimi kullanımına izin vermek doğru olur.
 
Son düzenleme:
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
dosyayı ekledim açıklamaları yapacam

Kod:
Function ilkgün(tarih)
    ilkgün = Format(tarih - Day(tarih) + 1, "dd/mm/yyyy")
End Function
Function songün(tarih)
    songün = Format((DateSerial(Year(tarih), Month(tarih) + 1, 1)) - 1, "dd/mm/yyyy")
End Function
Kod:
Sub Tar_Kont()
Call Tar_Kont_1
Call Tar_Kont_2
Call Tar_Kont_3
Call Tar_Kont_3b
Call Tar_Kont_4
End Sub
[code]
Private Sub Tar_Kont_1()
Dim hucre As Range
For Each hucre In Range("g5:j20")
tarih = hucre.Value
'1 başlangıç ve bitiş tarihleri denetim tarihleri aralığında olmalıdır
If tarih <> "" Then
If hucre.Column = 7 Or hucre.Column = 8 Or _
hucre.Column = 9 Or hucre.Column = 10 Then
If tarih < Range("b3").Value Then
MsgBox hucre.Address & " Denetim Başlangıç tarihinden küçük tarih giremezsiniz"
hucre.Value = "": hucre.Interior.ColorIndex = 3
'GoTo 10
ElseIf tarih > Range("b4").Value Then
MsgBox hucre.Address & " Denetim Bitiş tarihinden büyük tarih giremezsiniz"
hucre.Value = "": hucre.Interior.ColorIndex = 3
'GoTo 10
End If
End If
End If
Next
End Sub
[/code]
Kod:
Private Sub Tar_Kont_2()
Dim hucre As Range
For Each hucre In Range("g5:j20")
    tarih = hucre.Value
'2 her aşamadaki bitiş tarihi başlangıç tarihinden en az 7 gün büyük olmalı
    If tarih <> "" Then
        If hucre.Column = 8 Or hucre.Column = 10 Then
        BsTr = hucre.Offset(0, -1).Value:             Fark = tarih - BsTr
            If Fark < 7 Then
                MsgBox hucre.Address & " Bitiş tarihi başlangıç tarihinden 7 gün fazla olmalıdır"
                hucre.Value = "": hucre.Interior.ColorIndex = 3
            End If
        End If
    End If
Next
End Sub
Kod:
Private Sub Tar_Kont_3()
Dim hucre As Range
For Each hucre In Range("j5:j20")
    tarih = hucre.Value
'3 2. aşama başlangıç tarihi 1. aşama bitiş tarihinden en az 7 gün büyük olmalı
    If tarih <> "" Then
        If hucre.Column = 9 Then
        BsTr = hucre.Offset(0, -1).Value:             Fark = tarih - BsTr
            If Fark < 7 Then
                MsgBox hucre.Address & " 2. Aşama Başlangıç tarihi, 1. aşama bitiş tarihinden 7 gün fazla olmalıdır"
                hucre.Value = "": hucre.Interior.ColorIndex = 3
            End If
        End If
    End If
Next
End Sub
Kod:
Private Sub Tar_Kont_3b()
Dim hucre As Range
For Each hucre In Range("I5:j20")
    tarih = hucre.Value
'''''1. aşama için başlangıç bitiş tarihi girilmemişse 2. aşama için giriş yapamazsınız
    If tarih <> "" Then
        If hucre.Column = 9 Or hucre.Column = 10 Then
            BStr1 = hucre.Offset(0, -2).Value '5 sütun önce
            Bttr1 = hucre.Offset(0, -1).Value '4 sütun önce
            If BStr1 = "" Or Bttr1 = "" Then
                'If tarih < BStr1 Or tarih > Bttr1 Then
                 MsgBox hucre.Address & "  1. Aşama için başlangıç ve bitiş tarihleri girilmemiş!"
                    'hucre.Value = ""
                    hucre.Interior.ColorIndex = 3
            End If
        End If
   End If
Next
End Sub
Kod:
Private Sub Tar_Kont_4()
Dim hucre As Range
For Each hucre In Range("L5:L20")
    tarih = hucre.Value
'''''4 kontrol tarihi, denetim tarihleri aralığında olmalıdır
    If tarih <> "" Then
        If hucre.Column = 12 Then
            BStr1 = hucre.Offset(0, -5).Value '5 sütun önce
            Bttr1 = hucre.Offset(0, -4).Value '4 sütun önce
            BStr2 = hucre.Offset(0, -3).Value '3 sütun önce
            Bttr2 = hucre.Offset(0, -2).Value '2 sütun önce
                If BStr1 <> "" Or Bttr1 <> "" Or BStr2 = "" Or Bttr2 = "" Then
                    If tarih < BStr1 Or tarih > Bttr1 Then
                        MsgBox hucre.Address & "  1. Aşama için yanlış aralıkta kontrol tarihi girdiniz"
                        'hucre.Value = ""
                        hucre.Interior.ColorIndex = 3
                    End If
                End If
                
                If BStr2 <> "" Or Bttr2 <> "" Then
                    If tarih < BStr2 Or tarih > Bttr2 Then
                        MsgBox hucre.Address & "  2. Aşama için yanlış aralıkta kontrol tarihi girdiniz"
                        'hucre.Value = ""
                        hucre.Interior.ColorIndex = 3
                    End If
                End If
        End If
   End If
Next
End Sub
Kodları inceleyiniz;
hucre.Value = "": hucre.Interior.ColorIndex = 3

satırlarında hucre value = "" stırlarını kapatıp interior kullanabilirsiniz aksi takdirde formulüde silecektir... ben onu unuttum bir inceleyin
Tarih kontol butonunu istediğiniz sayfaya kopyalayarak kullabilirisiniz....

başka bir sorun çıkarsa bakarız
 
Son düzenleme:

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,421
Excel Vers. ve Dili
excel 2010
merhaba
syn hsayar, kodlar&#305; kendi &#231;al&#305;&#351;mama adapte ettim, elinize sa&#287;l&#305;k.
Private Sub Tar_Kont_4() yordam&#305;na ilkg&#252;n fonksiyonunu ilave edebilir misiniz?
 

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,421
Excel Vers. ve Dili
excel 2010
merhaba
1-) Private Sub Tar_Kont_4() yordam&#305;nda; 2. a&#351;ama i&#231;in tarih kontrol&#252; yaparken 1. a&#351;amayla ilgili tarih girildi&#287;inde hata veriyor. k&#305;yaslamay&#305; d&#252;zeltmek laz&#305;m.
If BStr2 <> "" Or Bttr2 <> "" Then
If tarih < BStr2 Or tarih > Bttr2 Then
MsgBox hucre.Address & " 2. A&#351;ama i&#231;in yanl&#305;&#351; aral&#305;kta kontrol tarihi girdiniz"
'hucre.Value = ""
hucre.Interior.ColorIndex = 3
End If
2-) do&#287;ru tarih girildi&#287;inde, girilen ay&#305;n ilk g&#252;n&#252;n&#252; ayn&#305; h&#252;creye yazmak gerekiyor (15.05.08 i&#231;in 01.05.08 gibi)
 

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,421
Excel Vers. ve Dili
excel 2010
merhaba
Private Sub Tar_Kont_4() i&#231;in kodlar&#305;n &#231;al&#305;&#351;ma &#351;ekli biraz kar&#305;&#351;&#305;k, k&#305;saca anlatmaya &#231;al&#305;&#351;ay&#305;m:
burada kontrol tarihi giri&#351;i opsiyonel, e&#287;er girilecekse ilgili aral&#305;kta kalmas&#305; laz&#305;m.
a-) tarih giri&#351;i, i&#351;in ba&#351;lang&#305;&#231; ve biti&#351; tarihi aral&#305;&#287;&#305;nda olmal&#305;
b-) 1. a&#351;ama ile ilgili tarih girilmek istendi&#287;inde 2. a&#351;ama tarihlerini dikkate alma
c-) 2. a&#351;ama ile ilgili tarih girilmek istendi&#287;inde 1. a&#351;ama tarihlerini dikkate alma
d-) do&#287;ru tarih girildi&#287;inde, girilen ay&#305;n ilk g&#252;n&#252;n&#252; ayn&#305; h&#252;creye yazmak gerekiyor (15.05.08 i&#231;in 01.05.08 gibi)
bu denetimi yapabilmek i&#231;in, bir &#351;art sa&#287;lanm&#305;&#351;sa 2. &#351;art&#305; kontrol etmek &#252;zere if-end if k&#305;yaslamas&#305;n&#305;n aras&#305;ndan 2. denetimi yapt&#305;rmak laz&#305;m.
If BStr1 <> "" Or Bttr1 <> "" Or BStr2 = "" Or Bttr2 = "" Then
If tarih < BStr1 Or tarih > Bttr1 Then
MsgBox hucre.Address & " H&#252;cresinde; 1. A&#351;ama &#304;&#231;in Yanl&#305;&#351; Aral&#305;kta Kontrol Tarihi Girdiniz!", vbCritical, "UYARI"
hucre.Value = ""
'hucre.Interior.ColorIndex = 3 (gerekirse h&#252;cre renklendir)
End If
End If

If BStr2 <> "" Or Bttr2 <> "" Then
If tarih < BStr2 Or tarih > Bttr2 Then
MsgBox hucre.Address & " H&#252;cresinde; 2. A&#351;ama &#304;&#231;in Yanl&#305;&#351; Aral&#305;kta Kontrol Tarihi Girdiniz!", vbCritical, "UYARI"
hucre.Value = ""
'hucre.Interior.ColorIndex = 3 (gerekirse h&#252;cre renklendir)
End If
End If
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
hatal&#305; kodlar do&#287;rusu bir alttad&#305;r.
 
Son düzenleme:
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Kod:
Private Sub Tar_Kont_4()
Dim hucre As Range
For Each hucre In Range("L5:L20")
    tarih = hucre.Value
'''''4 kontrol tarihi, denetim tarihleri aral&#305;&#287;&#305;nda olmal&#305;d&#305;r
    If tarih <> "" Then
        If hucre.Column = 12 Then
            BStr1 = hucre.Offset(0, -5).Value '5 s&#252;tun &#246;nce
            Bttr1 = hucre.Offset(0, -4).Value '4 s&#252;tun &#246;nce
            BStr2 = hucre.Offset(0, -3).Value '3 s&#252;tun &#246;nce
            Bttr2 = hucre.Offset(0, -2).Value '2 s&#252;tun &#246;nce
                If (BStr1 <> "" Or Bttr1 <> "") And (BStr2 = "" Or Bttr2 = "") Then
                'If BStr1 <> "" And Bttr1 <> "" Then
                    If tarih < BStr1 Or tarih > Bttr1 Then
                        MsgBox hucre.Address & "  1. A&#351;ama i&#231;in yanl&#305;&#351; aral&#305;kta kontrol tarihi girdiniz"
                        'hucre.Value = ""
                        hucre.Interior.ColorIndex = 3
                    Else
                        hucre.Value = CDate(ilkg&#252;n(hucre.Value))
                    End If
                End If
                
                 If (BStr1 <> "" Or Bttr1 <> "") And (BStr2 <> "" And Bttr2 <> "") Then
                    If tarih < BStr2 Or tarih > Bttr2 Then
                        MsgBox hucre.Address & "  2. A&#351;ama i&#231;in yanl&#305;&#351; aral&#305;kta kontrol tarihi girdiniz"
                        'hucre.Value = ""
                        hucre.Interior.ColorIndex = 3
                    Else
                        hucre.Value = CDate(ilkg&#252;n(hucre.Value))
                        
                    End If
                End If
        End If
   End If
Next
End Sub
bunlar&#305; deneyin format&#305; tarih olarak g&#246;rmedi&#287;i i&#231;in hata veriyormu&#351;.....
 

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,421
Excel Vers. ve Dili
excel 2010
merhaba
d&#252;zeltmeye &#231;al&#305;&#351;t&#305;m ama beyin durdu.
a-) If Ba&#351;la_1 <> "" And Ba&#351;la_2 = "" Then
If tarih < Ba&#351;la_1 Or tarih > Bitir_1 Then
MsgBox hucre.Address & " 1. A&#351;ama i&#231;in yanl&#305;&#351; aral&#305;kta kontrol tarihi girdiniz", vbCritical, "UYARI"
hucre.Value = ""
Else
hucre.Value = CDate(ilkg&#252;n(hucre.Value))
End If

b-) If Ba&#351;la_2 <> "" Then
If tarih < Ba&#351;la_1 Or tarih > Bitir_2 Then
MsgBox hucre.Address & " 2. A&#351;ama i&#231;in yanl&#305;&#351; aral&#305;kta kontrol tarihi girdiniz", vbCritical, "UYARI"
hucre.Value = ""
End If

c-) If tarih > Bitir_1 And tarih < Ba&#351;la_2 Then
MsgBox hucre.Address & " bu tarihte imalat yok!", vbCritical, "UYARI"
hucre.Value = ""
Else
hucre.Value = CDate(ilkg&#252;n(hucre.Value))
End If

bu &#351;ekilde olmal&#305;, ama nas&#305;l?
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
hocam siz t&#252;rk&#231;esini yaz&#305;n vba ya &#231;eviren bir &#231;&#305;kar ben anlamad&#305;m
[code ] [/code ] i&#231;inde yazarsan&#305;z daha iyi olur

9. mesajdaki kodlar&#305; denediniz mi?
 
Üst