23. juni 2010 - 15:07Der er
6 kommentarer og 1 løsning
Flere afhængige dropdown menuer
Jeg arbejder på et ark hvor jeg skal bruge flere (lige nu 4) afhængige dropdown menuer. Først lavede jeg det med =INDIREKTE(liste navn) dropdowns. Men da nogle af under menuerne har samme titel kom det ikke til at virke. Så har jeg været ved at lave det med =SAMMENLIGN og FORSKYDNING funktioner. Men der er det et problem at forskyde matrixen så den passser. Er den en der har en god ide til en løsning, evt med noget VB.
Opbygningen af arket med opslags data er sådan (ikke rigtig indhold)
A B C D E F 1 Butik | Frugt | Æble | Rød | Grøn | Gul | 2 | Pære | Rund | Lang | 3 | Drue | Sød | Sur | 4 | Slik |Bonbon| Pind | Pose | 5 |Haribo| Pose | Pakke | 6 Lager | Frugt | Æble | Rød | Gul | 7 | Pære | Rund| Lang | Sød | 8 | Drue | Sød | Sur | Grøn| Blå | 9 | Slik |Bonbon| Pind| Pose | Pakke| 10 |Haribo| Pose| Pakke| Kasse|
Så skal jeg bruge en Drop Til kolonne A En dropdown til B en til C Og en sidste til kolonner der står noget i udfra det valg man er nået frem til. Hvis man vælger 1. "LAGER" 2. "SLIK" 3. "HARIBO" så skal man i den sidste kunne vælge "POSE" "PAKKE" "KASSE"
Jeg er ikke sikker på dette er en nem opgave så den gir 150 Point.
Vba-kode i Userform - en listbox viser de udført valg:
Dim ddTabel(4, 3) As Integer Dim errorData As Worksheet, inputData As Worksheet
Dim niveauNr As Byte, maxRæk As Integer, maxKol As Integer, maxNiveau As Byte Dim kol As Integer, rækStart As Integer, rækSlut As Integer Dim niveauTekst As String, spinFlag As Boolean Private Sub SpinButton1_spinUp() If niveauNr + 1 <= 4 Then niveauNr = niveauNr + 1 spinResult
ajfLabel niveauNr, Me.ListBox1.List(ddTabel(niveauNr, 1)) End If End Sub Private Sub SpinButton1_spinDown() If niveauNr - 1 >= 1 Then ajfLabel niveauNr, ""
niveauNr = niveauNr - 1 spinResult End If End Sub Private Sub spinResult() rækStart = ddTabel(niveauNr, 2) rækSlut = ddTabel(niveauNr, 3)
If rækStart > 0 And rækSlut > 0 Then visNiveau niveauNr
Me.ListBox1.ListIndex = ddTabel(niveauNr, 1) End If End Sub Private Sub UserForm_activate() Set inputData = ActiveWorkbook.Sheets("Input") Set errorData = ActiveWorkbook.Sheets("Error Data")
maxNiveau = 0
With errorData maxRæk = .Cells(1, 1).SpecialCells(xlLastCell).Row maxKol = .Cells(1, 1).SpecialCells(xlLastCell).Column End With
niveauNr = 1 rækStart = 2 rækSlut = maxRæk
visNiveau niveauNr End Sub Private Sub visNiveau(nr) Dim ræk As Integer, kol As Integer, tekst As String Me.ListBox1.Clear
Rem Valg-mulighed i kolonnen If nr >= 1 And nr <= 3 Then kol = nr Me.ListBox1.Clear
For ræk = rækStart To rækSlut If Trim(errorData.Cells(ræk, kol)) <> "" Then Me.ListBox1.AddItem errorData.Cells(ræk, kol) End If Next ræk Else Rem Valg-mulighed i rækken If niveauNr = 4 And rækStart > 0 Then Me.ListBox1.Clear
For kol = niveauNr To maxKol If Trim(errorData.Cells(rækStart, kol)) <> "" Then Me.ListBox1.AddItem errorData.Cells(rækStart, kol) End If Next kol End If End If
Me.ListBox1.ListIndex = -1 End Sub Private Sub ListBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If Me.ListBox1.ListIndex <> -1 Then niveauTekst = Me.ListBox1 ddTabel(niveauNr, 1) = Me.ListBox1.ListIndex ddTabel(niveauNr, 2) = rækStart ddTabel(niveauNr, 3) = rækSlut
ajfLabel niveauNr, niveauTekst
If niveauNr > 0 And niveauNr < 4 Then findRækNr niveauTekst
niveauNr = niveauNr + 1 If niveauNr > maxNiveau Then maxNiveau = niveauNr End If
visNiveau niveauNr End If End If End Sub Private Sub findRækNr(tekst) Dim område As String, r As Integer område = Chr(64 + niveauNr) & CStr(rækStart) & ":" & Chr(64 + niveauNr) & CStr(rækSlut) With errorData.Range(område) Set c = .Find(tekst, LookIn:=xlValues, LookAt:=xlWhole) If Not c Is Nothing Then rækStart = c.Row rækSlut = maxRæk
For r = rækStart + 1 To maxRæk If Range(Chr(64 + niveauNr) & CStr(r)) <> "" Then rækSlut = r - 1 Exit For End If Next r Else rækStart = 0 End If End With End Sub Private Sub ajfLabel(nr, indhold) Dim cc As Control Set cc = UserForm1.Controls("Label" & CStr(nr)) cc.Caption = indhold End Sub
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.