• DİKKAT

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

Büyük harfe çevirme

  • Konbuyu başlatan Konbuyu başlatan magnesia
  • Başlangıç tarihi Başlangıç tarihi

magnesia

Yasaklı üye
Katılım
1 Ocak 2018
Mesajlar
351
Excel Vers. ve Dili
Excel 2010 Türkçe
Arkadaşlar selam.
Çalışma sayfasındaki E2:I1000 hücreleri arasına veri girip enter tuşuna bastığımda verileni BÜYÜK HARFE dönüşmesini nasıl sağlayabilirim?
Şimdiden teşekkürler.
 
Merhaba.

Alt taraftan uygulama istediğiniz sayfanın adına fareyle sağ tıklayıp KOD GÖRÜNTÜLEyi seçin,
açılan VBA ekranında sağdaki boş alana aşağıdaki kod'u yapıştırın.

NOT: Belgenizi kapatırken MAKRO İÇERİR olacak şekilde kaydetmeyi unutmayın.

İLAVE AÇIKLAMA: Aşağıdaki kod'da Sayın ASLAN'ın sorusu ile Sayın antonio ve YUSUF Bey'in farkettiği -- iı / İI -- durumu için düzeltme yapıldı.
.
Kod:
[B]Private Sub Worksheet_Change(ByVal Target As Range)[/B]
If Intersect(Target, [COLOR="red"][E2:E10000, G2:G10000, L2:L10000][/COLOR]) Is Nothing Then Exit Sub
If Target <> [COLOR="Red"]UCase(Replace(Replace(Target, "i", "İ"), "ı", "I"))[/COLOR] Then _
Target = [COLOR="red"]UCase(Replace(Replace(Target, "i", "İ"), "ı", "I"))[/COLOR]
[B]End Sub[/B]
 
Aşağıdaki kodları ilgili sayfanın kod bölümüne (sayfa adına sağ tıklayıp Kod Görüntüle deyince açılan sayfaya) yapıştırıp deneyin:

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [E2:I1000]) Is Nothing Then Exit Sub
If Selection.Count > 1 Then Exit Sub
If Target = "" Then Exit Sub
Application.EnableEvents = False
Target = UCase(WorksheetFunction.Substitute(WorksheetFunction.Substitute(Target, "i", "İ"), "ı", "I"))
Application.EnableEvents = True
End Sub
 
Alternatif;

Türkçe karakter desteği bakımından @Ömer Baran ın kodlarına ekleme, @yusuf44 den de alıntı yapıldı. :)

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [E2:I1000]) Is Nothing Then Exit Sub
If Selection.Count > 1 Then Exit Sub
If Target = "" Then Exit Sub
If Target <> buyukharf(Target) Then Target = buyukharf(Target)
End Sub

Public Function buyukharf(cumle)
gecici = ""
For i11 = 1 To Len(cumle)
          h = Mid(cumle, i11, 1)
          Select Case h
            Case "ğ": gecici = gecici + "Ğ"
            Case "ü": gecici = gecici + "Ü"
            Case "ş": gecici = gecici + "Ş"
            Case "ç": gecici = gecici + "Ç"
            Case "ö": gecici = gecici + "Ö"
            Case "ı": gecici = gecici + "I"
            Case "i": gecici = gecici + "İ"
            Case Else: gecici = gecici + UCase(h)
            End Select
Next i11
buyukharf = gecici
End Function
 
Sayın Ömer Bey, böyle bir koda benim de ihtiyacım var.
Sizin kodlarınız daha sade geldi, kodları aşağıdaki gibi yaptığımda çalışmıyor.

Yardımcı olur musunuz?

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [E2:E10000], [G2:G10000], [L2:L10000]) Is Nothing Then Exit Sub
If Target <> UCase(Target) Then Target = UCase(Target)
End Sub
 
Alternatif bile değil ama çeşit olsun :))
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim deg As String, b_harf As String
If Not Intersect(Target, [E2:I1000]) Is Nothing Then
    Application.EnableEvents = False
        deg = Target.Value
        b_harf = UCase(Replace(Replace(deg, "i", "İ"), "ı", "I"))
    Application.EnableEvents = True
    Target.Value = b_harf
End If
End Sub
 
Alternatif bile değil ama çeşit olsun :))
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim deg As String, b_harf As String
If Not Intersect(Target, [E2:I1000]) Is Nothing Then
    Application.EnableEvents = False
        deg = Target.Value
        b_harf = UCase(Replace(Replace(deg, "i", "İ"), "ı", "I"))
    Application.EnableEvents = True
    Target.Value = b_harf
End If
End Sub

Son noktayı koymuşsun.:D
 
Hepinizin ilgi ve emeğine teşekkür ederim arkadaşlar.
 
Sayın ASLAN, sayfayı yenileyerek önceki cevabımda yaptığım düzeltmeyi kontrol ediniz.
 
Sayın Ömer Bey, çok teşekkür ediyorum.

Debug hatası verdi.
 
Sayın Ömer Bey, ellerinize sağlık, çok teşekkür ediyorum.

Bu şekilde kod daha sade bir şekilde, başka sayfalara uygulamak daha kolay olacak.

Hayırlı geceler diliyorum.
 
Sayın Ömer Bey, ellerinize sağlık, çok teşekkür ediyorum.

Bu şekilde kod daha sade bir şekilde, başka sayfalara uygulamak daha kolay olacak.

Hayırlı geceler diliyorum.

Sayın Aslan
Kodlarınıza ;
Application.EnableEvents kodunuda eklemeyi unutmayın.
Zira üst üste ayni hücreye döngü yapar ve çalışır.
 
Sayın Aslan
Kodlarınıza ;
Application.EnableEvents kodunuda eklemeyi unutmayın.
Zira üst üste ayni hücreye döngü yapar ve çalışır.


Sayın Evren Bey, uyarılarda bulunduğunuz için çok teşekkür ederim.

Aşağıdaki kod satırları bir çok kodların başında ve sonunda görmekteyim, bu kodların anlamlarını ve ne işe yaradıklarını yazabilir misiniz?


Application.EnableEvents = True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
 
Merhaba Sayın ASLAN.

Umarım yanlış izah etmiyorumdur.

Verdiğim kod'da, bildiğim kadarıyla döngü en fazla 2 kez gerçekleşeceği için Application.EnableEvents'e ilişkin bir satır eklememiştim.

-- Metin yazılınca kod devreye girip yazılan metnin küçükharf içerip içermediğini kontrol edecek.
-- Zaten tümü büyükharf ise kontrol satırına geldiğinde kod sonlanacak,
-- Küçükharf içeriyorsa, kontrol satırından geçip, büyükharfe dönüştürme gerçekleşecek ve bu dönüştürme işlemi kod'u tekrar tetikleyecek,
-- İkinci kontrolde, metin zaten bir önceki işlemde büyükharfe dönüştürülmüş olduğundan kod'dan çıkılacak.

Application.EnableEvents kod'u;
örneğin mevcut makro [A1]=[A1]*2 gibi bir satır içeriyorsa,
bu işlem bir döngü oluşturur ve durdurmadığınız sürece A1'deki değeri hep 2 katına çıkartır.

Bu işlemin 1 kez yapılmasını istiyorsanız, işlem kod satırından önce Application.EnableEvents=False, sonra da True satırı eklelerek işlemin 1 kez yapılması sağlanmış olur.
.
 
2 kere dönmemesi lazım.
aşağıdaki kodu denerseniz 1 kere çalıştığını göreceksiniz.:cool:


Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [E2:E10000, G2:G10000, L2:L10000]) Is Nothing Then Exit Sub
[B][COLOR="Red"]Application.EnableEvents = False[/COLOR][/B]
If Target <> UCase(Replace(Replace(Target, "i", "İ"), "ı", "I")) Then _
Target = UCase(Replace(Replace(Target, "i", "İ"), "ı", "I"))
[B][COLOR="red"]Application.EnableEvents = True
MsgBox "test"[/COLOR][/B]
End Sub
 
Aslında sayın Ömer Baran'ın kodu daha kullanışlı. Çünkü enableevents satırları arasında kod hata verdiğinde ya da bir şekilde durduğunda aktifleşme olmayacağından, daha sonra olaylar çalışmaz. Bu da sorun çıkarır. Bazen mecburen kullanıyoruz ama mümkün oldukça kullanmamak gerekiyor.
 
Aslında sayın Ömer Baran'ın kodu daha kullanışlı. Çünkü enableevents satırları arasında kod hata verdiğinde ya da bir şekilde durduğunda aktifleşme olmayacağından, daha sonra olaylar çalışmaz. Bu da sorun çıkarır. Bazen mecburen kullanıyoruz ama mümkün oldukça kullanmamak gerekiyor.

on error resume next ile o sorun çözülür.:cool:
 
Geri
Üst