1.comboboxin aldigi degere gore 2.comboboxin iceriginin olusturulmasi

Katılım
27 Aralık 2006
Mesajlar
6
Excel Vers. ve Dili
Excel 2002 ve 2003
English
Excel'de kolay veri girisi yapabilmek icin bir arayuz kullanmak istiyorum.
Amac 1.comboboxtan secilen veriye gore "otomatik olarak" 2.comboboxin iceriginin olusturulmasi.
1.comboboxtan ulke ismi secildiginde 2.comboboxta direk o ulkeye ait olan sehirler listelenmeli.
İf - else if dongusu ile bunu basarabiliyorum ancak kodlari azaltmak icin degisken kullanimi ile cozmek istiyorum.

Excel dosya yapisi ve veri giris mantigi su sekilde:

"Veriler" isimli sheet'te arayuzden gelen veriler tutulacak.
Bu sayfada 2 adet sutun olacak. Ilk sutun ulke isimlerinin kaydedilecegi sutun, 2.sutun ise sehir isimlerinin kaydedilecegi sutun.

"Listeler" isimli sheet'te ise ulke ve sehir isimlerine ait listeler bulunacak.

Ornegin "ULKELER" isimli listenin icinde ALMANYA, ITALYA vs bulunacak.
Sonra sirasiyla her ulkeye ait listeler ayri ayri sutunlarda olacak.
Ornegin "ALMANYA" isimli listenin icinde Frankfurt, Stuttgart, Munih, Hamburg, Koln vs olacak.
"ITALYA" isimli listenin icinde Roma, Floransa, Venedik, Cenova, Napoli vs olacak.

Asagida gorunen vb kodlarinda
CBOULKELER ulke isimlerinin yer aldigi comboboxtir.
CBOSEHIRLER sehir isimlerinin yer aldigi comboboxtir.

Ilk yazdigim kod sorunsuz bir sekilde calismakta ve istedigim sonucu vermektedir.
Ancak bu kodu if - else if dongusuyle olusturmamdan dolayi dunyadaki ulke sayilarinin coklugu dusunuldugunde asiri bir kod yazimi gerekecegi ortadadir.

Bu sebeple cizgi ile ayirdigim altta kalan kisimdaki gibi bir kod yazmaya calismaktayim.
Bu kodu parantezlerle, tirnaklarla oynayarak bircok hale soktum ama yine de calistiramadim.
Amacim CBOULKELER comboboxinda secilen degeri AAAAA isimli bir degiskene atamak ve CBOSEHIRLER comcoboxinin icerigini direk bu degiskene atanmis olan ulke ismi ile ayni isme sahip olan ornegin "ALMANYA" isimli sehir listesinden cagirmak.

Cok ugrastim ancak cozemedim. Yardimci olursaniz sevinirim.

Saygilarimla...



Private Sub CBOULKELER_Click()

Dim VSEHIR As Range
Dim ws As Worksheet
Set ws = Worksheets("Listeler")

If CBOULKELER.Text = "ALMANYA" Then
CBOSEHIRLER.Clear
For Each VSEHIR In ws.Range("ALMANYA")
With Me.CBOSEHIRLER
.AddItem VSEHIR.Value
.List(.ListCount - 1, 1) = VSEHIR.Offset(0, 1).Value
End With
Next VSEHIR

ElseIf CBOULKELER.Text = "ITALYA" Then
CBOSEHIRLER.Clear
For Each VSEHIR In ws.Range("ITALYA")
With Me.CBOSEHIRLER
.AddItem VSEHIR.Value
.List(.ListCount - 1, 1) = VSEHIR.Offset(0, 1).Value
End With
Next VSEHIR

End If
End Sub

-------------------------------------------------------------

Private Sub CBOULKELER_Click()

Dim VSEHIR As Range
Dim ws As Worksheet
Set ws = Worksheets("Listeler")
Dim AAAAA As Variant

AAAAA.Text = CBOULKELER.Text

For Each VSEHIR In ws.Range("AAAAA")
With Me.CBOSEHIRLER
.AddItem VSEHIR.Value
.List(.ListCount - 1, 1) = VSEHIR.Offset(0, 1).Value
End With
Next VSEHIR

End Sub
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Bu şekilde cevap vermek zor, bir örnek dosya eklermisiniz.
 
Katılım
27 Aralık 2006
Mesajlar
6
Excel Vers. ve Dili
Excel 2002 ve 2003
English
Dosyayı ekledim

Sayin Levent Bey ilgili excel dosyasini ekledim.
Dosya su anda sorunsuz calismaktadir.
Ancak belirttigim gibi if-else if dongusu yerine 1.comboboxin (CBOULKELER) aldigi degerin otomatik olarak 2.comboboxin (CBOSEHIRLER) icerigine cagirilacak olan liste adi olarak atanmasi saglanirsa yuzlerce-binlerce satir dongu yazmaya gerek kalmayacak. Ilk mesajimin alt bolumundeki kodlarda gorundugu gibi ben birseyler denedim ancak basaramadim. Bu konuda yardimci olursaniz cok memnun olurum.

Saygilarimla...
 
Katılım
27 Aralık 2006
Mesajlar
6
Excel Vers. ve Dili
Excel 2002 ve 2003
English
Sorumu cevaplayabilecek olan yok mudur yoksa başlık arada kaynamış mıdır?
 
Katılım
27 Aralık 2006
Mesajlar
6
Excel Vers. ve Dili
Excel 2002 ve 2003
English
Combobox1'de seçilen veriyle aynı isimde liste yoksa döngüye girmesin

Çok teşekkür ederim Levent Bey, göndermiş olduğunuz çözüm ihtiyacımı görmektedir. Benim yazmış olduğum kodlara göre çok daha kısa ve çok daha profesyonel bir şekilde kodlar yazmışsınız.

Macro bilgimin başlangıç seviyesinde olması sebebiyle sizin yazdığınız kodları anlayabilmekte oldukça zorlanmaktayım. "Anlamaya gerek yok, kullan gitsin" mantığına kesinlikle karşı olduğum için kendi yazmış olduğum kodlarla biraz daha uğraştım ve sizin kodlardan da faydalanarak çözüme ulaştım. Gerçi kendi yazdığım dediğim kodların da büyük bölümünü bu sitede bulmuştum ama üzerinde bayağı bir kafa yorup anlayabilmiş, rahatlıkla üzerinde oynar hale gelebilmiştim.

Ekteki dosyada veya mesajımın alt bölümünde görülebileceği gibi combobox1'de seçilen veriyi bir değişkene atadım. Combobox2 içeriği olarak çağırılan liste ismini de yine bu değişkene eşitledim. Bu yöntemle bu başlığı açarken sorduğum sorum çözümlenmiş oldu.

Şimdi de başka bir problemle karşı karşıyayım. Yine benim örnek dosyamı baz alırsak, combobox1'de ülke seçiyor, seçtiğimiz ülkeye göre combobox2'de o ülkeye ait şehirler listeleniyordu. Mesela combobox1'de "Monaco" isimli ülkenin de listelendiğini ancak bu ülkenin hiçbir şehre sahip olmadığını düşünelim.

Dosyamın şu anki haliyle vb combobox1'de seçilen "Monaco" kelimesinden dolayı combobox2'ye çağırılacak "Monaco" isimli bir liste arıyor, haliyle hiçbir şehire sahip olmayan bir ülke olduğunu varsaymamdan dolayı "Monaco" isimli bir liste bulamıyor ve hata veriyor.

Amacım combobox1'de (CBOULKELER) seçilen bir veri ile aynı isme sahip bir liste yok ise "Private Sub CBOULKELER_Click()" altında yer alan "For Each" döngüsünün uygulanmaması veya hata vermemesi. Bu konuda yardımcı olabilirseniz çok sevinirim.

Kod:
Private Sub CBOULKELER_Click()

Dim VSEHIR As Range
Dim ws As Worksheet
Set ws = Worksheets("Listeler")
Dim AAAAA As Variant

AAAAA = CBOULKELER

For Each VSEHIR In ws.Range(AAAAA)
With Me.CBOSEHIRLER
.AddItem VSEHIR.Value
.List(.ListCount - 1, 1) = VSEHIR.Offset(0, 1).Value
End With
Next VSEHIR

End Sub
 
Katılım
27 Aralık 2006
Mesajlar
6
Excel Vers. ve Dili
Excel 2002 ve 2003
English
İyi güzel de bybora2006 kardeşim senin sorunun farklı bir başlıkta açılmış olması gerekmez miydi? Benim açtığım başlıkla ve içerikle uzaktan yakından bir alakası yok gibi görünüyor :)
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
İyi güzel de bybora2006 kardeşim senin sorunun farklı bir başlıkta açılmış olması gerekmez miydi? Benim açtığım başlıkla ve içerikle uzaktan yakından bir alakası yok gibi görünüyor :)
Uyarınız üzerine ilgili mesaj ayrı bir başlığa taşınmıştır. Sorunuza gelince Ülke seçtiğiniz comboboxtaki kodlara ilk satır olarak aşağıdaki kodu ilave edin.

Kod:
on error resume next
 
Katılım
27 Aralık 2006
Mesajlar
6
Excel Vers. ve Dili
Excel 2002 ve 2003
English
İlginiz ve bilginiz için çok teşekkür ederim Levent Bey.
Dediğiniz kodu yazınca problem çözüldü.
 
Üst