Afhankelijke combobox userform word

Status
Niet open voor verdere reacties.

maomanna

Gebruiker
Lid geworden
20 feb 2014
Berichten
234
hallo allen,

Momenteel ben ik bezig om een userform te maken met twee afhankelijke combobox.
in combobox 1 selecteer je de divisie
in combobox 2 kan je de afdeling kiezen die onder de divisie hangt.

dus:
div 1 - afd a
div 1 - afd b
div 1 - afd c
div 2 - afd a
div 2 - afd b
etc etc.

Ik heb niet de mogelijkheid om een koppeling te maken naar een ander bestand, vandaar dat het met een vba code moet.

nu heb ik http://www.helpmij.nl/forum/showthread.php/880067-Invoervelden-word?highlight=keuzelijst gevonden, en http://gregmaxey.mvps.org/word_tip_pages/populate_userform_listbox_or_combobox.html

Iets met Case heb ik voorbij zien komen, maar begrijp het niet.
Morgen zal ik voorbeeld uploaden.
 
Lijkt me een goed plan :). Heel lastig is het namelijk niet vermoed ik.
 
En waar staat de informatie die je in keuzelijst 2 wilt hebben?
 
Dat is een beetje het probleem. Ik weet niet waar of hoe dat moet.
De meeste handleidingen gaan ervan uit dat je een extern bestand hebt waar dat in staat, bijv excel of access.

Hoe bepaal ik dat afd 1 bij div1 hoort?
In totaal hebben we ong 20 divisies en meer dan 560 afdelingen.

Ik was al blij dat ik de de eerste listBox kon vullen.
 
Da's een hoop typen:
Code:
Private Sub ListBox1_Click()
Dim myArray() As String
    Select Case ListBox1
        Case "AL"
            myArray = Split("Algemene zaken|Algemene onbenullen|Algemene Antizaken|Algemene overbodigheden", "|")
        Case "AK"
            myArray = Split("Type 47|Type 47 Advanced|Type 53|Type 57", "|")
        Case "AZ"
            myArray = Split("Voetbalclub|Zakenbank|Foute directeur|Excelsior uit, altijd lastig", "|")
        Case "AR"
            myArray = Split("Anti=Reuma|Anti-Rome|Anti-Rudolf the Red Nose Reindeer|Anti Rest", "|")
        Case "CA"
            myArray = Split("Ongeveer|Zo'n beetje|Van alles wat|Net niks", "|")
        Case "CO"
            myArray = Split("Samen doen|Samen werken|Samen een baan|Adriaanse", "|")
        Case "CT"
            myArray = Split("Scan|Plaatje|Afbeelding|liever niet", "|")
        Case "DE"
            myArray = Split("Het|Een|weet niet", "|")
        Case "DC"
            myArray = Split("Washington|Amerika|Witte Huis|Monument", "|")
    Case Else
            myArray = Split("Vul maar in|Kies maar|kan van alles zijn|Toch?", "|")
    End Select
    ListBox2.List = myArray

End Sub
 
Top! nu snap ik hoe het moet!

het is simpeler dan verwacht!
Dank.

Nu nog even uitzoeken hoe ik de docvariable erin krijg. Door het toevoegen van ListBox1, blijft hij leeg/foutmelding (Fout! De documentvariabele ontbreekt.)

Moet ik de list omzetten naar een tekst?
 
Het is leuk dat je denkt dat als je een combobox de naam geeft van een listbox, het ook een listbox wordt. Maar zo werkt het natuurlijk niet; Shakespeare zei het al: "A rose by any other name is still a rose".
Code:
    For Each ct In Controls
        If TypeName(ct) = "TextBox" Then ActiveDocument.Variables(ct.Name) = IIf(ct.Text = "", " ", ct.Text)
        If TypeName(ct) = "ComboBox" Then ActiveDocument.Variables(ct.Name) = IIf(ct.Text = "", " ", ct.Text)
        If TypeName(ct) = "CheckBox" Then ActiveDocument.Variables(ct.Name) = IIf(ct.Value = 0, 0, 1)
    Next
 
Typename = "textbox" is dan hoe het veld in het word bestand benoemd moet zijn?
 
Nee, dat niet. een TypeName is de type aanduiding van het object. Kijk maar in de Eigenschappen van je formulier; als je daar een 'listbox' aanklikt (Je hebt er 2 benoemd: listbox1 en listbox2) dan zie je in de Eigenschappen staan dat het echt wel comboboxen zijn. Achter de naam Listbox1 in vet staat: Combobox. En dat klopt natuurlijk ook; je hebt uit de gereedschapset gewoon een combobox gesleept. Geen Listbox. De naam gebruik je dan weer in je document. Je zal ongetwijfeld een hele goede reden hebben gehad om de standaardnaam Combobox1 te veranderen in Listbox1, zodat je de eerstvolgende échte listbox geen Listbox1 meer kan noemen, maar mij ontgaat die redenatie eerlijk gezegd een beetje :).
 
Het zal aan mij liggen, maar krijg het niet voor elkaar.

Hij blijft de foutmelding geven.

obv je laatste bericht heb ik de namen aangepast naar cboDiv en cboAfd.

Code:
        If TypeName(ct) = "cboDiv" Then ActiveDocument.Variables(ct.Name) = IIf(ct.Text = "", " ", ct.Text)
        If TypeName(ct) = "cboAfd" Then ActiveDocument.Variables(ct.Name) = IIf(ct.Text = "", " ", ct.Text)

Edit:
Had het op de verkeerde plek toegevoegd.
Moest onder de OK knop...
 
Laatst bewerkt:
Volgens mij moet je niet de TypeName aanpassen, want die beschrijft het object en niet de naam. Dat kan wel, maar dan moet je de Name property gebruiken:
Code:
        If Left(ct.Name, 7) = "TextBox" Then
        If Left(ct.Name, 7) = "ListBox" Then
En dan maakt het niet meer uit of je combobox Listbox, Krotemetoot of cboDiv heet :).
 
De afhankelijke combobox werkt perfect en het invoegen in word ook! dank je wel hiervoor.

Bij het laden van het document wordt de MyArray ingeladen, waar cboDiv de informatie uit put.

Hoe kan ik een tweede array maken, die ingelezen wordt bij het laden van het formulier?
 
ik heb nu in UserForm_Initialize
Code:
Dim myArray() As String
  'Use Split function to return a zero based one dimensional array.
  myArray = Split("A|B|C|D|E|F|G", "|")
  'Use .List method to populate listbox.
  cboDiv.List = myArray

als ik een MyArray2 maak en dan cboFunc.List = MyArray2 gebruik krijg ik een foutmelding.


Opgelost.
Moet wel alles aanpassen...

Code:
Dim myArray[B][SIZE=4]2[/SIZE][/B]() As String
  'Use Split function to return a zero based one dimensional array.
  myArray[B][SIZE=4]2[/SIZE][/B] = Split("A|B|C|D|E|F|G", "|")
  'Use .List method to populate listbox.
  cboDiv.List = myArray[B][SIZE=4]2[/SIZE][/B]
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan