E

Çözüldü Üç Ayrı Şekildeki Makroyu Birleştirme

  • Konuyu başlatan Konuyu başlatan ErolU
  • Başlangıç tarihi Başlangıç tarihi
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

ErolU

Normal Üye
Değerli Arkadaşlar,
Başlıkta da belirttiğim gibi "Private Sub Worksheet_Change(ByVal Target As Range)" başlıklı üç makroyu üçü de çalışacak şekilde birleştirmek istiyorum.
Makroların aşağıda verdiğim sıralamaya göre alt alta yazılması daha doğru olacak diye düşünüyorum.
Birinci ve ikinci makroda geçen "On Error GoTo Son" satırı E8:F67 bölgesinde toplu silme işlemi yapınca çıkan makro hatasını göstermemek için kullanılıyor.
Konu hakkında yardımlarınızı rica ediyorum.

1. MAKRO:
Kod:
Görüntülemek için giriş yapmanız gerekmektedir.
(19 satır)

2. MAKRO:
Kod:
Görüntülemek için giriş yapmanız gerekmektedir.
(8 satır)

3. MAKRO:
Kod:
Görüntülemek için giriş yapmanız gerekmektedir.
(7 satır)
 
Aynı isimde 3 makro yazılamaz. İsimleri farklı olmalı. Yoksa bilgisayar hangisini çalışacağı anlamaz. Bu nedenle isimleri değiştirmeniz gerek.
Lakin gördüğüm kadarıyla üçüde sayfa da değişiklik yapılınca tetiklenmesi ve target değerini alması gerek. Bu nedenle 1. yi sabit bırakıp diğerlerini değiştirmeniz gerek. Ve son olarak kodlar da hata meydana gelince devam etmesi pek tercih etmek istemediğim bir durum. Farklı hatalar meydana gelince göremeyeceksiniz anlamına geliyor. Bunun yerine hata neden kaynaklanıyor ve çözümü nedir arayışına girmek daha makul.

Gelelim birleştirme işine :
Kod:
Görüntülemek için giriş yapmanız gerekmektedir.
(36 satır)

Not: Örnek dosya olmadığı için kodları denemeden düzenledim.
 
Sayın cakarem ve Ömer BARAN,
İki kod da tüm istenilenleri yapıyor çok teşekkürler.
İkisinden birini seçmek durumundayım. Ömer Bey'in kodu kısa olduğu için onu tercih ettim.

Ömer Bey,
Verdiğiniz koda şu iki şey eklenebilir mi?

1. Diyeyim ki öğrencilerin okul numaralarının ve adlarının yazılı olduğu E8:F67 aralığından öğrenci okuldan gittiği için bir satır sildim.
Silme işlemini yapınca o satır boş kalıyor. Kod tekrar tetiklenince sıralama yapılıyor ve boşluk kalmıyor.
Silme işlemi yapılınca bu tetikleme devreye girebilir mi?
İşlem bu kod üzerinde yapılamaz ise yine aynı bölge için çalışan Private Sub Worksheet_SelectionChange(ByVal Target As Range) başlıklı bir kod üzerinde yapılabilir mi?
Kod:
Görüntülemek için giriş yapmanız gerekmektedir.
(10 satır)


2. E8:F67 aralığı için E sütununda okul numarası yazılmadan F sütununda isim yazılamaması.
 
E ve F sütununu birlikte seçip silmek yerine, tek tek silerseniz
kod aşağıdaki gibi kullanılabilir gibi geliyor bana.

CPP:
Görüntülemek için giriş yapmanız gerekmektedir.
(17 satır)

.
 
Dediğiniz gibi oluyor. İki hücreyi silmeye kalkınca da makro hatası veriyor.
Ben bu hatayı şu şekilde kapatıyorum:
Kod:
Görüntülemek için giriş yapmanız gerekmektedir.
(5 satır)
Son ile End Sub arasına "E67 hücresine giriş çıkış yap" talimatı versek sorun çözülüyor sanırım.
E67 hücresinin içine giriş çıkış yap komutu nasıl verilebilir?
 
Sayın @cakarem 'in de belirttiği gibi On Error GoTo gibi bir yapının kullanılması pek önerilmez.
Bence kodun en başına aşağıdaki satırı eklemek en iyisi (bundan önceki cevabımı buna göre güncelledim) .

Kod:
Görüntülemek için giriş yapmanız gerekmektedir.
(1 satır)

.
 
Sayın Ömer BARAN,
Çok teşekkür ederim. Son kod tüm işlemleri hatasız yapıyor.

Şu an gerekliliği yok fakat lazım olursa kullanılabilmesi için bir şey daha sormak istiyorum.
Kod, sıralamayı küçükten büyüğe doğru yapıyor. Tersi için neresi değişmeli?
Zaman alacak bir şey ise uğraşmaya gerek yok. Dediğim gibi şuan için gerekliliği yok.

Sorunun çözülmüş şeklini içeren dosyayı aşağıya ekledim. İhtiyacı olanlar kullanabilir.
 

Ekli dosyalar

Kodu kullanmak isteyenlere uyarı:

Kod yazılırken gözden kaçmış durum şöyle:
Okul numarası benzersiz olsa ama isim daha önce yazılan isimlerden biri olsa "Bu öğrenci numarası daha önce kullanılmıştır" mesajını veriyor.
Sorunu kodun aşağıdaki satırını şu şekilde düzelterek çözebiliyoruz:
Kod:
Görüntülemek için giriş yapmanız gerekmektedir.
(1 satır)
 
Mürerrer isim ve mükerrer numaraya izin verip/vermeme tercihine göre silme kısımları iptal de edilebilir elbette.
Aşağıdaki şekilde ayrı ayrı hem mükerrer no, hem de mükerrer isim kontrolü yaptırılabilir, mükerrer kayıt sildirilebilir.

VBA:
Görüntülemek için giriş yapmanız gerekmektedir.
(4 satır)

.
 
Sn. @Ömer BARAN hocam;
Kod:
Görüntülemek için giriş yapmanız gerekmektedir.
(11 satır)

Yukarıdaki kod ile E:F sutunlarını kontrol edebiliyoruz, birden fazla sutunda yine aynı kontrolü yapmak istersek, mesala H:I, T:U sutunlarında da rakam ve metin kontrolü yapmak istersek koda nasıl bir ilave yapmalıyız. Teşekkürler.
 
Merhaba Sayın ANARAT,
VİP ÜYELİK süresi dolmuş galiba ;)

Kabaca şöyle olabilir;

-- SAYI kısmının mükerrerliğinin önlenmesi için
If Target.Column>7 And Target.Column<10 And Target<>"" And WorksheetFunction.Countif([H:I],Target.Value)>1 Then
-- METİN kısmının mükerrerliğinin önlenmesi için
If Target.Column>19 And Target.Column<22 And Target<>"" And WorksheetFunction.Countif([T:U],Target.Value)>1 Then

Tabi bu koşulları, öncelik sırasına göre; If ... Elseif ....Elseif ..... End If gibi tek bir If...End If bloku içinde düzenleyip,
her koşul altına da silme/uyarı neyse işlemleri yazmalısınız.

Şayet halledemezseniz; bu konu ÇÖZÜLDÜğü için; isterseniz gerçek belgenizle benzer yapıda bir örnek belge üzerinden
yeni bir konu açarsanız, daha kolay çözüm bulunur. İstenileni (yapılacak engellemeye ilişkin detay açıklama olması lazım) net örneklendirirseniz iyi olur.

.
 
Belirttiğim gibi, kendi örnek belgeniz üzerinden ve
hangi durumda hangi işlemin yapılmasını istediğinizi detaylıca ve sütun/veri tipi gibi detayları da
belirterek yeni bir konu açmanız en iyisi sanırım.

.
 
Ömer Bey,
Konu çözülmüştü ama sonradan iki sorunla karşılaştım. Aynı konu olduğu için buradan yazayım dedim.
Ekteki GÜNCEL çalışma kitabında sorunları açıkladım. Kısaca şöyle:
1. Sıralama yapılan alanı nasıl değiştirebiliriz?
2. Sıralama yapılan bölgeyi silince çıkan hata nasıl giderilir?
Yardımlarınızı rica ederim.
 

Ekli dosyalar

Mevcut kodları aşağıdakilerle değiştirerek dener misiniz?

Denemeyi, bir kez alan boşken 8'inci satıra veri girerek, bir kez de 8'inci satır ve/veya başka dolu satır da varken yapın.

CSS:
Görüntülemek için giriş yapmanız gerekmektedir.
(23 satır)

.
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst