• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

VBA Userform afhankelijke dropdown lijsten

Status
Niet open voor verdere reacties.

cerberas

Nieuwe gebruiker
Lid geworden
7 sep 2009
Berichten
4
Hallo iedereen,

Voor mijn werk ben ik momenteel bezig om een excel-progje te schrijven waarmee een magazijnier een bepaald stuk kan uitboeken. Die persoon moet oa kunnen ingeven voor welke lijn-deellijn-etc dat stuk nodig is.

In de voorbeeldfile zijn er 3 lijnen die elke een aantal deellijnen hebben en de deellijnen van één van de 3 machines hebben nog eens een extra onderverdeling (deeldeellijnen). Het feit dat één lijn nog een niveau dieper gaat dan de andere twee zorgt voor heel wat problemen (errors).

Ik vraag me af wat de beste methode is om dit probleem te verhelpen. Zelf had ik al gedacht om eventueel een extra niveau toe te voegen aan die twee andere lijnen met slechts één keuzemogelijkheid (vb. "ok") maar dit is niet echt een mooie oplossing.

Ik heb het zo bondig mogelijk proberen te verwoorden dus als iets niet duidelijk zou zijn kan ik nog wat extra uitleg geven. In bijlage vinden jullie de bewuste file.

Hopend op een antwoord.

mvg

Pieterjan
 

Bijlagen

Welkom op het forum
Ik heb er vlug naar gekeken ( moet terug aan 't werk ) bekijk het eens .
 

Bijlagen

Laatst bewerkt:
heb mijn vraag wrs niet goed geformuleerd, bedankt om die error eruit te halen maar op die manier kan er wel foute data gegeven worden

vb DEVAC5-DEVAC51-DEVAC412 terwijl dat laatste enkel zou mogen bereikt worden als ervoor DEVAC4 en DEVAC41 zouden staan. Mijn vraag is dus of het mogelijk is om te zorgen dat als ik vb DEVAC5 en DEVAC6 eerst selecteer het vak deeldeellijn zou verdwijnen of op een default waarde komt te staan. Op die manier zou ik dus één lijn hebben die twee niveaus dieper gaat en de andere twee één niveau. Het is dus niet de bedoeling dat ik de waardes horend bij de eerste lijn op het diepste niveau bij de andere kan invullen.

mvg
 
Je zult eerst het blad 'lijsten' beter moeten inrichten.

In de bijlage een simpele oplossing met 1 combobox.
Hier de code in het userform:

Code:
Private Sub UserForm_Initialize()
    sq = [lijsten!A1].CurrentRegion
    with boxlijn
       .List = sq
       .ColumnCount = UBound(sq, 2) + 1
       .ColumnWidths = "90;0" & Replace(String(UBound(sq, 2), ";"), ";", ";0")
       For j = 1 To UBound(sq, 2)
          .Tag = .Tag & "|" & sq(1, j)
       Next
    End With
End Sub

Private Sub boxlijn_Change()
  With boxlijn
    If .Enabled Then
      sn = Split("0" & Replace(String(UBound(.List, 2), ";"), ";", ";0"), ";")
      If InStr(.Tag, .Text) > 0 Then
        .Enabled = False

        sn(UBound(Split(Left(.Tag, InStr(.Tag, "|" & .Text & "|")), "|")) - 1) = 90
        .ColumnWidths = Join(sn, ";")
        .ListIndex = -1
        .Enabled = True
      End If
    End If
  End With
End Sub

Private Sub knop_einde_Click()
    Hide
End Sub
 

Bijlagen

Laatst bewerkt:
Bedankt voor het antwoord maar op die manier zal het volgens mij te moeilijk worden voor de techniekers om de gegevens in te geven, ik wil graag dat ze alle daarboven ingevoerde keuzes kunnen zien (want in het echt is het vb niet DEVAC4-DEVAC41-DEVAC412).

Ik moet ook eerlijk toegeven dat die code net iets te ingewikkeld is voor mij. Ik snap het ongeveer maar zie niet direct in hoe ik dan via een extra knop het 'pad' kan wegschrijven.
 
Bijvoorbeeld.

Code:
Private Sub Knop_vervolg_Click()
  With boxlijn
     x=UBound(Split(Left(.ColumnWidths, InStr(.ColumnWidths, "90")), ";"))
     c0 = .List(0,x) & "\" & .Text
     For j = x - 1 To 0 Step -1
       For jj = 0 To UBound(.List)
         If .List(jj, j) = .List(0, x) Then
           If .List(0, j) <> "" Then c0 = .List(0, j) & "\" & c0
           Exit For
        End If
      Next
   Next
  End with
[COLOR="Blue"]  Msgbox c0[/COLOR]
End Sub
 
Laatst bewerkt:
Wat zou die code moeten doen? want bij mij doet het voorlopig niets, ook niet als ik End With er nog bij zet

mvg
 
Die zet in variabele c0 alle keuzen die je gemaakt hebt:

DEVAC4/DEVAC43/DEVAC432

zie de vorige, uitgebreide code
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan