VBA - Bir kullanıcı formunda basamaklı bir açılır kutu nasıl oluşturulur

VBA - Bir kullanıcı formunda basamaklı bir açılır kutu nasıl oluşturulur

Giriş

Bu makalede, Dolaylı yöntemi kullanarak bir basamaklı açılır kutuyu nasıl dolduracağınızı öğreneceksiniz.

Ön şartlar

  • 1 çalışma kitabı
  • 1 UserForm
  • 3 açılır kutu.

Ayrıca örnek bir çalışma kitabını buradan indirebilirsiniz: //cjoint.com/14au/DHhootCLYVh.htm

Excel altında adları yönetme

Excel çalışma kitabındaki adları tanımlamak için aşağıdakilerden birini yapabilirsiniz:
  • Excel 2007 veya önceki bir sürüm: Ekle> Adlar> Tanımla .
  • Excel 2010'dan itibaren: Şerit formülleri> Bir ad tanımlayın.

Açılan kutunun kodu

Aşağıdakilerin olmasını istiyoruz:
  • UserForm yüklendikten sonra ComboBox1 doldurulur.
  • Diğer birleşik giriş kutuları, birincisinin değerlerine göre doldurulur.

İlk listeyi doldurmak

Açılan bir kutuyu çalışma kitabının adlandırılmış aralığının içeriğiyle doldurmak için sözdizimi şöyledir:
  • ComboBox1.List = Application.Transpose (Range ("monNom"))

ComboBox'ı temizlemek için:

  • Combobox1.Clear

UserForm yüklemesinde ilk açılır listeyi doldurma kodunu bize veren:

 Özel Alt UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (Range ("Dep")) ComboBox2.Clear ComboBox3.Clear Bitiş Sub 

2. listenin doldurulması

İlk açılır listede bir değer seçildiğinde, bu (ComboBox'ta gösterilen metin) çalışma kitabı adına karşılık gelir.

Adlandırılmış aralığın hücrelerinin içeriğini görüntülemek için, Change olayını kullanacağız:

 Özel Alt ComboBox1_Change () 'Combobox bölümü Kullanıcı ComboBox1 içeriğini sildiğinde oluşan hatadan kaçının ComboBox1.Value = "" Sonra ComboBox2.Clear ComboBox3.Clear ComboBox2.List = Application.Transpose (RangeRange)) End Alt 

Üçüncü açılan kutu için:

 Özel Alt ComboBox2_Change () 'Combobox ComboBox2.Value = "", sonra ComboBox3.Clear ComboBox3.List = Application.Transpose (Range (NomRange)) End Sub komutundan çıkar. 

Yaygın hatalar

Adsız Aralık

ComboBox’a girilen ad hiçbir çalışma kitabı adıyla eşleşmiyor. Bu, isim tanımlanmadığında olur. Bu sorunu aşmak için çalışma kitabının tüm isimlerini dolaşmak için küçük bir fonksiyon yaratacağız:

 İşlev NomDefini (Dize Olarak Nominal) Boolean Dim Olarak Nominal Adı Ad Olarak NomDefini = False Bu Kitabın Her Nominalinde. Nominal İsimler = Nom Sonra NomDefini = Doğru: Çıkış Fonksiyonu Sonraki Nominal End Fonksiyonu 

Veri hatası

Örnek dosyada fark edeceğiniz gibi, adların tanımlanması özel karakterleri veya boşlukları dikkate almaz. Bazı durumlarda değişkenleri düzenlemeniz gerekebilir:

İşte bir örnek:

 İşlev CaracSpec (Dize Olarak Nom) Dize Olarak CaracSpec = Değiştir (Nom, "", "_") CaracSpec = Değiştir (CaracSpec, "-", "_") İşlev Sonu 

Tamamlanan kod

 Seçenek Açık Özel Alt UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (Range ("Dep")) ComboBox2.Clear ComboBox3.Clear Bitiş Özel Alt ComboBox1_Change () 'Combobox département Eğer ComboBox1.Value = "Sonra" ComboBox Alt ComboBox2.Clear ComboBox3.Clear Dim NomRange Dize Olarak NomRange = CaracSpec (ComboBox1.Value) NomDefini (NomRange) Öyleyse ComboBox2.List = Application.Transpose (RangeRuange)) Diğer ComboBox2.AddItem End Sub Altında Özel Alt ComboBox2_Change () 'ComboBox ComboBox2.Value = "" ise ComboBox haberleşir. Sonra ComboBox3.Clear Dim NomRange Dize Olarak Çıkın NomRange = CaracSpec (ComboBox2.Value) Eğer NomDefini (NomRange) Sonra ComboBox2.Value ise (Aralık (NomRange)) Başka ComboBox3.AddItem "" "Aucune rue" "" End Alt İşlev Bitişi Varsa Bitiş Alt İşlev NomDefini (Dize Olarak Nominal) Boolean Dim Nominalleri Adı Olarak NomDefini = Bu Dizindeki Her Nomin Sayısı İçin Yanlış. Noms.Name = Nom Sonra NomDefini = Doğru: Çıkış Fonksiyonu Sonraki Noms End Fonksiyonu Fonksiyonu Carac Spec (String Olarak Nom) String String olarak CaracSpec = Değiştir (Nom, "", "_") CaracSpec = Değiştir (CaracSpec, "-", "_") Son İşlev 

İndirme linki

Bu bağlantıdaki örnek sayfayı indirin: //cjoint.com/?DHhootCLYVh

VBA - Bir kullanıcı formunda basamaklı bir açılır kutu nasıl oluşturulur

Giriş

Bu makalede, Dolaylı yöntemi kullanarak bir basamaklı açılır kutuyu nasıl dolduracağınızı öğreneceksiniz.

Ön şartlar

  • 1 çalışma kitabı
  • 1 UserForm
  • 3 açılır kutu.

Ayrıca örnek bir çalışma kitabını buradan indirebilirsiniz: //cjoint.com/14au/DHhootCLYVh.htm

Excel altında adları yönetme

Excel çalışma kitabındaki adları tanımlamak için aşağıdakilerden birini yapabilirsiniz:
  • Excel 2007 veya önceki bir sürüm: Ekle> Adlar> Tanımla.
  • Excel 2010'dan itibaren: Şerit formülleri> Bir ad tanımlayın.

Açılan kutunun kodu

Aşağıdakilerin olmasını istiyoruz:
  • UserForm yüklendikten sonra ComboBox1 doldurulur.
  • Diğer birleşik giriş kutuları, birincisinin değerlerine göre doldurulur.

İlk listeyi doldurmak

Açılan bir kutuyu çalışma kitabının adlandırılmış aralığının içeriğiyle doldurmak için sözdizimi şöyledir:
  • ComboBox1.List = Application.Transpose (Range ("monNom"))

ComboBox'ı temizlemek için:

  • Combobox1.Clear

UserForm yüklemesinde ilk açılır listeyi doldurma kodunu bize veren:

 Özel Alt UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (Range ("Dep")) ComboBox2.Clear ComboBox3.Clear Bitiş Sub 

2. listenin doldurulması

İlk aşağı açılan listede bir değer seçildiğinde, (ComboBox'ta gösterilen metin) çalışma kitabı adına karşılık gelir.

Adlandırılmış aralığın hücrelerinin içeriğini görüntülemek için, Change olayını kullanacağız:

 Özel Alt ComboBox1_Change () 'Combobox bölümü Kullanıcı ComboBox1 içeriğini sildiğinde oluşan hatadan kaçının ComboBox1.Value = "" Sonra ComboBox2.Clear ComboBox3.Clear ComboBox2.List = Application.Transpose (RangeRange)) End Alt 

Üçüncü açılan kutu için:

 Özel Alt ComboBox2_Change () 'Combobox ComboBox2.Value = "", sonra ComboBox3.Clear ComboBox3.List = Application.Transpose (Range (NomRange)) End Sub komutundan çıkar. 

Yaygın hatalar

Adsız Aralık

ComboBox'ta girilen ad, henüz tanımlanmadığı için hiçbir çalışma kitabı adıyla eşleşmiyor. Bu sorunu aşmak için küçük bir işlev yaratacağız. Onun

rolü, çalışma kitabının tüm isimleri arasında dolaşmaktır:

 İşlev NomDefini (Dize Olarak Nominal) Boolean Dim Olarak Nominal Adı Ad Olarak NomDefini = False Bu Kitabın Her Nominalinde. Nominal İsimler = Nom Sonra NomDefini = Doğru: Çıkış Fonksiyonu Sonraki Nominal End Fonksiyonu 

Veri hatası

Örnek dosyada fark edeceğiniz gibi, adların tanımlanması özel karakterleri veya boşlukları dikkate almaz. Bazı durumlarda, değişkeni düzenlemeniz gerekebilir:

İşte bir örnek:

 İşlev CaracSpec (Dize Olarak Nom) Dize Olarak CaracSpec = Değiştir (Nom, "", "_") CaracSpec = Değiştir (CaracSpec, "-", "_") İşlev Sonu 

Tamamlanan kod

 Seçenek Açık Özel Alt UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (Range ("Dep")) ComboBox2.Clear ComboBox3.Clear Bitiş Özel Alt ComboBox1_Change () 'Combobox département Eğer ComboBox1.Value = "Sonra" ComboBox Alt ComboBox2.Clear ComboBox3.Clear Dim NomRange Dize Olarak NomRange = CaracSpec (ComboBox1.Value) NomDefini (NomRange) Öyleyse ComboBox2.List = Application.Transpose (RangeRuange)) Diğer ComboBox2.AddItem End Sub Altında Özel Alt ComboBox2_Change () 'ComboBox ComboBox2.Value = "" ise ComboBox haberleşir. Sonra ComboBox3.Clear Dim NomRange Dize Olarak Çıkın NomRange = CaracSpec (ComboBox2.Value) Eğer NomDefini (NomRange) Sonra ComboBox2.Value ise (Aralık (NomRange)) Başka ComboBox3.AddItem "" "Aucune rue" "" End Alt İşlev Bitişi Varsa Bitiş Alt İşlev NomDefini (Dize Olarak Nominal) Boolean Dim Nominalleri Adı Olarak NomDefini = Bu Dizindeki Her Nomin Sayısı İçin Yanlış. Noms.Name = Nom Sonra NomDefini = Doğru: Çıkış Fonksiyonu Sonraki Noms End Fonksiyonu Fonksiyonu Carac Spec (String Olarak Nom) String String olarak CaracSpec = Değiştir (Nom, "", "_") CaracSpec = Değiştir (CaracSpec, "-", "_") Son İşlev 

İndirme linki

Bu bağlantıdaki örnek sayfayı indirin: //cjoint.com/?DHhootCLYVh
Önceki Makale Sonraki Makale

En Ipuçları