gebruik Userform

Status
Niet open voor verdere reacties.

Plotinus

Gebruiker
Lid geworden
25 mrt 2007
Berichten
659
Ik wil graag in een Userform in Excel (2007) middels een keuzelijst andere gerelateerde informatie die met de gemaakte keuze samenhangt uitlezen; zie een fors vereenvoudigd voorbeeld in de bijlage (klik op Test). Bedoeling is dus, dat als een naam is geselecteerd de bijbehorende informatie van geslacht en leeftijd in de desbetreffende vakjes worden uitgelezen. Iemand een hint hoe dit aan te pakken?
 

Bijlagen

bijv zo
Code:
Private Sub ComboBox1_Change()
sn = Sheets("Blad1").Cells(1, 1).CurrentRegion
TextBox1 = sn(ComboBox1.ListIndex + 1, 2)
TextBox2 = sn(ComboBox1.ListIndex + 1, 3)
End Sub

waarschijnlijk heb je meerdere textboxen dan is dit een mogelijkheid
Code:
Private Sub ComboBox1_Change()
sn = Sheets("Blad1").Cells(1, 1).CurrentRegion
For i = 1 To UBound(sn, 2) - 1
Me("TextBox" & i) = sn(ComboBox1.ListIndex + 1, i + 1)
Next
End Sub
 
Laatst bewerkt:
Toch nog een vraagje:
Als ik de inhoud van de combobox met keuzelijst helemaal wis (kwestie van anticiperen op verkeerd gedag gebruikers), dan komt er onzintekst in de afhankelijke textboxen te staan, namelijk de kolomkoppen van de betreffende kolommen. Dit geldt overigens ook voor als ik tekst in de combobox type die niet gevonden wordt. Is er een manier om die onzintekst te voorkomen? Bijvoorbeeld dat de combobox niet leeggemaakt kan worden, of dat bij lege combobox, of niet gevonden tekst, de andere textvakken '0' bevatten/krijgen, of gewoon leeg blijven?
 
Laatst bewerkt:
Code:
Private Sub ComboBox1_Change()
sn = Sheets("Blad1").Cells(1, 1).CurrentRegion
On Error Resume Next
 For i = 1 To UBound(sn, 2) - 1
  Select Case ComboBox1.ListIndex
   Case -1
     Me("TextBox" & i) = vbNullString
   Case Is > -1
     Me("TextBox" & i) = sn(ComboBox1.ListIndex + 1, i + 1)
  End Select
 Next
End Sub
 
Pasan, dank voor jouw oplossing! Maar is het ook mogelijk om alle textboxen op een page en/of een userform in één keer een lege waarde (Nullstring) mee te geven? Jouw oplossing werkt alleen voor genummerde textboxen, maar ik heb omwille van de duidelijkheid mijn textboxen namen gegeven. Bij mij speelt verder het probleem/uitdaging dat de textboxen gevuld worden met gecombineerde velden uit diverse kolommen (optellingen); ookal een reden waarom jouw oplossing niet helemaal werkt (denk ik).
 
Helaas weet ik niet hoe betrouwbaar deze manier is, bij de 2 textboxen uit jou voorbeeld werkt het maar als je er meer hebt zul je zelf moeten testen hoe de volgorde van de textbox namen is en of die volgorde elke keer het zelfde is
Code:
Private Sub ComboBox1_Change()
Dim cCont As Control
sn = Sheets("Blad1").Cells(1, 1).CurrentRegion
On Error Resume Next
 i = 1

  Select Case ComboBox1.ListIndex
   Case -1
      For Each cCont In Me.Controls
        If TypeName(cCont) = "TextBox" Then
         cCont = vbNullString
         i = i + 1
        End If
     Next cCont
     
   Case Is > -1
    i = 1
    For Each cCont In Me.Controls
        If TypeName(cCont) = "TextBox" Then
         cCont = sn(ComboBox1.ListIndex + 1, i + 1)
         i = i + 1
        End If
     Next cCont
 End Select

 End Sub

Als je de volgorde van de Textbox namen wil testen kun je dit zo doen
Code:
      For Each cCont In Me.Controls
        If TypeName(cCont) = "TextBox" Then
          MsgBox cCont.Name
        End If
     Next cCont
 
Laatst bewerkt:
En ook deze oplossing werkt bij mij; precies zoals ik het voor ogen had; hartelijk dank pasan!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan