Makro ile tüm yapılan yapıştırma fonksiyonları nasıl sadece değer yapıştır olarak ayarlanır?

Katılım
18 Aralık 2018
Mesajlar
3
Excel Vers. ve Dili
Excel 2010 - Türkçe
Merhaba arkadaşlar, aşağıdaki linkte verilen excelde makro E:E sütununa girilen değerleri büyük harf yaptıktan sonra Türkçe karakterleri İngilizce karakterlere çeviriyor. Fakat bu makronun 2 sıkıntısı var. Linkteki excelde aşağıda açıklamaların aynısı daha basit şekilde örnekli olarak var. GDrive da olduğu için .zip formatındadır, indirebilirsiniz. Hata yazması sizi yanıltmasın, zip dosyasını önizleyemediği için yazıyor.
https://drive.google.com/file/d/1tV5YTlOaUT1tRVEnyIJzF-_D9hKDupmf/view?usp=sharing
1- Sorumda belirttiğim üzere yapıştırma fonksiyonun burada varsayılan olarak sadece değer yapıştırmasını istiyorum. Çünkü bu sütunda veri doğrulamadan 50 karakterin üzerine çıktığında uyarı vermesini ayarladım. Kopyala yapıştır yapınca veri doğrulama işe yaramadığı için de koşullu biçimlendirmeden 50 karakter üzerini mavi yapmasını ayarladım. Fakat farklı sütundan aldığım değerleri varsayılan olarak biçimlendirme ile yapıştırınca bu mavi olma ayarı da gidiyor..
Asıl sorum varsayılan yapıştırmanın sadece değer olması için nasıl bir kod yazılmalı? İnternetteki örnekler hep modül üzerinden gitmiş. Modüle kısayol olarak da ctrl+v atamışlar. Fakat benim istediğim sayfa ve kitabın içinde makro olması. Mevcut makroya da eklenebilir. Yapıştırma olayının gerçekleşmesiyle tetiklenmesi mümkün olur mu?Olmazsa Ctrl+v ve sağ tık yapıştırın ikisi ile de tetiklenebilir. Önemli olan modül içinde değil workbook veya worksheet içinde olması.
2- Ek olarak iki hücreden fazla değeri yapıştırınca makro etkinleşmiyor, yapışan hücrelerdeki harfler küçük kalıyor. Fakat hücrelerin içine teker teker girip çıkınca düzeliyor. Excelde örneği var. Bunun çözümüne de ihtiyacım var.
1. Soruya Alternatif Çözüm: Veri doğrulamanın yaptığı 50 karakter uyarısını makroya ekleyemedim. Varsayılan yapıştrma makrosu olmazsa 50 karakter uyarısını makroya eklemek de sorunumu çözer. Teşekkürler.
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
  
    On Error GoTo ErrHandler

  
    If Intersect(Target, Range("e:e")) Is Nothing Or Target.Cells.Count <> 1 Then
        Exit Sub
    End If

    Application.EnableEvents = False
    Target = UCase(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Target, "Ç", "C"), "ç", "C"), "ğ", "G"), "Ğ", "G"), "ı", "I"), "İ", "I"), "Ö", "O"), "ö", "O"), "Ş", "S"), "ş", "S"), "Ü", "U"), "ü", "U"))
ErrHandler:

    Application.EnableEvents = True

End Sub
 

turist

Destek Ekibi
Destek Ekibi
Katılım
18 Kasım 2009
Mesajlar
5,102
Excel Vers. ve Dili
2013 64Bit
English
Tüm Veri Doğrulamaları ve Koşullu Biçimleri kaldırıp aşağıdaki kodları deneyiniz.
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo ErrHandler
    If Intersect(Target, Range("e:e")) Is Nothing Or Target.Cells.Count <> 1 Then
        Exit Sub
    End If
If Len(Target) > 50 Then: Target = Empty: Exit Sub ' 50 karakterden fazla yazılmasını engeller
    Application.EnableEvents = False
    Target = UCase(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Target, "Ç", "C"), "ç", "C"), "ğ", "G"), "Ğ", "G"), "ı", "I"), "İ", "I"), "Ö", "O"), "ö", "O"), "Ş", "S"), "ş", "S"), "Ü", "U"), "ü", "U"))
ErrHandler:
    Application.EnableEvents = True
End Sub
Rem İlk Çift Tıklama ile Hücre Kopyalanır, seçilen hücrede Çift Tıklama ile yapıştırılır.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 If Intersect(Target, Range("e:e")) Is Nothing Or Target.Cells.Count <> 1 Then Exit Sub
On Error Resume Next
Target.PasteSpecial: Cancel = True:
If Application.CutCopyMode = False Then Target.Copy: Cancel = True: Exit Sub
Cancel = True
Application.CutCopyMode = False
End Sub
 
Katılım
18 Aralık 2018
Mesajlar
3
Excel Vers. ve Dili
Excel 2010 - Türkçe
@turist
Emek verdiğiniz için teşekkür ederim. 50 karakter sınırı uyarı vermeden tüm yazılanı sildiği için kullanıcı dostu değil.
Kopyala yapıştır olayı da çift tıklama yerine belirttiğim gibi sağ tık yapıştır ve ctrl+z ile tetiklenemez mi? İkisiyle de tetiklenmesi yeterli olur. Çift tık ile kopyalamayı da devre dışı bırakırsanız benim için daha uygun olur, teşekkürler.
 
Üst