Makroyla Metin Kutusu ve İçerik Eklemek

Çözüldü Makroyla Metin Kutusu ve İçerik Eklemek

  • Konuyu başlatan Konuyu başlatan merakli
  • Başlangıç tarihi Başlangıç tarihi

merakli

Site Üyesi
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe
Merhaba,
Sosyometri uygulamasıyla ilgili bir excel dosyamızın istatistiklerini raporlaştırma konusunda @Ömer BARAN Bey'in büyük katkısı ile sonuna geldik sayılır. Kendisine buradan şükranlarımı sunuyor ve son işlem için örnek görsel ve dosya ile açıklamaya çalışacağım.

Önceden bu işlemi Sosyometri Uygulaması İle Sosyogram Oluşturma başlığında konuşmuştuk. Bu şekilde interaktif bir şey yapmak için verilen çabayı karşılamayacağı sonucuna vardık. Şimdi sadece ok ve isimlerin yer aldığı metin kutularını alt alta sıralamak işimizi yeterince görecektir.
Örnek dosyada
Liste!$J$5:$J$34 öğrencilerin puanları ve Liste!$C$5:$C$34 de ise isimleri mevcut
ya da aynı listenin azdan çoka doğru
İstenen-İstenmeyen!$D$7:$D$36 çoktan aza doğru öğrencilerin puanları ve İstenen-İstenmeyen!$C$7:$C$36 de ise isimleri mevcut
Bu iki bilgiden birisi ile
sosyogram isimli sayfada
makro kaydederek elde ettiğim bir boş metin kutusu var.
Bu makroyu öğrenci sayısı kadar döngü içine alarak içinde isimlerin yer aldığı ve sağ tarafına sırasıyla üstten yeşim mavi ve kırmızı okların sağ noktasına eklenmiş halde döndürerek alt alta oluşturmak istiyorum
sonrasında bu okları öğretmen listedeki öğrencinin seçimlerine göre diğer isimlere ekleyecek ve isimleri sürükle bırak ile konumlandıracak....

Bilgi ve motivasyonumla en kolay böyle yapılacağı düşüncesine vardır.
Göremediğim bilemediğim başka daha kolay yollarıda vardır ve olabilir.
Bu şekilde ya da bu işleme uyacak başka bir yapıda katkılarınızı rica ediyorum.
soru 1.webp


xxxx.webp



soru 2.webp
 

Ekli dosyalar

Moderatörün son düzenlenenleri:
Ekteki belgeyi, XD SİMGESİne tıklayarak deneyin @merakli

.
Teşekkür ederim @Ömer BARAN Bey her zamanki gibi harikasınız.

Sadece şu şekilde küçük bir problemimim var.

Sayfaları PDF kaydederken sizin çok öncelerden yazmış olduğunu şuradaki makroyu kullanıyorum.
makro Giriş sayfasındaki PDF Kaydet düğmesinde çalışıyor
Giriş sayfası örnek dosyada olduğu gibi ilk sayfa olursa bu sayfayıda pdf içine katıyor.
Son sayfaya çektiğimde ise giriş sayfası pdf de yer almıyor.
Bu nereden kaynaklanıyor olabilir?



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

Ekli dosyalar

@merakli

Kodda ilgili bölümü şöyle güncelleyin.
İstisna olarak belirtilen sayfaların dışındaki tüm sayfalar PDF belgeye dahil edilir.

VBA:
Görüntülemek için giriş yapmanız gerekmektedir.
(13 satır)
 
@Ömer BARAN Bey metin kutularını ekleyip konumlarını değiştirdikten sonra yeni bir liste yükleyince konumları değişen ok ve metin kutuları silinmiyor. İhtiyacımızı görüyor çok sorun değil ancak yeni liste eklenince konumları değişen değişmeyen tüm ok ve metin kutularını silecek bir kod var mıdır .ClearContents vb gibi
 
Koddaki silme işlemi:
For Each nsn In s.Shapes
If nsn.TopLeftCell.Column > 9 Then nsn.Delete
Next
ile yapılıyor.
Kriter ise nesnenin (metin kutusu veya ok) sol üst köşesinin bulunduğu hücrenin sütun numarası (9).
Yani J ve devamı sütunlarda bulunan tüm nesneler silinir.
Kural böyle olduğu içindir ki; sol üstte bulunan MASTAR diyeceğimiz ve nesnelerin kaynağı olan nesneler silinmiyor.
Tabii ki sayfadaki tüm nesneler tek adımda da s.DrawingObjects.Delete satırıyla silinebilirdi.
Ancak bu durumda MASTAR (kopyalanarak çoğaltılan ana şekiller) nesneler de silinmiş olurdu.
 
@Ömer BARAN Bey
Şu şekilde bir sorun yaşıyorum.
Metin kutularını çalışma alanının içine yazdırmak benim talebimdi ancak şuan onların konumlarını manuel olarak düzenlerken tümünün yazdırma alanının içinde durmaları çalışmayı olumsuz etkiliyor.
Bunları yazdırma alanının sağına görseldeki işaret ettiğim alana sıralatmak için nerede değişiklik yapmalıyım?
Sağda yazdırma alanının dışında durursa oradan alıp çalışma alanında rahat çalışabiliriz gibi bir durum oluştu.

Screenshot_4.webp
 
Moderatörün son düzenlenenleri:
Kodu şöyle değiştirin bakalım.
Kodun baş tarafındaki If nsn.TopLeftCell.Column >= 8 Then nsn.Delete şeklindeki satırdaki 8 sayısı sütun numarası.
Silme işlemi yapılırken, nesnenin sol üst köşesinin bulunduğu hücrenin sütun numarası kontrol ediliyor.
Bu nedenle elle yapılacak yer değiştirmelerinde J sütununun soluna nesne yerleştirilmemeli.

Umarım uygun vakit denk getiririm.
Hazır olan okların hangi renkte olanının hangi diğer kişiye bağlanacağı bilgisi aslında belgenizde hazır diye düşünüyorum (yine de örneklendirme ve kısa açıklama iyi olur) . Birkaç kişi için örnek birleştirmeleri yapıp (kimi kime neden şu renkle bağladığınızı kısaca açıklarsanız bu bağlama işlemi de kodlanabilir.
İşte bu noktada, nesne isimlendirme işleminde kullandığım öğrenci numaraları ile koda şimdi eklediğim birkaç satırla OKlar için de renk ve kime ait olduğu belli olacak şekilde adlandırma yapılıyor..

Bağlama kodlamasından sonra, elle yapılacak tek işlem metin kutularını sağa sola çekip konumlandırmak olur.

[REPLY]
VBA:
Görüntülemek için giriş yapmanız gerekmektedir.
(46 satır)
[/REPLY]
 
Kodu şöyle değiştirin bakalım.
Kodun baş tarafındaki If nsn.TopLeftCell.Column >= 8 Then nsn.Delete şeklindeki satırdaki 8 sayısı sütun numarası.
Silme işlemi yapılırken, nesnenin sol üst köşesinin bulunduğu hücrenin sütun numarası kontrol ediliyor.
Bu nedenle elle yapılacak yer değiştirmelerinde J sütununun soluna nesne yerleştirilmemeli.
Teşekkürler isimler bahsettiğim alana geldi.

Üstte paylaştığınız dosya üzerinden açıklamaya çalışıyorum şuan
 
Hazır olan okların hangi renkte olanının hangi diğer kişiye bağlanacağı bilgisi aslında belgenizde hazır diye düşünüyorum (yine de örneklendirme ve kısa açıklama iyi olur) . Birkaç kişi için örnek birleştirmeleri yapıp (kimi kime neden şu renkle bağladığınızı kısaca açıklarsanız bu bağlama işlemi de kodlanabilir.
İşte bu noktada, nesne isimlendirme işleminde kullandığım öğrenci numaraları ile koda şimdi eklediğim birkaç satırla OKlar için de renk ve kime ait olduğu belli olacak şekilde adlandırma yapılıyor..

Bağlama kodlamasından sonra, elle yapılacak tek işlem metin kutularını sağa sola çekip konumlandırmak olur.

Açıklama isimli sayfada kısaca açıklamaya çalıştım.
Sosyogram isimli sayfada bir kaç öğrencinin tercihlerini oklara göre düzenledim

SEÇEN ÖĞRENCİ için (Metin Kutusunun sağındaki oklar)
Yeşil ok seçen öğrencinin 1. tercihi
Mavi ok seçen öğrencinin 2. tercihi
Kırmızı ok seçen öğrencinin 3. tercihi
simgeliyor.

SEÇİLEN ÖĞRENCİ için (Metin Kutusunun solundaki oklar)
Yeşil ok seçilen öğrencinin 1. derecede seçildiğini gösteriyor
Mavi ok seçilen öğrencinin 2. derecede seçildiğini gösteriyor
Kırmızı ok seçilen öğrencinin 3. derecede seçildiğini gösteriyor tercihi
simgeliyor.
 

Ekli dosyalar

@merakli

Şöyle bir şey düşündüm.
-- Sayfaya bir adet ActiveX nesnesi olarak CheckBox (isminin CheckBox1 olduğundan emin olun) ekleyin,
-- Sayfanın kod bölümüne şu kodu ekleyin (CheckBox için),

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

-- MASTAR METİN KUTUSUnun boyutlarını ve karakter boyutunu biraz küçültün (bence şekil KARE gibi olup yazı boyutu da 8 olmalı),
-- Şimdi de MASTAR METİN KUTUSU, XD logosu ve CheckBox'u AO sütununun sağında konumlandırın.
-- Module2'de mevcut olan kodların tümünü silip yerine şu kodları yapıştırın,

[REPLY]
VBA:
Görüntülemek için giriş yapmanız gerekmektedir.
(104 satır)
[/REPLY]

Şimdi XD logosuna tıklayabilirsiniz.
-- BAĞLANTI OKLARI hazır hale gelecek (ama görünmez durumda olacak).
-- İçerisine isimlerin yazılı olarak hazırlandığı METİN KUTULARInı yazdırma alanının içine manuel dağıtın,
Diyelim ki fareyle sürükleyerek dağılımı şöyle yaptınız.
Screenshot_1.webp

-- Aslında metin kutularının alana dağınık olarak konumlandırılmasına dair de bir kodlama yaptım.
Ancak dağılımın istikrarlı olmadığını görüyorum. Bu nedenle o kodu vermeyeyim şimdilik.
CheckBox'u işaretlediğinizde OKlar görünür hale gelecek. Şöyle:

Ekli dosyayı görüntüle ana excel.xlsb


.
 
Moderatörün son düzenlenenleri:
@merakli

Şöyle bir şey düşündüm.
-- Sayfaya bir adet ActiveX nesnesi olarak CheckBox (isminin CheckBox1 olduğundan emin olun) ekleyin,
-- Sayfanın kod bölümüne şu kodu ekleyin (CheckBox için),

*** Hidden text: cannot be quoted. ***


-- MASTAR METİN KUTUSUnun boyutlarını ve karakter boyutunu biraz küçültün (bence şekil KARE gibi olup yazı boyutu da 8 olmalı),
-- Şimdi de MASTAR METİN KUTUSU, XD logosu ve CheckBox'u AO sütununun sağında konumlandırın.
-- Module2'de mevcut olan kodların tümünü silip yerine şu kodları yapıştırın,

*** Hidden text: cannot be quoted. ***


Şimdi XD logosuna tıklayabilirsiniz.
-- BAĞLANTI OKLARI hazır hale gelecek (ama görünmez durumda olacak).
-- İçerisine isimlerin yazılı olarak hazırlandığı METİN KUTULARInı yazdırma alanının içine manuel dağıtın,
Diyelim ki fareyle sürükleyerek dağılımı şöyle yaptınız.
Ekli dosyayı görüntüle 13975
-- Aslında metin kutularının alana dağınık olarak konumlandırılmasına dair de bir kodlama yaptım.
Ancak dağılımın istikrarlı olmadığını görüyorum. Bu nedenle o kodu vermeyeyim şimdilik.
CheckBox'u işaretlediğinizde OKlar görünür hale gelecek. Şöyle:

1638788903137.png


.

@Ömer BARAN Bey Çok Teşekkür ederiz.
Önceki hali bile büyük kolaylıktı ama bu daha da bir kolaylık oldu.
Elleriniz dert görmesin.
Üstteki mseajın içeriğinden şunu anlıyorum ki o kodları şimdi vermeyeyim demenizden sanki o alan içine onları da düzenli dağıtmayı düşünüyor gibisiniz :)

Bu dağıtımı ben şöyle yapıyorum en mantıklısı da bu sanırım.
En çok tercih edilen öğrencileri merkeze alıyorum hiç tercih edilmeyen ya da çok az tercih edilenleri sağ ve sol tarafa birbirlerini tercih etme durumlarına göre (kırmızı çiftler bir tarafta...) dağıtıyorum bu şekilde daha düzenli görülüyor...
 
Bu iş zor iş, ben randomize iki sayı (alandaki satır sayısı ve sütun sayısı içinde olmak üzere) tespit edip,
bu sayıya göre bulunan hücre adresine yerleştiriyordum, öyle çok ahım şahım, kırmızı/yeşil/ençok/enaz filan bir şey yoktu.
Belirttiğiniz konumlandırma mantığı kodlanabilir mi bilemiyorum.
Kişi sayısı sabit olsaydı ve yerleştirme önceliği gibi bir sıralama kriteri ve bu sıraya göre de
ilk kişi şu hücreye, ikinci kişi bu hücreye gibi öncelik sırasına göre bir adres listesi olsaydı,
kişiyi bulup orada konumlandırmak zor olmazdı muhtemelen.

Bence konumlandırma işini elle yapmak en iyisi.
 
@Ömer BARAN bey gerçek verilerle çalışırken sosyogram sayfasında bazı öğrencilerin oklarının çalışmadığını farkettim. Sonrasında kodları incelediğimde BAĞLAMA isimli Sub ın ilk satırlarında For Next döngüsünün 32 şeklinde yazıldığını gördüm ve onu For sat = 5 To lst.Cells(Rows.Count, 2).End(3).Row şeklinde güncelledim sorun çözüldü.
 
Üst