VBA - Πώς να δημιουργήσετε ένα cascading σύνθετο πλαίσιο σε μια userform

VBA - Πώς να δημιουργήσετε ένα cascading σύνθετο πλαίσιο σε μια userform

Εισαγωγή

Σε αυτό το άρθρο θα μάθετε πώς να γεμίσετε ένα διαδοχικό κουτί συνδυασμού χρησιμοποιώντας την μέθοδο έμμεσης.

Προϋποθέσεις

  • 1 βιβλίο εργασίας
  • 1 UserForm
  • 3 combobox.

Μπορείτε επίσης να κατεβάσετε ένα δείγμα βιβλίου εργασίας εδώ: //cjoint.com/14au/DHhootCLYVh.htm

Διαχείριση ονομάτων κάτω από το Excel

Για να ορίσετε ονόματα σε ένα βιβλίο εργασίας του Excel, μπορείτε είτε:
  • Excel 2007 ή παλαιότερη έκδοση: Εισαγωγή> Ονόματα> Ορισμός .
  • Από το Excel 2010: Τύποι κορδέλας> Ορίστε ένα όνομα.

Ο κωδικός για το combobox

Θέλουμε να συμβούν τα εξής:
  • Κατά τη φόρτωση του UserForm, θα συμπληρωθεί το ComboBox1.
  • Τα άλλα σύνθετα πλαίσια θα συμπληρωθούν με βάση τις τιμές του πρώτου.

Συμπλήρωση της πρώτης λίστας

Για να συμπληρώσετε ένα σύνθετο πλαίσιο με τα περιεχόμενα μιας ονομαστικής περιοχής του βιβλίου εργασίας, η σύνταξη είναι:
  • ComboBox1.List = Application.Transpose (Εύρος ("monNom"))

Για να καταργήσετε το ComboBox:

  • Combobox1.Clear

Τι μας δίνει τον κώδικα για την πλήρωση της πρώτης λίστας με την κατάρρευση κατά τη φόρτωση του UserForm:

 Private Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose ("Dep")) ComboBox2.Clear ComboBox3.Clear End Sub 

Συμπλήρωση της 2ης λίστας

Όταν επιλεγεί μια τιμή στην πρώτη αναπτυσσόμενη λίστα, το κείμενο (που εμφανίζεται στο ComboBox) αντιστοιχεί σε ένα όνομα βιβλίου εργασίας.

Για να εμφανίσετε τα περιεχόμενα των κελιών του εύρους που ονομάζεται, θα χρησιμοποιήσουμε το συμβάν Αλλαγή:

 Private Sub ComboBox1_Change () 'Combobox département Αποφύγετε το σφάλμα που δημιουργείται όταν ένας χρήστης διαγράψει το περιεχόμενο του ComboBox1 Αν ComboBox1.Value = "" Έπειτα Exit Sub ComboBox2.Clear ComboBox3.Clear ComboBox2.List = Εφαρμογή. Μεταφορά (Εύρος (NomRange)) Τέλος Υπο 

Για το τρίτο σύνθετο πλαίσιο:

 Ιδιωτική Sub ComboBox2_Change () 'Κοινότητες Combobox Αν ComboBox2.Value = "" Κατόπιν Έξοδος Sub ComboBox3.Clear ComboBox3.List = Application.Transpose (Range (NomRange)) End Sub 

Κοινά σφάλματα

Ανώνυμη περιοχή

Το όνομα που εισάγεται στο ComboBox δεν αντιστοιχεί σε κανένα όνομα του βιβλίου εργασίας. Αυτό συμβαίνει όταν το όνομα δεν έχει οριστεί. Για να παρακάμψουμε αυτό το πρόβλημα, θα δημιουργήσουμε μια μικρή συνάρτηση για να βρούμε όλα τα ονόματα του βιβλίου εργασίας:

 Λειτουργία NomDefini (Nom ως συμβολοσειρά) Ως Boolean Dim Noms ως όνομα NomDefini = False για κάθε Noms σε ThisWorkbook.Names Αν Noms.Name = Nom Στη συνέχεια NomDefini = True: Έξοδος Λειτουργία Επόμενο Noms End Λειτουργία 

Σφάλμα εισόδου

Όπως θα παρατηρήσετε στο αρχείο δείγματος, ο ορισμός ονομάτων δεν λαμβάνει υπόψη ειδικούς χαρακτήρες ή κενά. Σε ορισμένες περιπτώσεις, ίσως χρειαστεί να επεξεργαστείτε τις μεταβλητές:

Ακολουθεί ένα παράδειγμα:

 Λειτουργία CaracSpec (Nom ως String) ως String CaracSpec = Αντικατάσταση (Nom, "", "_") CaracSpec = Αντικατάσταση (CaracSpec, "-", "_") 

Ο ολοκληρωμένος κώδικας

 Επιλογή ComboBox1.Clear ComboBox1.List = Application.Transpose ("Dep")) ComboBox2.Clear ComboBox3.Clear End Sub Ιδιωτική Sub ComboBox1_Change () 'ComboBox1.Value = "" Έπειτα Έξοδος Sub ComboBox2.Clear ComboBox3.Clear Dim NomRange ως String NomRange = CaracSpec (ComboBox1.Value) Αν NomDefini (NomRange) Στη συνέχεια ComboBox2.List = Application.Transpose (Range (NomRange)) Άλλο ComboBox2.AddItem "" "Aucune commune" "" (ComboBox2.Value) Εάν NomDefini (NomRange) Στη συνέχεια, ComboBox3.List = Application.Transpose (), τότε το ComboBox2.Value = "" (NomRange)) Άλλο ComboBox3.AddItem "" "Aucune rue" "" Τέλος Αν Λειτουργία End Sub NomDefini (Nom ως String) Ως Boolean Dim Noms Ως Όνομα NomDefini = Λάθος για κάθε Noms Σε ThisWorkbook.Names Εάν Noms.Name = Nom Στη συνέχεια NomDefini = True: Έξοδος Λειτουργία Επόμενο Noms End Λειτουργία Λειτουργία Carac Spec (Nom ως String) Ως String CaracSpec = Αντικατάσταση (Nom, "", "_") CaracSpec = Αντικατάσταση (CaracSpec, "-", "_") 

Λήψη συνδέσμου

Κάντε λήψη του φύλλου δειγμάτων σε αυτόν τον σύνδεσμο: //cjoint.com/?DHhootCLYVh

VBA - Πώς να δημιουργήσετε ένα cascading σύνθετο πλαίσιο σε μια userform

Εισαγωγή

Σε αυτό το άρθρο θα μάθετε πώς να γεμίσετε ένα διαδοχικό κουτί συνδυασμού χρησιμοποιώντας την μέθοδο έμμεσης.

Προϋποθέσεις

  • 1 βιβλίο εργασίας
  • 1 UserForm
  • 3 combobox.

Μπορείτε επίσης να κατεβάσετε ένα δείγμα βιβλίου εργασίας εδώ: //cjoint.com/14au/DHhootCLYVh.htm

Διαχείριση ονομάτων κάτω από το Excel

Για να ορίσετε ονόματα σε ένα βιβλίο εργασίας του Excel, μπορείτε είτε:
  • Excel 2007 ή παλαιότερη έκδοση: Εισαγωγή> Ονόματα> Ορισμός.
  • Από το Excel 2010: Τύποι κορδέλας> Ορίστε ένα όνομα.

Ο κωδικός για το combobox

Θέλουμε να συμβούν τα εξής:
  • Κατά τη φόρτωση του UserForm, θα συμπληρωθεί το ComboBox1.
  • Τα άλλα σύνθετα πλαίσια θα συμπληρωθούν με βάση τις τιμές του πρώτου.

Συμπλήρωση της πρώτης λίστας

Για να συμπληρώσετε ένα σύνθετο πλαίσιο με τα περιεχόμενα μιας ονομαστικής περιοχής του βιβλίου εργασίας, η σύνταξη είναι:
  • ComboBox1.List = Application.Transpose (Εύρος ("monNom"))

Για να καταργήσετε το ComboBox:

  • Combobox1.Clear

Τι μας δίνει τον κώδικα για την πλήρωση της πρώτης λίστας με την κατάρρευση κατά τη φόρτωση του UserForm:

 Private Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose ("Dep")) ComboBox2.Clear ComboBox3.Clear End Sub 

Συμπλήρωση της 2ης λίστας

Όταν επιλεγεί μια τιμή στην πρώτη αναπτυσσόμενη λίστα, θα (το κείμενο που εμφανίζεται στο ComboBox) αντιστοιχεί σε ένα όνομα βιβλίου εργασίας.

Για να εμφανίσετε τα περιεχόμενα των κελιών του εύρους που ονομάζεται, θα χρησιμοποιήσουμε το συμβάν Αλλαγή:

 Private Sub ComboBox1_Change () 'Combobox département Αποφύγετε το σφάλμα που δημιουργείται όταν ένας χρήστης διαγράψει το περιεχόμενο του ComboBox1 Αν ComboBox1.Value = "" Έπειτα Exit Sub ComboBox2.Clear ComboBox3.Clear ComboBox2.List = Εφαρμογή. Μεταφορά (Εύρος (NomRange)) Τέλος Υπο 

Για το τρίτο σύνθετο πλαίσιο:

 Ιδιωτική Sub ComboBox2_Change () 'Κοινότητες Combobox Αν ComboBox2.Value = "" Κατόπιν Έξοδος Sub ComboBox3.Clear ComboBox3.List = Application.Transpose (Range (NomRange)) End Sub 

Κοινά σφάλματα

Ανώνυμη περιοχή

Το όνομα που εισάγεται στο ComboBox δεν ταιριάζει με κανένα όνομα του βιβλίου εργασίας, επειδή δεν έχει οριστεί ακόμα. Για να παρακάμψουμε αυτό το πρόβλημα, θα δημιουργήσουμε μια μικρή λειτουργία. Του

ο ρόλος είναι να βρεθούν όλα τα ονόματα του βιβλίου εργασίας:

 Λειτουργία NomDefini (Nom ως συμβολοσειρά) Ως Boolean Dim Noms ως όνομα NomDefini = False για κάθε Noms σε ThisWorkbook.Names Αν Noms.Name = Nom Στη συνέχεια NomDefini = True: Έξοδος Λειτουργία Επόμενο Noms End Λειτουργία 

Σφάλμα εισόδου

Όπως θα παρατηρήσετε στο αρχείο δείγματος, ο ορισμός ονομάτων δεν λαμβάνει υπόψη ειδικούς χαρακτήρες ή κενά. Σε ορισμένες περιπτώσεις, ίσως χρειαστεί να επεξεργαστείτε τη μεταβλητή:

Ακολουθεί ένα παράδειγμα:

 Λειτουργία CaracSpec (Nom ως String) ως String CaracSpec = Αντικατάσταση (Nom, "", "_") CaracSpec = Αντικατάσταση (CaracSpec, "-", "_") 

Ο ολοκληρωμένος κώδικας

 Επιλογή ComboBox1.Clear ComboBox1.List = Application.Transpose ("Dep")) ComboBox2.Clear ComboBox3.Clear End Sub Ιδιωτική Sub ComboBox1_Change () 'ComboBox1.Value = "" Έπειτα Έξοδος Sub ComboBox2.Clear ComboBox3.Clear Dim NomRange ως String NomRange = CaracSpec (ComboBox1.Value) Αν NomDefini (NomRange) Στη συνέχεια ComboBox2.List = Application.Transpose (Range (NomRange)) Άλλο ComboBox2.AddItem "" "Aucune commune" "" (ComboBox2.Value) Εάν NomDefini (NomRange) Στη συνέχεια, ComboBox3.List = Application.Transpose (), τότε το ComboBox2.Value = "" (NomRange)) Άλλο ComboBox3.AddItem "" "Aucune rue" "" Τέλος Αν Λειτουργία End Sub NomDefini (Nom ως String) Ως Boolean Dim Noms Ως Όνομα NomDefini = Λάθος για κάθε Noms Σε ThisWorkbook.Names Εάν Noms.Name = Nom Στη συνέχεια NomDefini = True: Έξοδος Λειτουργία Επόμενο Noms End Λειτουργία Λειτουργία Carac Spec (Nom ως String) Ως String CaracSpec = Αντικατάσταση (Nom, "", "_") CaracSpec = Αντικατάσταση (CaracSpec, "-", "_") 

Λήψη συνδέσμου

Κάντε λήψη του φύλλου δειγμάτων σε αυτόν τον σύνδεσμο: //cjoint.com/?DHhootCLYVh
Προηγούμενο Άρθρο Επόμενο Άρθρο

Οι Καλύτερες Συμβουλές