Yardım İki tane Worksheet_Change kodunun birleştirilmesi

mervesy

Yeni Üye
Katılım
8 Tem 2019
Mesajlar
4
En iyi yanıt
0
Puanları
1
Yaş
30
Konum
İstanbul
Ad Soyad
Merve Say
Merhaba;
Aşağıdaki iki kodu birarada kullanmanın bir yolu var mıdır?

Teşekkürler

Kod1
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 6 Then
Target.Offset(0, 1).ClearContents
Target.Offset(0, 2).ClearContents
Target.Offset(0, 3).ClearContents
Target.Offset(0, 4).ClearContents
Target.Offset(0, 5).ClearContents
Target.Offset(0, 6).ClearContents
Target.Offset(0, 7).ClearContents
Target.Offset(0, 8).ClearContents
Target.Offset(0, 9).ClearContents
Target.Offset(0, 10).ClearContents
Target.Offset(0, 11).ClearContents
End If
End Sub

Kod2
Private Sub Worksheet_Change(ByVal Target As Range)
Set xxx = Intersect(Target, Range("E2:F32,H2:H32"))
If Not xxx Is Nothing Then
If HasValidation(xxx) Then
Exit Sub
Else
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
MsgBox "Your last operation was cancelled. It would have deleted data validation rules.", vbCritical
End If
End If
End Sub

Private Function HasValidation(r) As Boolean
HasValidation = True
On Error Resume Next
For Each cll In r.Cells
x = cll.Validation.Type
If Err.Number <> 0 Then
HasValidation = False
Exit For
End If
Next cll
End Function
 

ozkansabanci

Excel VBA Developer
Uzman
Katılım
28 May 2018
Mesajlar
83
En iyi yanıt
2
Puanları
18
Yaş
33
Konum
Kocaeli
Web sitesi
www.ozkansabanci.com
Ad Soyad
Özkan Sabancı
Tam olarak ne işe yaradığını bilmeden yazıyorum. End If kısmının altında aşağıdaki kısmı ekleyince istediğiniz olmuyor mu?

PHP:
Set xxx = Intersect(Target, Range("E2:F32,H2:H32"))
If Not xxx Is Nothing Then
If HasValidation(xxx) Then
Exit Sub
Else
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
MsgBox "Your last operation was cancelled. It would have deleted data validation rules.", vbCritical
End If
End If
 

mervesy

Yeni Üye
Katılım
8 Tem 2019
Mesajlar
4
En iyi yanıt
0
Puanları
1
Yaş
30
Konum
İstanbul
Ad Soyad
Merve Say
Dediğiniz gibi yaptığımda işe yaradı. Ancak birkaç kez gerekli uyarıyı verdikten sonra Application.Undo satırı için aşağıdaki hatayı vermeye başladı:



Run time error 1004: Method Undo of object _Application failed.
 

ozkansabanci

Excel VBA Developer
Uzman
Katılım
28 May 2018
Mesajlar
83
En iyi yanıt
2
Puanları
18
Yaş
33
Konum
Kocaeli
Web sitesi
www.ozkansabanci.com
Ad Soyad
Özkan Sabancı
Dediğiniz gibi yaptığımda işe yaradı. Ancak birkaç kez gerekli uyarıyı verdikten sonra Application.Undo satırı için aşağıdaki hatayı vermeye başladı:



Run time error 1004: Method Undo of object _Application failed.
Merhaba,

Yapılmak istenen üzerinden giderek kod yazılması daha sağlıklı olabilir.

PHP:
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Yukarıdaki kodlarda ne anlatmak isteniyor? Belki de bir işe yaramıyor.
 

mervesy

Yeni Üye
Katılım
8 Tem 2019
Mesajlar
4
En iyi yanıt
0
Puanları
1
Yaş
30
Konum
İstanbul
Ad Soyad
Merve Say
Merhaba,

Yapılmak istenen üzerinden giderek kod yazılması daha sağlıklı olabilir.

PHP:
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Yukarıdaki kodlarda ne anlatmak isteniyor? Belki de bir işe yaramıyor.
Elimde data validationlarla dolu bir dosya var. İlk kodda 6. sütundaki validationda farklı bir seçenek seçildiğinde sağ tarafında yer alan dataların sıfırlanmasını istiyorum ki kullanıcı validationları baştan seçsin.
İkinci kısımda ise dosyadan validationların kaldırılmasını engellemeye çalışıyorum. Farklı bir dosyadan bir veriyi alıp benim hazırladığım dosyaya copy-paste ile yapıştırıldığında hazırladığım validationlar gidiyor. Bunu engellemek için ilgili alanlarda validation olup olmadığının kontrolünü sağlamaya çalışıyorum.
Dosyadan copy-paste yapılmasını engelmemem mümkün değil, bu sefer kullanıcının işini çok zorlaştırmış olacağım. Benim amacım copy-pastei engellemek değil, sadece validationların korunması.
Umarım açıklayabilmişimdir.
VBA çok anladığım bir alan değil açıkçası, bu kodları da web sitelerinden araştırarak buldum. İki kod ayrı ayrı çalışıyor, bu şekilde birleştirdiğimde de ilk birkaç seferde işe yarıyor, ancak birkaç kez uyarının çıkmasını sağlayan işlem yaptıktan sonra dosya hata vermeye başlıyor.
 

ozkansabanci

Excel VBA Developer
Uzman
Katılım
28 May 2018
Mesajlar
83
En iyi yanıt
2
Puanları
18
Yaş
33
Konum
Kocaeli
Web sitesi
www.ozkansabanci.com
Ad Soyad
Özkan Sabancı
Örnek bir dosya ile çalışmayı paylaşırsanız yeniden kodlayabiliriz.

İyi Çalışmalar.
 

mervesy

Yeni Üye
Katılım
8 Tem 2019
Mesajlar
4
En iyi yanıt
0
Puanları
1
Yaş
30
Konum
İstanbul
Ad Soyad
Merve Say

Linkte örnek dosyayı paylaşıyorum. Yapmak istediklerim; Product Type sütununda birşey değiştiğinde; aynı satırdaki sağ tarafta kalan bütün sütunların temizlenmesini istiyorum. Ayrıca data validation içeren bütün hücreler için (örneğin: D2:Q10000) data validation olmayan bir hücreyi kopyalayıp yapıştırmak istediğimde uyarı versin ve yapıştırma işlemini geri alsın istiyorum. böylece yaptığım validationlar bozulmayacak.
Yardımlarınız için çok teşekkürler
 
Üst Alt