Combo box dinamic in form

RAMBO
Mesaje: 414
Membru din: Mie Noi 25, 2009 2:17 pm
Localitate: Pitesti

Combo box dinamic in form

Mesaj de RAMBO » Mar Iul 24, 2018 12:54 pm

Buna ziua.
Fie fisierul productie v 001.
In sheet Nomenclatoare sunt 2 tabele ce reprezinta nomenclatoare. Tabelul operatii are coloana Categorie. Fizsiderul are un mic form (stadiu incipient) ce doua comboboxuri (goale deocamdata). Ideea este ca userul sa selecteze categoria din comboul Categorie operatii, si in functie de categoria selectata, sa se populeze lista din comboul urmator, Denumire operatie. Stiu sa fac asta intr-o foaie excel, dar nu si in form, daca acest lucru o fii posibil after all.
NOTA: daca pentru rezolvare este necesara ceva schimbare/adaugare structura date, nu e problema.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

TudyBTH
Moderator
Moderator
Mesaje: 905
Membru din: Joi Feb 11, 2016 2:12 pm
Localitate: Cluj Napoca

Re: Combo box dinamic in form

Mesaj de TudyBTH » Mar Iul 24, 2018 1:42 pm

Buna,

La initializarea formei se incarca combo1 cu denumirile unice din tabel. Se foloseste un dictionar pentru a exclude duplicatele
La evenimentul combo1 change se incarca combo2
Codul este in modulul formei

Cod: Selectaţi tot

Private Sub ComboBox1_Change()
    LoadCombo2
End Sub

Private Sub UserForm_Initialize()
    Dim tbl As ListObject
    Dim dict As Object
    Dim i As Long
    Dim categ As String
    
    Set dict = CreateObject("Scripting.Dictionary")
    Set tbl = ThisWorkbook.Sheets("Nomenclatoare").ListObjects("Operatii")
    For i = 1 To tbl.ListRows.Count
        categ = tbl.ListColumns("Categorie").DataBodyRange(i).Value
        If Len(categ) > 0 And Not dict.exists(categ) Then
            dict.Add categ, 0
            Me.ComboBox1.AddItem tbl.ListColumns("Categorie").DataBodyRange(i).Value
        End If
    Next i
End Sub

Private Sub LoadCombo2()
    Dim tbl As ListObject
    Dim i As Long
    Dim den As String
    
    Me.ComboBox2.Clear
    
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Set tbl = ThisWorkbook.Sheets("Nomenclatoare").ListObjects("Operatii")
    For i = 1 To tbl.ListRows.Count
        den = tbl.ListColumns("Denumire operatie").DataBodyRange(i).Value
        If Len(den) > 0 And tbl.ListColumns("Categorie").DataBodyRange(i).Value = Me.ComboBox1 Then Me.ComboBox2.AddItem den
    Next i
End Sub
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Am invatat sa inotam in apa, ca pestii
Am invatat sa zburam in aer, ca pasarile
A ramas doar sa invatam sa traim pe Pamant, ca Oamenii.

RAMBO
Mesaje: 414
Membru din: Mie Noi 25, 2009 2:17 pm
Localitate: Pitesti

Re: Combo box dinamic in form

Mesaj de RAMBO » Mar Iul 24, 2018 9:13 pm

Merge perfect.
Multumesc.

Scrie răspuns

Înapoi la “Visual Basic for Application (VBA) cu Excel - Intrebari tehnice”