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)
 
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)

.
 
Önce bundan önceki cevabıma bakınız SAyın @Erol U. .

Sanki kodun son kısmı (10: dolu = ..... ile End Sub satırları arasında kalan kısım) şöyle olsa daha doğru olacak.
Her iki duruma göre deneyip sonucu, varsa sorunu iletirsiniz.

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

.
 
Sizin veri alanınınız 67'nci satırda bitiyor ve boşluksuz veri girişi zaten kodla sağlanıyor.
Bu durumda iki sütuna veri girildiğinde İLK BOŞ SATIR'ın bulunması için iki seçenek var.
-- Biri başlık hücresinden aşağı doğru ilk boş hücreye ulaşmak. Bunun için ilk seçenek CTRL+AŞAĞI OK.
Başlıklarınız iki hücre birleştirilmiş olduğundan (aslında E6 DOLU, E7 BOŞ, F6 dolu, F7 boş demek),
CTRL+AŞAĞI OK işleminin 2 kez uygulanması, Sonuçta varılan hücrenin 1 altındaki satır boş hücredir.
-- İkincisi ise sütunda en son satırdan (excel versiyonuna göre 1048576'ncı satırdan yukarı doğru gitmek için
E1048576 hücresine gelip CTRL+YUKARI OK tuşuna basmak, varılan hücreden 1 satır aşağısı ilk boş hücredir.
Tablonuzdaki satır sayısı sabit olduğuna göre (ben öyle anladım en azından) E68'den CTRL+YUKARI OK, varılan satır+1 ilk boş hücredir.
Ben bu seçeneği düşünmüşüm.

Belki de kısa kod oluşturmaya çalışmak yerine, basitçe ilgili sütunda 8'inci satırdan itibaren TEK TEK dolu/boş kontrolü için
For...Next döngüsü kurulup, boş hücreye varıldığında döngüden çıkılması da düşünülebilir. Neticede veri alanınız çok satırlı bir alan değil.

Tabi dikkate alınmamış bir durum da 67'nci satıra da veri yazıldığında nasıl bir işlem beklenildiği.
Bu durum seçeneği halen AÇIKTA.

Bir de önerim olsun, GİZLENECEK sütunu kullanmaya gerek var mı sizce?
İlgili Onay Kutularının bağlantı hücresi olarak Onay Kutusunu konumlandırdığınız B sütununu neden kullanmıyorsunuz?
Tabi tek koşul, bu hücrelerin arkaplan rengiyle yazı rengini AYNI olacak şekilde ayarlamalısınız.

Son belgenizdeki isteğinize ayrıca bakarım uygun olduğumda.
Aklıma ilk gelen aslında VERİ DOĞRULAMA yöntemiyle alana veri girişinin kısıtlanması oldu.
Ama önceden düşünülmesi gereken bir durum da solunda YANLIŞ yazılıykan veri girilip, Onay Kutusu sonradan işaretlendiğinde ne yapılacağı. Bu duru için benim aklıma gelen yöntem ise KOŞULLU biçimlendirme üzerinden uygulanacak renklendirmeyle bu duruma dikkat çekmek.

.
 
Yanlış düşünmüyorsam mevcut kodda ilk If..... ile bir sonraki Elseif.... arasına aşağıdaki yeşil kısım eklenirse,
örnek belgedeki 1 ve 2 numaralı istekleriniz karşılanmış olur.

VBA:
Görüntülemek için giriş yapmanız gerekmektedir.
(5 satır)
 
Önce bundan önceki cevabıma bakınız.
Onay Kutularına TİK işareti konulması mevzusuyla ilgili olarak; aşağıdaki kodu, sayfanın kod bölümüne ekleyin.
Sonra sayfadaki tüm Onay Kutularını seçili hale getirin
(seçili derken TİK işareti koyma veya kaldırmayı kastetmiyorum, nesneleri seçili hale getirin)
sonra birinin üzerinde fareyle sağ tıklayıp MAKRO ATAyı seçin ve açılacak küçük ekranda ONAY_E_DOLU_KONTROL
makrosunun adını seçip işlemi onaylayın.

Artık E sütunu boş olan satırdaki onay kutusu işaretlendiğinde istediğiniz uyarı verlir ve onay kutusuna koyulan TİK iptal edilir.

NOT: SİL ismini verdiğiniz makro, sadece BAŞLANGIÇ isimli sayfada işlem yapacaksa,
o makro kodlarını da sayfanın kod bölümüne alabilirsiniz.


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

.
 
Sayın @Erol U.

Aşağıdaki ilk kod satırını Worksheet_Change kodunun End Sub satırının hemen üstüne ekleyin.
Devamındaki ONAY_E_DOLU_KONTROL makrosunu da aşağıdaki gibi değiştirin.

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

.
 
Keşke yeni bir konu açıp tüm durum ve koşulları tek seferde açıklasaydınız.
Böylece boşuna uğraşılmamış, bir defada sonuç almaya daha çok yaklaşılmış olurdu.

Herneyse; TİK koyma (onay kutusunu seçili hale getirme) işlemi yapıldığında E sütunu boşsa son verdiğim kod ile
MsgBox görüntüleniyordu. İstenilenin bu olduğunu anlıyorum.
ANcak MsgBox ile birlikte D sütununda oluşan DOĞRU ibaresi siliniyor idi. Bunu mu istemiyorsunuz?
Eğer öyle ise ilgili Onay Kutusu seçili (dolayısıyla da ilgili satırda D hücresinde DOĞRU ibaresi) olarak kalır.

Sanırım anlayamadım.
 
Onay Kutularyıla ilgili işlemdeki ÖNCELİK sırası konusundan emin olamadım açıkçası.

Aşağıya 2 öncelik sırası seçeneğini de vereyim, yazdığım açıklamayı değil de iki kod seçeneğini ayrı ayrı uygulayıp,
sayfada işlem yaparak deneyin ve sonuca göre karar verin.

Hangisi isteğinizin TAM karşılığı ise onu kullanırsınız.
-- Birinci seçenekte; önce A sütunu hücresi için boş/dolu kontrolü yapılır,
A boşsa TİK işareti kaldırılır (yani D hücresi silinir) ve E sütunu kontrolü yapılmadan işlem biter, MsgBox görüntülenmez.
-- İkinci seçenekte; önce E sütunu hücresi boş/dolu kontrol edilir, E hücresi boşsa MsgBox görüntülenir ve
onay kutusu temizlenir (yani D hücresi silinir) , A sütunu kontrol edilmeden işlem solandırılır.

Kodlardaki Range(Split(XD, "_")(1)).Offset(0, 2).ClearContents
satırlarının TİK işaretinin kaldırılması anlamına geldiği bellidir, çünkü bağlantı hücresi silinince TİK kalkar).

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

CSS:
Görüntülemek için giriş yapmanız gerekmektedir.
(8 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)
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst