Aynı anda birden çok hücrede 'Worksheet_Change' olayı

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,044
Excel Vers. ve Dili
Office 2013 İngilizce
Merhaba,
Aşağıdaki Worksheet_Change kodda "D" sütununda tek bir hücreye değer yazınca çalışmakta;

"D" sütununa 1' den fazla hücreye toplu olarak kopyala yapıştır yapınca çalışmmıyor,

Bunun bir çözümü var mıdır?
teşekkürler,
iyi Çalışmalar.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Integer

If Target.Column <> 4 Then Exit Sub
If Not IsNumeric(Target.Value) Then Exit Sub

On Error GoTo 120

r = Target.Row

Target.Offset(, -1).Value = Target.Value - 10

120:

End Sub
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Sayfanın Change olayında toplu işlemler için döngü kullanabilirsiniz.

C++:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim My_Area As Range, Rng As Range

    Set My_Area = Intersect(Target, Range("D:D"))

    If Not My_Area Is Nothing Then
        For Each Rng In My_Area
            If IsNumeric(Rng) Then
                Rng.Previous = Rng - 10
            End If
        Next
    End If
End Sub
 

Erkan Akayay

Altın Üye
Katılım
8 Aralık 2006
Mesajlar
405
Excel Vers. ve Dili
Ofis 365 TR 64 Bit
Altın Üyelik Bitiş Tarihi
21-11-2028
Birde toplu olarak kopyala yapıştır için Application.EnableEvents ayarlamanız gerekir.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)

Dim r As Integer

If Target.Column <> 4 Then Exit Sub

If Not IsNumeric(Target.Value) Then Exit Sub

Application.EnableEvents = False

On Error GoTo 120


r = Target.Row

Target.Offset(, -1).Value = Target.Value - 10

120:

Application.EnableEvents = True

End Sub
 

kulomer46

Altın Üye
Katılım
23 Mart 2007
Mesajlar
1,513
Excel Vers. ve Dili
Microsoft Office LTSC Professional Plus 2021 - Türkçe
Altın Üyelik Bitiş Tarihi
08-06-2027
Merhaba

Alternatif olarak aşağıdaki kodlarda iş görebilir.
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Integer
Dim hcr As Range

If Target.Column <> 4 Then Exit Sub
'''If Not IsNumeric(Target.Value) Then Exit Sub

On Error GoTo 120

For Each hcr In Selection
hcr.Offset(, -1).Value = hcr.Value - 10
Next

120:
End Sub
Fakat yukarda #2 numaralı mesajda daha kapsamlı bir çözüm paylaşılmıştır.
#2 numaralı mesajdaki çözümü kullanalım.

Selamlar...
 
Son düzenleme:

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,646
Excel Vers. ve Dili
Pro Plus 2021
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r As Range
    If Target.Count > 1 Then Application.EnableEvents = False
    For Each r In Target
        If r.Column = 4 Then
            If r.Value = "" Then
                r.Offset(, -1).ClearContents
            ElseIf IsNumeric(r.Value) Then
                r.Offset(, -1).Value = r.Value - 10
            End If
        End If
    Next r
    Application.EnableEvents = True
End Sub
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,044
Excel Vers. ve Dili
Office 2013 İngilizce
Sayfanın Change olayında toplu işlemler için döngü kullanabilirsiniz.

C++:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim My_Area As Range, Rng As Range

    Set My_Area = Intersect(Target, Range("D:D"))

    If Not My_Area Is Nothing Then
        For Each Rng In My_Area
            If IsNumeric(Rng) Then
                Rng.Previous = Rng - 10
            End If
        Next
    End If
End Sub
teşekkürler Korhan Hocam,
iyi ki varsınız!
 
Üst