• 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.

Open Form depending on Combobox

Status
Niet open voor verdere reacties.

RaymondC

Gebruiker
Lid geworden
10 mrt 2008
Berichten
561
Hoi Allemaal,

Voor iedereen nog de beste wensen voor 2016.

Ik heb 4 comboboxen op een formulier staan.
Aan de hand van de selectie zou ik een form willen openen met textboxen op, die weggeschreven moeten worden naar bepaalde worksheet.

Onderstaande code heb ik al, maar nog niet om ander form te openen, en de textboxen weg te schrijven.
Wie kan mij opweg helpen hiermee?

Code:
Private Sub Userform_Initialize()
    ComboBox1.AddItem "Active"
    ComboBox1.AddItem "Chemical"
    ComboBox1.AddItem "Connector"
    ComboBox1.AddItem "Display"
    ComboBox1.AddItem "Fixation"
    ComboBox1.AddItem "Mechanical"
    ComboBox1.AddItem "Passive"
    ComboBox1.AddItem "Tapes&Glue"
    ComboBox1.AddItem "Wire&Cable"
End Sub

Private Sub ComboBox1_Change()
    Application.EnableEvents = False
    ComboBox2.Clear
    Application.EnableEvents = True
    
    Select Case ComboBox1.Value
        Case "Active"
            ComboBox2.AddItem "Diode"
            ComboBox2.AddItem "xxyy"
            ComboBox2.AddItem "AAbb"
        Case "Passive"
            ComboBox2.AddItem "Capacitor"
            ComboBox2.AddItem "Buzzer"
            ComboBox2.AddItem "Power Supply"
        Case "Connector"
            ComboBox2.AddItem "Input / Output"
            ComboBox2.AddItem "RJ45"
            ComboBox2.AddItem "yyZZ"
       
    End Select
End Sub

Private Sub ComboBox2_Change()
    Application.EnableEvents = False
    ComboBox3.Clear
    Application.EnableEvents = True
    
    Select Case ComboBox2.Value
        Case "Buzzer"
            ComboBox3.AddItem "ccDD"
            ComboBox3.AddItem "xxyy"
            ComboBox3.AddItem "AAbb"
        Case "Capacitor"
            ComboBox3.AddItem "RC"
            ComboBox3.AddItem "Film"
            ComboBox3.AddItem "Ceramic"
        Case "Power Supply"
            ComboBox3.AddItem "EEff"
            ComboBox3.AddItem "ghij"
            ComboBox3.AddItem "kLkL"
       
    End Select
End Sub

Private Sub ComboBox3_Change()
    Application.EnableEvents = False
    ComboBox4.Clear
    Application.EnableEvents = True
    
    Select Case ComboBox4.Value
        Case "Surfacemouted"
            ComboBox3.AddItem "Yes"
            ComboBox3.AddItem "NO"
    End Select
End Sub
 
Gezien de hoeveeldheid comboboxen, lijkt het mij beter als je het bestandje er bij doet. Je wilt ons toch geen kostbare tijd laten verspillen aan het namaken van jouw formulier? :D
 
Heb bestandje opgeladen.
2 Forms zijn aangemaakt
Form2 heb ik code opgezet, die ik ergens terug gevonden heb in oude bestanden van mij (is kopie van iemand anders).

1 worksheet waarnaar de data geschreven moet worden
 

Bijlagen

En de bedoeling is dat, als je de 4 keuzelijsten hebt aangevinkt, de gekozen waarden gekopieerd worden naar formulier2? Nog afgezien van de vraag waarom je dat zou doen (gebruik op formulier2 de keuzelijsten, en je hebt hetzelfde resultaat) mis ik nog een knop waarmee je formulier2 opent. Of mag dat bij een klik op de laatste keuzelijst?
 
Met één formulier opslaan:
Code:
Private Sub CommandButton1_Click()
Dim ctl_Cont As Control
Dim iRow As Long, i As Integer
Dim ws As Worksheet

    Set ws = Worksheets("Characteristics")
    'find first empty row in database
    iRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
    
    For Each ctl_Cont In Me.Controls
        If TypeName(ctl_Cont) = "TextBox" Or TypeName(ctl_Cont) = "ComboBox" Then
            If ctl_Cont.Value = "" Then
                MsgBox "De " & TypeName(ctl_Cont) & Space(1) & ctl_Cont.Name & " is niet ingevuld!"
                Exit Sub
            End If
        End If
    Next
    'copy the data to the database
    For i = 1 To 4
        ws.Cells(iRow, i).Value = Me("ComboBox" & i).Value
    Next i
    For i = 1 To 4
        Me("ComboBox" & i).Value = ""
    Next i
    'clear the data
End Sub
Overigens zou ik je aanraden om het vullen van de keuzelijsten op een heel andere manier op te lossen; op deze manier krijg je een paar meter code.
 
de bedoeling is dat formulier 1 wordt ingevuld, door de verschillende keuzes.
Formulier 2 moet de waarde dan handmatig ingevuld worden, zodat in een ERP systeem de karakteristieken ingevuld kunnen worden.
Deze waardes moeten dan weg geschreven worden, zodat er later opgezocht kan worden.

Formulier is bijlange na nog niet klaar, maar wilde eerst de opzet, en het wegschrijven in orde maken.

Hoe zou jij dan de verschillende lijsten vullen?
Met naamranges op een worksheet?
 
Heb met hulp van OctaFish en internet volgende code gemaakt:

Code:
Private Sub UserForm_Initialize()
'Select the Type of Component'
Dim v, e
With Sheets("Type_Of_Component").Range("A2:A9")
    v = .Value
End With
With CreateObject("scripting.dictionary")
    .comparemode = 1
    For Each e In v
        If Not .exists(e) Then .Add e, Nothing
    Next
    If .Count Then Me.cboTypeComp.List = Application.Transpose(.keys)
End With
End Sub


Private Sub cboTypeComp_Change()
'Select the Subtype of component'
If cboTypeComp.Text = "Active" Then
    cboSubType.RowSource = ("Type_Of_Component!c2:c19")

ElseIf cboTypeComp.Text = "Computer Products" Then
    cboSubType.RowSource = ("Type_Of_Component!E2:E11")
ElseIf cboTypeComp.Text = "Connector" Then
    cboSubType.RowSource = ("Type_Of_Component!G2:G7")
ElseIf cboTypeComp.Text = "Electro Mechanical" Then
    cboSubType.RowSource = ("Type_Of_Component!i2:i5")
ElseIf cboTypeComp.Text = "Fixation" Then
    cboSubType.RowSource = ("Type_Of_Component!k2:k13")
ElseIf cboTypeComp.Text = "Mechanical" Then
    cboSubType.RowSource = ("Type_Of_Component!m2:m7")
ElseIf cboTypeComp.Text = "Passive" Then
    cboSubType.RowSource = ("Type_Of_Component!O2:O19")
ElseIf cboTypeComp.Text = "Raw Material" Then
    cboSubType.RowSource = ("Type_Of_Component!Q2:Q4")
ElseIf cboTypeComp.Text = "Wire & Cable" Then
    cboSubType.RowSource = ("Type_Of_Component!S2:S4")
End If
   
End Sub

Zal via nieuwe vraag mijn volgend "probleem" stellen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan