formülleriyle satır ekleme, koşullu biçimlendirme vs makroları

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,424
Excel Vers. ve Dili
excel 2010
merhaba
biraz karışık bir çalışma kitabım var ve bazı koşulları sağlayan veri girişlerini makro ile yapmak istiyorum.
birkısmını koşullu biçimlendirme, veri doğrulama vs gibi fonksiyonlarla yapmak mümkün ancak makro olursa makbule geçecek. zira ne kadar çok fonksiyon ve formül kullanılırsa dosya boyutu çok büyüyor. şuanki boyutu 25 MB ve dosya çalışması yavaşlayıp hantallaşıyor.
1- D sütununa yazılan metin; eğer C sütunu hücresindeki değerin son 2 karakteri "00" ise BÜYÜK HARFLE VE KIRMIZI RENKTE, C deki son 2 karakter "00" dan farklı ise YAZIM DÜZENİ İLE MAVİ RENKTE yazsın.
2- C sütununda; ayraç olarak nokta " . " virgül " , " bölü " / " eksi " - " işaretleri ve 0~9 arasındaki rakamlardan başka karakter kullanılınca uyarı mesajı versin. Ayraç dahil 5 karakterden uzun olursa kabul etmesin.
3- D sütununa yazılan metin; eğer başlangıçta seçilen hücre yüksekliğine sığmıyorsa EN UYGUN YÜKSEKLİKTE yazsın.
4- başlangıçta 25 satır olduğu düşünülürse, 26. satırdan sonra sayfa toplamı vs gibi 5 satırlık değiştirilmeyecek değerlerim olduğu düşünülürse; 25. satırın başlangıçtaki son satır olması sebebiyle C25 veya D25 HÜCRESİNE VERİ GİRİLDİĞİNDE ALTA SATIR EKLEYİP, ÜST SATIRDAKİ FORMÜLÜ KOPYALASIN.
5- C sütununa MÜKERRER KAYIT GİRİLİNCE SİLSİN ve UYARI MESAJI VERSİN (mümkünse makro ile, değilse veri doğrulamadan yapabilirim)
6- C sütunundaki verinin son 2 karakteri "00" ise KIRMIZI RENKTE değilse MAVİ RENKTE yazsın (mümkünse makro ile, değilse koşullu biçimlendirmeyle yapabilirim)

not: istediğim bazı makroların sitede olduğunu biliyorum, gerekli linki vermenizde yeterli olur.
aslında bu çalışma kitabında daha çok makro gerekiyor ancak şimdilik bunları ilave edeceğim. çok fazla makroya ihtiyacım olduğu için sitede ararken kendi yolumu şaşırdım açıkcası :)
 
Son düzenleme:

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,424
Excel Vers. ve Dili
excel 2010
istediğim bütün makroların aynı anda verilmesine gerek yok, 6 adet makroyu ayrı ayrı bulabilirsem daha iyi olur, dosyaya kendim adapte etmeyi becerebilirim galiba.
 

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,424
Excel Vers. ve Dili
excel 2010
çalışma kitabının 25 MB olmasının sebebi karmaşık formüllerden ve büyük sayfa yapısından kaynaklanıyor. bu formülleri makro ile yazarsak, belki her veri girişinde aynı hesapları yapacak olduğundan çalışması yine yavaş olacaktır ama dosya boyutunu tahminen nekadara düşürür?
 

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,424
Excel Vers. ve Dili
excel 2010
merhaba
istediğim kodların biraz uzun olduğunu kabul etmek lazım. o nedenle bazı kodları iptal etmekta fayda var.

1- D sütununa yazılan metin; eğer C sütunu hücresindeki değerin son 2 karakteri "00" ise BÜYÜK HARFLE VE KIRMIZI RENKTE, C deki son 2 karakter "00" dan farklı ise YAZIM DÜZENİ İLE MAVİ RENKTE yazsın.
2- başlangıçta 25 satır olduğu düşünülürse, 26. satırdan sonra sayfa toplamı vs gibi 5 satırlık değiştirilmeyecek değerlerim olduğu düşünülürse; 25. satırın başlangıçtaki son satır olması sebebiyle C25 veya D25 HÜCRESİNE VERİ GİRİLDİĞİNDE ALTA SATIR EKLEYİP, ÜST SATIRDAKİ FORMÜLÜ KOPYALASIN.
 

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,424
Excel Vers. ve Dili
excel 2010
sorunun ratingi yüksek ama monolok seyrediyoruz. gündemde tutmak için butür mesajlar yazmak zorunda kalıyorum. :)
 

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,424
Excel Vers. ve Dili
excel 2010
merhaba
D sütunu koşullu biçimlendirme formülü; =EĞER(SAĞDAN($C4;2)="00";1;0)
C sütunu koşullu biçimlendirme formülü; =EĞER(SAĞDAN($C5;2)="00";1;0)
bu koşullu biçimlendirme ile hücredeki metin renklerini değiştirebiliyorum.
benzer şekilde;
=EĞER((SAĞDAN($C4;2)="00");BÜYÜKHARF($D4);YAZIM.DÜZENİ($D4))
bu formül başka hücrede çalışıyor ama D4 hücresine koşullu biçimlendirme yaptırmak isteyince olmuyor.
koşullu biçimlendirmede metin biçimini nasıl değiştiririz?

ekteki dosyada, sayfa2 de koşullu biçimlendirme var ancak koşullu biçimlendirme ile büyükharf() ve yazım.düzeni() fonksiyonlarını uyarlayamadım.

aslında aradığım bu biçimlendirme için vba kodu, şimdilik koşullu biçimlendirme ile yetinebilirim.
 

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,424
Excel Vers. ve Dili
excel 2010
soru, A-B grubunda 113 rating almış ama monolok seyrediyoruz. gündemde tutmak için butür mesajlar yazmak zorunda kalıyorum. :)
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Merhabalar,

1 Nolu mesajınıza istinaden (çünkü diğer mesajlarınızı incelemedim), aşağıdakileri KEŞİF adlı sheet'in kod sayfasına kopyalayınız veya örnek dosyayı inceleyiniz

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
On Error GoTo f1
Select Case Target.Column
   Case 3
       arrchar = Array("/", ".", ",", "-", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
       For i = 1 To Len(Target)
           For j = 0 To UBound(arrchar)
               If Mid(Target, i, 1) = arrchar(j) Then: x = x + 1
           Next j
           If x = 0 Then
              MsgBox "Girdiğiniz veri, kurallara uygun değil", vbCritical, "UYARI"
              Target = Empty
              Target.Select
              Exit For
           End If
           x = 0
       Next i
       For i = 2 To Cells(65536, 3).End(xlUp).Row
           If Target.Address <> Cells(i, 3).Address Then
           If Cells(i, 3) = Target Then
              MsgBox "Bu değerden zaten bir tane var", vbCritical, "UYARI"
              Target = Empty
              Target.Select
              Exit Sub
           End If
           End If
       Next i
   
   Call Sekillendir(Target.Offset(0, 1))
   Case 4 'D sütununa veri girişi yapılırsa
       Call Sekillendir(Target)
       Cells(65536, 4) = Target
       With Cells(65536, 4)
           .WrapText = True
           .Orientation = 0
           .AddIndent = False
           .IndentLevel = 0
           .ShrinkToFit = False
           .ReadingOrder = xlContext
           .MergeCells = False
'           .EntireRow.AutoFit
       End With
       Rows("65536:65536").EntireRow.AutoFit
       If Rows("65536").RowHeight > Rows(Target.Row).RowHeight Then
          Rows(Target.Row).RowHeight = Rows(65536).RowHeight
       Else
          Rows(Target.Row).RowHeight = 30
       End If
End Select
f1:
Application.EnableEvents = True
End Sub
[COLOR=green]'---------------------------------------------[/COLOR]
Sub Sekillendir(hcr As Range)
If Right(Cells(hcr.Row, 3), 2) = "00" Then
    Cells(hcr.Row, 4) = UCase(Replace(Replace(Cells(hcr.Row, 4), "ı", "I"), "i", "İ"))
    Cells(hcr.Row, 4).Font.ColorIndex = 3
ElseIf Right(Cells(hcr.Row, 3), 2) = Empty Then
    Cells(hcr.Row, 4).Font.ColorIndex = 1
    Cells(hcr.Row, 4).Select
Else
    Cells(hcr.Row, 4) = Application.WorksheetFunction.Proper(hcr)
    Cells(hcr.Row, 4).Font.ColorIndex = 5
End If
End Sub
 

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,424
Excel Vers. ve Dili
excel 2010
syn fpc, te&#351;ekk&#252;rler. &#231;al&#305;&#351;man&#305;z&#305; inceleyip tekrar d&#246;nerim. ilginize te&#351;ekk&#252;rler
 

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,424
Excel Vers. ve Dili
excel 2010
Merhabalar,

1 Nolu mesajınıza istinaden (çünkü diğer mesajlarınızı incelemedim), aşağıdakileri KEŞİF adlı sheet'in kod sayfasına kopyalayınız veya örnek dosyayı inceleyiniz

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
On Error GoTo f1
Select Case Target.Column
   Case 3
       arrchar = Array("/", ".", ",", "-", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
       For i = 1 To Len(Target)
           For j = 0 To UBound(arrchar)
               If Mid(Target, i, 1) = arrchar(j) Then: x = x + 1
           Next j
           If x = 0 Then
              MsgBox "Girdiğiniz veri, kurallara uygun değil", vbCritical, "UYARI"
              Target = Empty
              Target.Select
              Exit For
           End If
           x = 0
       Next i
       For i = 2 To Cells(65536, 3).End(xlUp).Row
           If Target.Address <> Cells(i, 3).Address Then
           If Cells(i, 3) = Target Then
              MsgBox "Bu değerden zaten bir tane var", vbCritical, "UYARI"
              Target = Empty
              Target.Select
              [COLOR="Red"]Exit Sub[/COLOR] [COLOR="Teal"]'Sanırım Exit Sub yerine Exit For yazılması gerekiyor[/COLOR]
           End If
           End If
       Next i
   
   Call Sekillendir(Target.Offset(0, 1))
   Case 4 'D sütununa veri girişi yapılırsa
       Call Sekillendir(Target)
       Cells(65536, 4) = Target
       With Cells(65536, 4)
           .WrapText = True
           .Orientation = 0
           .AddIndent = False
           .IndentLevel = 0
           .ShrinkToFit = False
           .ReadingOrder = xlContext
           .MergeCells = False
'           .EntireRow.AutoFit
       End With
       Rows("65536:65536").EntireRow.AutoFit
       If Rows("65536").RowHeight > Rows(Target.Row).RowHeight Then
          Rows(Target.Row).RowHeight = Rows(65536).RowHeight
       Else
          Rows(Target.Row).RowHeight = 30
       End If
End Select
f1:
Application.EnableEvents = True
End Sub
[COLOR=green]'---------------------------------------------[/COLOR]
Sub Sekillendir(hcr As Range)
If Right(Cells(hcr.Row, 3), 2) = "00" Then
    Cells(hcr.Row, 4) = UCase(Replace(Replace(Cells(hcr.Row, 4), "ı", "I"), "i", "İ"))
    Cells(hcr.Row, 4).Font.ColorIndex = 3
ElseIf Right(Cells(hcr.Row, 3), 2) = Empty Then
    Cells(hcr.Row, 4).Font.ColorIndex = 1
    Cells(hcr.Row, 4).Select
Else
    Cells(hcr.Row, 4) = Application.WorksheetFunction.Proper(hcr)
    Cells(hcr.Row, 4).Font.ColorIndex = 5
End If
End Sub


sanırım For-Next döngüsünde bir hata var, Exit Sub yerine Exit For olması gerekir
 

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,424
Excel Vers. ve Dili
excel 2010
syn fpc, al&#305;nt&#305; yaparak cevaplamaya &#231;al&#305;&#351;&#305;rken sizin mesaj&#305; istemeden de&#287;i&#351;tirmi&#351;in, &#246;z&#252;r.
 

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,424
Excel Vers. ve Dili
excel 2010
For i = 2 To Cells(65536, 3).End(xlUp).Row
If Target.Address <> Cells(i, 3).Address Then
If Cells(i, 3) = Target Then
MsgBox "Bu de&#287;erden zaten bir tane var", vbCritical, "UYARI"
Target = Empty
Target.Select
Exit For
End If
End If
Next i


Exit For &#351;eklinde d&#252;zeltince gayet g&#252;zel olmu&#351;. eliniza sa&#287;l&#305;k.
C s&#252;tununda ayra&#231; ve 0~9 aras&#305; say&#305; giri&#351;i kontrol&#252;de gayet g&#252;zel olmu&#351;. bu s&#252;tunda toplam 5 karakter ve 3. karakterin ayra&#231; olmas&#305; &#351;art&#305;n&#305; koyabilir miyiz? ayr&#305;ca c s&#252;tunda son 2 karakter "00" ise k&#305;rm&#305;z&#305;, de&#287;ilse mavi ile yazd&#305;rabilir miyiz?
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Exit For &#351;eklinde d&#252;zeltince gayet g&#252;zel olmu&#351;. eliniza sa&#287;l&#305;k
Burada, Exit For amaca uygun de&#287;il, &#231;&#252;nk&#252; prosed&#252;r&#252;n bu a&#351;amas&#305;, m&#252;kerrer kay&#305;t kontrol&#252;ne ait. E&#287;er m&#252;kerrer bir kay&#305;t bulunursa, prosed&#252;r&#252;n bundan sonraki sat&#305;rlar&#305;n&#305;n &#231;al&#305;&#351;t&#305;r&#305;lmamas&#305; laz&#305;m. Oysa ki, Exit For sadece d&#246;ng&#252;den &#231;&#305;kar, di&#287;er ad&#305;mlar&#305;n hepsini ger&#231;ekle&#351;tirir.

Exit For'la do&#287;ru sonu&#231; alman&#305;z tamamen tesad&#252;ften ibarettir. &#304;leri de de&#287;i&#351;ik veriler girdi&#287;inizde problem &#231;&#305;kar&#305;r.

C s&#252;tununda ayra&#231; ve 0~9 aras&#305; say&#305; giri&#351;i kontrol&#252;de gayet g&#252;zel olmu&#351;. bu s&#252;tunda toplam 5 karakter ve 3. karakterin ayra&#231; olmas&#305; &#351;art&#305;n&#305; koyabilir miyiz?
Koyulabilir. Problem de&#287;il.

ayr&#305;ca c s&#252;tunda son 2 karakter "00" ise k&#305;rm&#305;z&#305;, de&#287;ilse mavi ile yazd&#305;rabilir miyiz?
Bu zaten kodlarda var. Benim yapt&#305;&#287;&#305;m testlerde, sonunda "00" yazanlar&#305;n a&#231;&#305;klamas&#305; k&#305;rm&#305;z&#305; ve B&#220;Y&#220;K, "00"dan farkl&#305; ise mavi ve Yaz&#305;m.D&#252;zeni'nde sonu&#231; veriyor. Yani istedi&#287;iniz gibi .... E&#287;er, kod bo&#351; ge&#231;ilirse de siyah font kullan&#305;yor.

Buradaki iste&#287;inizi tam olarak anlayamad&#305;m.
 

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,424
Excel Vers. ve Dili
excel 2010
Burada, Exit For amaca uygun değil, çünkü prosedürün bu aşaması, mükerrer kayıt kontrolüne ait. Eğer mükerrer bir kayıt bulunursa, prosedürün bundan sonraki satırlarının çalıştırılmaması lazım. Oysa ki, Exit For sadece döngüden çıkar, diğer adımların hepsini gerçekleştirir.

Exit For'la doğru sonuç almanız tamamen tesadüften ibarettir. İleri de değişik veriler girdiğinizde problem çıkarır.

C sütununa mükerrer kayıt girince msg box uyarı veriyor ancak sonraki veri girişi Exit Sub olunca makroyu kapatıyor gibi algılıyorum, yani sonraki girişlerde makro çalışmıyor.


Bu zaten kodlarda var. Benim yaptığım testlerde, sonunda "00" yazanların açıklaması kırmızı ve BÜYÜK, "00"dan farklı ise mavi ve Yazım.Düzeni'nde sonuç veriyor. Yani istediğiniz gibi .... Eğer, kod boş geçilirse de siyah font kullanıyor.

Buradaki isteğinizi tam olarak anlayamadım.
C sütununa veri girişi yapıldığında koşula bağlı olarak D sütunundaki metinlerin rengi ve yazı tipi değişiyor, ancak aynı şekilde C sütunudaki verilerde aynı renkte kırmızı veya mavi renk olacak.
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Vallahi, kusura bakma :) ... Ben anlad&#305;m ki, D s&#252;tunu renklenmiyor ?

Tamam onu da hallederiz.
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Kodları aşağıdaki gibi değiştirdim. Bunu deneyiniz.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
On Error GoTo f1
Select Case Target.Column
   Case 3
       If Target = Empty Then: GoTo f1
       arrchar = Array("/", ".", ",", "-", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
       If Len(Target) = 5 Then
          For i = 0 To 3
              If Mid(Target.Value, 3, 1) = arrchar(i) Then: x = x + 1
          Next i
          If x = 0 Then
             MsgBox "XX.XX gibi bir değer girmeniz gerek", vbCritical, "UYARI"
             x = 0
             Target = Empty
             Target.Select
             GoTo f1
          End If
       Else
          MsgBox "Toplam 5 karakter uzunluğunda bir kodlama yapmalısınız" _
                & vbCrLf & "XX.XX gibi ...", vbCritical, "UYARI"
          Target = Empty
          Target.Select
          GoTo f1
       End If
       For i = 1 To Len(Target)
           For j = 0 To UBound(arrchar)
               If Mid(Target, i, 1) = arrchar(j) Then: x = x + 1
           Next j
           If x = 0 Then
              MsgBox "Girdiğiniz veri, kurallara uygun değil", vbCritical, "UYARI"
              Target = Empty
              Target.Select
              Exit For
           End If
           x = 0
       Next i
       For i = 2 To Cells(65536, 3).End(xlUp).Row
           If Target.Address <> Cells(i, 3).Address Then
           If Cells(i, 3) = Target Then
              MsgBox "Bu değerden zaten bir tane var", vbCritical, "UYARI"
              Target = Empty
              Target.Select
              Exit Sub
           End If
           End If
       Next i
   
   Call Sekillendir(Target.Offset(0, 1))
   Case 4 'D sütununa veri girişi yapılırsa
       Call Sekillendir(Target)
       Cells(65536, 4) = Target
       With Cells(65536, 4)
           .WrapText = True
           .Orientation = 0
           .AddIndent = False
           .IndentLevel = 0
           .ShrinkToFit = False
           .ReadingOrder = xlContext
           .MergeCells = False
'           .EntireRow.AutoFit
       End With
       Rows("65536:65536").EntireRow.AutoFit
       If Rows("65536").RowHeight > Rows(Target.Row).RowHeight Then
          Rows(Target.Row).RowHeight = Rows(65536).RowHeight
       Else
          Rows(Target.Row).RowHeight = 30
       End If
End Select
f1:
Application.EnableEvents = True
End Sub
Sub Sekillendir(hcr As Range)
If Right(Cells(hcr.Row, 3), 2) = "00" Then
    Cells(hcr.Row, 4) = UCase(Replace(Replace(Cells(hcr.Row, 4), "ı", "I"), "i", "İ"))
    Cells(hcr.Row, 4).Font.ColorIndex = 3
    Cells(hcr.Row, 3).Font.ColorIndex = 3
ElseIf Right(Cells(hcr.Row, 3), 2) = Empty Then
    Cells(hcr.Row, 4).Font.ColorIndex = 1
    Cells(hcr.Row, 3).Font.ColorIndex = 1
    Cells(hcr.Row, 4).Select
Else
    Cells(hcr.Row, 4) = Application.WorksheetFunction.Proper(hcr)
    Cells(hcr.Row, 4).Font.ColorIndex = 5
    Cells(hcr.Row, 3).Font.ColorIndex = 5
End If
End Sub
 

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,424
Excel Vers. ve Dili
excel 2010
C s&#252;tunundaki renklendirme sorunu &#231;&#246;z&#252;lm&#252;&#351;, elinize sa&#287;l&#305;k.
m&#252;kerrer kay&#305;t giri&#351;inde sorun var. msgbox dan sonra makro &#231;al&#305;&#351;m&#305;yor. birdaha bakarm&#305;s&#305;n&#305;z?

Exit Sub yerine Exit For olacak gibime geliyor. :)
Exit Sub makroyu kapatmaz m&#305;?
Exit For komutu belki tesad&#252;fen i&#351;ledi ama sonraki sorgu ba&#351;lang&#305;c&#305;na d&#246;nmesi laz&#305;m.
 
Son düzenleme:
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Hangi verileri i&#351;lerken hata ald&#305;&#287;&#305;n&#305;z&#305; bana tek tek yazabilir misiniz ? MEsela, C'ye bunu yazarken &#351;u hatay&#305; ald&#305;m gibi ....
 

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,424
Excel Vers. ve Dili
excel 2010
c s&#252;tununa 02.02 kodu m&#252;kerrer giri&#351; yap&#305;rken msgbox uyar&#305; veriyor, veriyi d&#252;zeltince makro &#231;al&#305;&#351;m&#305;yor
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Exit Sub olmayacak tabi ... Ama Exit For'da olmayacak :)

Exit Sub yerine, Goto f1 yaz&#305;lacak. K&#305;rm&#305;z&#305; ile kodlarda i&#351;aretledim.

Ah &#351;u, EnableEvents .... G&#252;zel bir&#351;ey ama bir bo&#351; b&#305;rakt&#305;n m&#305; kodlar&#305;n hemen sonunu getiriyor ...

Kodun son hali a&#351;a&#287;&#305;daki gibi yani

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
On Error GoTo f1
Select Case Target.Column
   Case 3
       If Target = Empty Then: GoTo f1
       arrchar = Array("/", ".", ",", "-", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
       If Len(Target) = 5 Then
          For i = 0 To 3
              If Mid(Target.Value, 3, 1) = arrchar(i) Then: x = x + 1
          Next i
          If x = 0 Then
             MsgBox "XX.XX gibi bir de&#287;er girmeniz gerek", vbCritical, "UYARI"
             x = 0
             Target = Empty
             Target.Select
             GoTo f1
          End If
       Else
          MsgBox "Toplam 5 karakter uzunlu&#287;unda bir kodlama yapmal&#305;s&#305;n&#305;z" _
                & vbCrLf & "XX.XX gibi ...", vbCritical, "UYARI"
          Target = Empty
          Target.Select
          GoTo f1
       End If
       For i = 1 To Len(Target)
           For j = 0 To UBound(arrchar)
               If Mid(Target, i, 1) = arrchar(j) Then: x = x + 1
           Next j
           If x = 0 Then
              MsgBox "Girdi&#287;iniz veri, kurallara uygun de&#287;il", vbCritical, "UYARI"
              Target = Empty
              Target.Select
              Exit For
           End If
           x = 0
       Next i
       For i = 2 To Cells(65536, 3).End(xlUp).Row
           If Target.Address <> Cells(i, 3).Address Then
           If Cells(i, 3) = Target Then
              MsgBox "Bu de&#287;erden zaten bir tane var", vbCritical, "UYARI"
              Target = Empty
              Target.Select
[COLOR=red][B]           GoTo f1[/B][/COLOR]
           End If
           End If
       Next i
 
   Call Sekillendir(Target.Offset(0, 1))
   Case 4 'D s&#252;tununa veri giri&#351;i yap&#305;l&#305;rsa
       Call Sekillendir(Target)
       Cells(65536, 4) = Target
       With Cells(65536, 4)
           .WrapText = True
           .Orientation = 0
           .AddIndent = False
           .IndentLevel = 0
           .ShrinkToFit = False
           .ReadingOrder = xlContext
           .MergeCells = False
'           .EntireRow.AutoFit
       End With
       Rows("65536:65536").EntireRow.AutoFit
       If Rows("65536").RowHeight > Rows(Target.Row).RowHeight Then
          Rows(Target.Row).RowHeight = Rows(65536).RowHeight
       Else
          Rows(Target.Row).RowHeight = 30
       End If
End Select
f1:
Application.EnableEvents = True
End Sub
Sub Sekillendir(hcr As Range)
If Right(Cells(hcr.Row, 3), 2) = "00" Then
    Cells(hcr.Row, 4) = UCase(Replace(Replace(Cells(hcr.Row, 4), "&#305;", "I"), "i", "&#304;"))
    Cells(hcr.Row, 4).Font.ColorIndex = 3
    Cells(hcr.Row, 3).Font.ColorIndex = 3
ElseIf Right(Cells(hcr.Row, 3), 2) = Empty Then
    Cells(hcr.Row, 4).Font.ColorIndex = 1
    Cells(hcr.Row, 3).Font.ColorIndex = 1
    Cells(hcr.Row, 4).Select
Else
    Cells(hcr.Row, 4) = Application.WorksheetFunction.Proper(hcr)
    Cells(hcr.Row, 4).Font.ColorIndex = 5
    Cells(hcr.Row, 3).Font.ColorIndex = 5
End If
End Sub
&#214;NEML&#304; NOT : Muhtemelen EnableEvents &#351;u an false'tur. Onun i&#231;in ya Excel'i a&#231;&#305;p kapat&#305;n yada a&#351;a&#287;&#305;daki kodu bir defal&#305;&#287;&#305;na &#231;al&#305;&#351;t&#305;r&#305;n.

Sub OlaylariTetikle()
Application.EnableEvents=True
End Sub
 
Son düzenleme:
Üst