İki Kodu Birleştirmek

hakki83

Altın Üye
Katılım
30 Eylül 2021
Mesajlar
551
Excel Vers. ve Dili
Excel 2016 Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
30-09-2026
Merhaba hocalarımız

Aşağıdaki Sub kodunu
SelectionChange kodunun içine dahil edebilir miyiz, tek kod olsun diye.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.OnKey "{DELETE}", "Deletee"
End Sub

Sub Deletee()
Dim Cell As Range
For Each Cell In Selection
Cell.ClearComments
Cell.ClearContents
Next Cell
End Sub
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,501
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
deneyin


Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ' Seçim değiştiğinde, DELETE tuşuna basıldığında işlem yapılacak
    If Not Intersect(Target, Me.Range("A1:Z100")) Is Nothing Then ' Belirli bir alanı sınırlandırabilirsiniz
        Application.OnKey "{DELETE}", "Deletee"
    End If
End Sub

Sub Deletee()
    Dim Cell As Range
    ' Seçilen hücrelerin yorumlarını ve içeriklerini temizle
    For Each Cell In Selection
        Cell.ClearComments
        Cell.ClearContents
    Next Cell
End Sub
 

hakki83

Altın Üye
Katılım
30 Eylül 2021
Mesajlar
551
Excel Vers. ve Dili
Excel 2016 Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
30-09-2026
deneyin


Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ' Seçim değiştiğinde, DELETE tuşuna basıldığında işlem yapılacak
    If Not Intersect(Target, Me.Range("A1:Z100")) Is Nothing Then ' Belirli bir alanı sınırlandırabilirsiniz
        Application.OnKey "{DELETE}", "Deletee"
    End If
End Sub

Sub Deletee()
    Dim Cell As Range
    ' Seçilen hücrelerin yorumlarını ve içeriklerini temizle
    For Each Cell In Selection
        Cell.ClearComments
        Cell.ClearContents
    Next Cell
End Sub


Cems hocam teşekkürler emeğinize sağlık da paylaştığınız kod benim yazdığımın aynısı. Hiç fark yok arada.

Ben tek kod olsun istemiştim. SelectionChange kodu.
 
Katılım
11 Temmuz 2024
Mesajlar
191
Excel Vers. ve Dili
Excel 2021 Türkçe
Merhaba,bildiğim kadarıyla VBA'da bir Sub prosedürünü başka bir Sub prosedürünün içine dahil edemezsiniz. Sublar bağımsız olarak tanımlanmalıdır.
 

hakki83

Altın Üye
Katılım
30 Eylül 2021
Mesajlar
551
Excel Vers. ve Dili
Excel 2016 Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
30-09-2026
Teşekkürler pitchoute hocam.
 
Katılım
6 Mart 2024
Mesajlar
121
Excel Vers. ve Dili
Excel 2010 TR & Excel 2016 TR
Merhaba,
....
Cell.ClearComments
....
Kodlarınızın amacı,
Kullanıcı Hücreyi veya Hücreleri seçip Delete tuşuna basınca
Hücrelerde Açıklama varsa onu da Temizlesin

Eğer kodlarınızın kurgusunu doğru anladıysam...

C++:
Dim PreviousValues As Collection

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Cell As Range

    ' Collection nesnesini başlat
    Set PreviousValues = New Collection

    ' Her hücre için önceki değerleri kaydet
    On Error Resume Next
    For Each Cell In Target.Cells
        ' Her hücre adresini ve değerini string olarak ekle
        PreviousValues.Add Cell.Value, Cell.Address
    Next Cell
    On Error GoTo 0
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cell As Range
    Dim OldValue As Variant

    ' Her hücrede değişiklik kontrolü yap
    For Each Cell In Target.Cells
        On Error Resume Next
        OldValue = PreviousValues(Cell.Address)
        On Error GoTo 0
        
        ' Eğer hücre boşsa ve önceki değeri varsa, Açıklamayı (Yorumları) temizle
        ' Delete tuşuna basılmış
        If IsEmpty(Cell.Value) And Not IsEmpty(OldValue) Then
            Cell.ClearComments ' Açıklamayı (Yorumları) temizle
        End If
    Next Cell
End Sub
 

hakki83

Altın Üye
Katılım
30 Eylül 2021
Mesajlar
551
Excel Vers. ve Dili
Excel 2016 Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
30-09-2026
Merhaba,


Kodlarınızın amacı,
Kullanıcı Hücreyi veya Hücreleri seçip Delete tuşuna basınca
Hücrelerde Açıklama varsa onu da Temizlesin

Eğer kodlarınızın kurgusunu doğru anladıysam...

C++:
Dim PreviousValues As Collection

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Cell As Range

    ' Collection nesnesini başlat
    Set PreviousValues = New Collection

    ' Her hücre için önceki değerleri kaydet
    On Error Resume Next
    For Each Cell In Target.Cells
        ' Her hücre adresini ve değerini string olarak ekle
        PreviousValues.Add Cell.Value, Cell.Address
    Next Cell
    On Error GoTo 0
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cell As Range
    Dim OldValue As Variant

    ' Her hücrede değişiklik kontrolü yap
    For Each Cell In Target.Cells
        On Error Resume Next
        OldValue = PreviousValues(Cell.Address)
        On Error GoTo 0
       
        ' Eğer hücre boşsa ve önceki değeri varsa, Açıklamayı (Yorumları) temizle
        ' Delete tuşuna basılmış
        If IsEmpty(Cell.Value) And Not IsEmpty(OldValue) Then
            Cell.ClearComments ' Açıklamayı (Yorumları) temizle
        End If
    Next Cell
End Sub
Evet Biolightant hocam. Delete tuşuna basınca hem hücre içeriğini temizlesin hem de açıklamaları silsin.

İlk paylaştığım kod ile bunu yapıyordum fakat tek parça olabilir mi diye düşünmüştüm. Sanırım olmuyormuş.

Sizin paylaştığınız kodda

Sadece
Worksheet_Change
ya da sadece
Worksheet_SelectionChange
olarak birleştirilebilir mi?
 
Katılım
11 Temmuz 2024
Mesajlar
191
Excel Vers. ve Dili
Excel 2021 Türkçe
Birleştirme olarak en fazla şöyle yapılabilir bence;

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cell As Range
    On Error Resume Next
    For Each Cell In Target
        If Cell.Value = "" Then
            Cell.ClearComments
        End If
    Next Cell
    On Error GoTo 0
End Sub
Kodun mantığı şu, çalışma sayfasında herhangi bir değişiklik olduğunda tetiklenir. Delete tuşuna basıldığında da tetiklenir, çünkü hücrelerin içeriği değişmiş olur.

Denemeden önce lütfen yedek almayı unutmayın.
 
Son düzenleme:

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,298
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

Aslında DELETE tuşuna basma olayını ilk kullandığınız kodla kontrol etmek daha kolaydır. Bunun dışında API ile (GetKeyState ve GetAsyncKeyState) bu kontrol sağlanabiliyor. Fakat ben Laptop'ta denediğimde sağlıklı sonuç alamadım. Bu sebeple bu yöntemi önermiyorum. Zaten kod uzamış oluyor.

Bunun yerine DELETE tuşuna bastığınızda zaten hücrenin içeriği silinmiş olacağı için sadece açıklamaları silecek yöntemi uygulamak yeterli olacaktır.

Bu yöntemi diğer arkadaşlar paylaştılar. Ben sadece döngü kullanmadan yapılmasını sağladım. Daha hızlı sonuç verecektir.

C++:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Rng As Range
   
    On Error Resume Next
    Set Rng = Nothing
    Set Rng = Target.SpecialCells(xlCellTypeBlanks)
    On Error GoTo 0
   
    If Not Rng Is Nothing Then Rng.ClearComments
   
    Set Rng = Nothing
End Sub
 
Katılım
6 Mart 2024
Mesajlar
121
Excel Vers. ve Dili
Excel 2010 TR & Excel 2016 TR
hehe kodu biraz daha kısaltabildim sanırım.
C++:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    Target.SpecialCells(xlCellTypeBlanks).ClearComments
    On Error GoTo 0
End Sub
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,298
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
On Error Resume Next (Bütün Hataları Yoksay) komutunu bahsetiğiniz şekilde kullanılmasını pek tasvip etmiyoruz. Çünkü bu şekilde hata kontrolünü elden bırakmış oluyorsunuz. Tabii ki bu kullanım yöntemi bir tercihtir. Ama riskli olabilir. Dikkatli olmak gerekir.
 
Katılım
6 Mart 2024
Mesajlar
121
Excel Vers. ve Dili
Excel 2010 TR & Excel 2016 TR
On Error Resume Next i kod parçasından sonra direk On Error GoTo 0 yapıp normal durumuna çeviriyorum.

kullanma sebebim
herhangi bir hücre topluluğu (A1:B14) içeriğini kopyalayıp başka bir yere yapıştırdığımda
A1:B14 hiç bir hücre boş değilse hata veriyor o bakımdan kullandım
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,298
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Aslında tam olarak bahsettiğiniz şekilde olmuyor...

Neden derseniz;

On Error Resume Next komutu ile hataları gözardı et dedikten sonra hiçbir hata kontrolü yapmadan excele boş hücrelerin açıklamalarını sil diyorsunuz. Fakat bu aşamada excelin nasıl davranacağını bilmiyorsunuz. Yani direksiyonu excel bırakıyorsunuz. Bu sebeple bu işlemden sonra hataları tekrar On Error GoTo 0 ile açmak çok birşey ifade etmiyor.

Kodlamada HATA KONTROLLERİ önemlidir ve kullanmak gerekir.

Bu sebeple bu komutları nacizane ben yine de dikkatli kullanmanızı tavsiye ederim... ;)
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,298
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Açıklamamın biraz eksik kaldığını düşündüğüm için mesajımı düzenledim. Bu haliyle biraz daha açıklayıcı olacaktır.
 
Üst