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

Gegevens ophalen uit een werkblad

Status
Niet open voor verdere reacties.

toverkamp

Gebruiker
Lid geworden
11 sep 2006
Berichten
403
Hallo forumleden,

Ik heb op blad1 een knop gemaakt "zoek accesoire" als je hierop klikt opent zich een userform en kun je een accesoire in een combobox aanklikken.
Ik wil het volgende voor elkaar krijgen:
wanneer ik een accesoire heb gekozen dan moeten alle type van de desbetreffende accesoire tevoorschijn komen in de listbox eronder. Deze moeten gehaald worden uit het werkblad "Accesoires". Ik heb een voorbeeldbestandje toegevoegd waar het ook nog een keer staat uigelegd. Ik hoop dat iemand mij kan helpen!
 

Bijlagen

Laat ik de vraag iets anders stellen...

Ik heb een formulier gemaakt waar men accesoires in moet kunnen opzoeken. Alle accesoires staan in een combobox. De accesoires uit de combobox komen uit het werkblad "accesoire" kolom "A1:A13". Ik heb de accesoires ook nog een keer op kolom "B1:N1" neergezet, met daaronder de verschillende typen die erbij horen. Zo hoort bij motor bijvoorbeeld benzine en diesel.
Die verschillende type zou ik graag in het userform in een listbox willen zien waar men dan weer een keuze kan maken. Uiteindelijk is het de bedoeling er nog meer mee te kunnen, maar als ik dit eerst voor elkaar krijg, kan ik hopelijk zelf verder!

Ik heb een vernieuwde bijlage toegevoegd.
 

Bijlagen

Ik ben er uit. Ik heb een nieuw werkblad toegevoegd "lijsten" Hierin heb ik de accesoires gezet om de combobox te vullen.
Ik gebruik de volgende code:
Code:
Private Sub accesoirebox_Change()
    Select Case accesoirebox.Value
        Case "Band(en)"
        typeaccesoire.List = Worksheets("accesoire").Range("b2:b5").Value
        Case "Motor"
        typeaccesoire.List = Worksheets("accesoire").Range("c2:c5").Value
        Case "Scanner"
        typeaccesoire.List = Worksheets("accesoire").Range("d2:d5").Value
        Case "Inbouw"
        typeaccesoire.List = Worksheets("accesoire").Range("e2:e5").Value
        Case "Geldkassette"
        typeaccesoire.List = Worksheets("accesoire").Range("f2:f5").Value
        Case "Lade-opener"
        typeaccesoire.List = Worksheets("accesoire").Range("g2:g5").Value
    End Select
    
End Sub

Private Sub UserForm_Initialize()
    st = Sheets("lijsten").Range("a1:a13")
    sq = Split(String(UBound(st), "|"), "|")
    For j = 1 To UBound(st)
        sq(j) = st(j, 1)
    Next
    accesoirebox.List = sq
End Sub

Het bovenste gedeelte houdt:
case= de naam van de eerste regel van het werkblad
Range= spreekt voor zich, het aantal rijen in een kolom waar de typen komen te staan.

Misschen heb jij er ook nog wat aan demeter?
In ieder geval bedankt voor uw hulp!
 
Laatst bewerkt:
Toverkamp,

Dank je wel voor het posten van je oplossing.
Zat zelf ook in de richting te denken van een extra blad, maar wilde dat zo lang mogelijk uitstellen. Denk dat ik ook maar overstag moet gaan.
Zal ook even gaan spelen me tje oplossing, dank je wel.

Groet,
Ferenc
 
Zoals ik al aangaf zou ik dit formulier nog verder willen uitbreiden. Ik heb het nu voor elkaar dat je bij verschillende accesoires ook meerder typen kan zien.
Nu ben ik er mee bezig geweest om ook de daarbijbehorende filiaalnummers te zien in een listbox. Dit lukt tot zekere hoogte. Het lukt me namelijk alleen bij de accesoire "type kassa".
Ik gebruik de volgende code:
Code:
Private Sub typeaccesoire_Click()
    Dim c As Range, filteredRange As Range
    With Sheets("idnummers").Range("B4").CurrentRegion
        .AutoFilter
        .AutoFilter Field:=7, Criteria1:=typeaccesoire.Value
                           
    End With
    
    With Sheets("idnummers").AutoFilter.Range
        On Error Resume Next
        Set filteredRange = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
    End With
    
    For Each c In Intersect(filteredRange, Sheets("idnummers").Columns(3))
        accesoiresform.accesoirefilialen.AddItem c
    Next

End Sub

Deze code doet het volgende:
Uit het werkblad "idnummers" past hij een autofilter toe in kolom 7. Dit is het type. Dus hij filtert bijvoorbeeld alle type A eruit. Vervolgens zet hij alle daarbijbehorende filiaalnummers (kolom 3) in "accesoirefilialen". Dit werkt perfect! Het probleem is dus dat hij als enigste een autofilter toepast in kolom 7. Als ik een extra regel onder
Code:
        .AutoFilter Field:=7, Criteria1:=typeaccesoire.Value
toepas, dus i.p.v. .Autofilter Field:=7 een 8 maak dan werkt de code niet meer.

Misschien dat iemand mij hiermee kan helpen, hoe het wel moet. Ik heb het bestand als bijlage toegevoegd.
 

Bijlagen

Demeter, het is me niet gelukt met behulp van jouw bestand. Zoals al gezegd krijg ik het wel voor elkaar om de filiaalnummers tevoorschijn te krijgen die bij het type kassa horen, maar niet bij de rest van de gegevens.
In de bovenstande post heb ik een recente bijlage zitten, waar je wat mee kunt. Misschien zit ik niet op de goede weg, maar ik zou erg blij zijn als iemand me hiermee kan helpen!:thumb:
 
Hoi toverkamp,

Ik weet niet zeker of ik je probleem helemaal goed heb begrepen, maar ik denk dat als je onderstaande probeert je misschien wel tot een oplossing komt.

Zet eens een breakpoint op de eerste regel met ' End With' (ga er met de cursor naartoe en druk op F9)

1-Start nu je programma en kies 'type kassa' en kies dan 'A'
2-Je zult zien dat je programma stop op de breakpoint.
3-Ga nu met de muis naar 'typeaccesoire.Value'. Kijk een wat voor waarde deze aangeeft, en vindt uit in welke kolom dit staat.
4-Als je de waarde hebt gezien, druk je op F5

Doe nogmaals hetzelfde en kies bijvoorbeeld 'Motor' en kies dan 'Benzine'
Ga weer met de muis naar 'typeaccesoire.Value' en kijk wat deze aangeeft, en vindt uit in welke kolom dit staat.
 
Hoi toverkamp,

Ik weet niet zeker of ik je probleem helemaal goed heb begrepen, maar ik denk dat als je onderstaande probeert je misschien wel tot een oplossing komt.

Zet eens een breakpoint op de eerste regel met ' End With' (ga er met de cursor naartoe en druk op F9)

1-Start nu je programma en kies 'type kassa' en kies dan 'A'
2-Je zult zien dat je programma stop op de breakpoint.
3-Ga nu met de muis naar 'typeaccesoire.Value'. Kijk een wat voor waarde deze aangeeft, en vindt uit in welke kolom dit staat.
4-Als je de waarde hebt gezien, druk je op F5

Doe nogmaals hetzelfde en kies bijvoorbeeld 'Motor' en kies dan 'Benzine'
Ga weer met de muis naar 'typeaccesoire.Value' en kijk wat deze aangeeft, en vindt uit in welke kolom dit staat.

Spiderman, allereest hartelijk dank voor uw reactie! Maar ik denk dat je de vraag niet helemaal goed hebt begrepen:o Ik weet namelijk wel in welke kolommen de waarden staan. Maar het probleem is eigenlijk dat ik alleen bij type kassa het filiaalnummer tevoorschijn kan halen.
Eigenlijk zal de code iets als het volgende moeten zijn, maar dat werkt helaas niet:
Code:
Private Sub typeaccesoire_Click()
    Dim c As Range, filteredRange As Range
    With Sheets("idnummers").Range("B4").CurrentRegion
        .AutoFilter
        .AutoFilter Field:=7, Criteria1:=typeaccesoire.Value
        .AutoFilter Field:=9, Criteria1:=typeaccesoire.Value
        .AutoFilter Field:=10, Criteria1:=typeaccesoire.Value
        .AutoFilter Field:=12, Criteria1:=typeaccesoire.Value
        .AutoFilter Field:=13, Criteria1:=typeaccesoire.Value
        .AutoFilter Field:=14, Criteria1:=typeaccesoire.Value
        .AutoFilter Field:=15, Criteria1:=typeaccesoire.Value
        .AutoFilter Field:=16, Criteria1:=typeaccesoire.Value
        .AutoFilter Field:=17, Criteria1:=typeaccesoire.Value
        .AutoFilter Field:=18, Criteria1:=typeaccesoire.Value
        .AutoFilter Field:=19, Criteria1:=typeaccesoire.Value
        .AutoFilter Field:=20, Criteria1:=typeaccesoire.Value
        .AutoFilter Field:=21, Criteria1:=typeaccesoire.Value
        .AutoFilter Field:=22, Criteria1:=typeaccesoire.Value                     
    End With
    
    With Sheets("idnummers").AutoFilter.Range
        On Error Resume Next
        Set filteredRange = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
    End With
    
    For Each c In Intersect(filteredRange, Sheets("idnummers").Columns(3))
        accesoiresform.accesoirefilialen.AddItem c
    Next
    
    
End Sub

Ik hoop dat het zo wat duidelijker is.
 
Hoi toverkamp,


Ik heb je voorbeeld eventjes aangepast.

Ik denk dat dit wel doet wat je bedoeld. (zo niet dat ga ik deze post eventjes helemaal lezen :( )

Suc6
 

Bijlagen

Spiderman, dat is precies wat ik bedoel!! Ik zie je gebruik hebt gemaakt van KolomReferentie. Ik hoop dat het je niet al te veel speurwerk heeft gekost. Het werkt in ieder geval super!

Misschien een detail. Is het ook mogelijk om de vorige filiaalnummers te verwijderen als je een ander type kiest. Ik bedoel bijvoorbeeld:
Als je "type kassa" kiest en vervolgens in de listbox "A". Dan zie je in de listbox daaronder de filiaalnummers "1002" en "1007" verschijnen. En als ik dan verder klik naar type kassa "B" dan blijven de 1002 en 1007 staan en komt er 1005 bij in de listbox.
Is het misschien mogelijk om de vorige gegevens (1002 en 1007) te verwijderen en dat alleen de "nieuwe" gegevens (1005) blijven staan?

Dit geldt dus niet alleen voor type kassa, maar alle accesoires:o
 
Laatst bewerkt:
Toverkamp,

Daar zijn we weer:).
Op deze methode wilde ik het eigenlijk proberen maar liep redelijk vast.
Als ik nu zo jouw file ontleed denk ik dat ik ook maar wat ga verbouwen aan mijn form.

Ben tevens benieuwt naar je clear textbox methode!!!
Denk dat het zoiets moet worden dat als je je combobox aanraakt eerst al je textboxen leegt en hierna je combobox vuld met het geselecteerde. mmmmm maar hoe?
We gaan helpen zoeken.


Groet,
Ferenc
 
Hoi,

Het verwijderen van de 'oude' filiaal gegevens is simpel.

Voeg de VETTE tekst tussen

Code:
Private Sub typeaccesoire_Click()
    
    [B]accesoirefilialen.Clear[/B]
    
    Dim c As Range, filteredRange As Range

Speurwerk viel wel mee, je had de referenties al in post NR 9 mee gegeven.

@Demeter

Ben tevens benieuwt naar je clear textbox methode!!!
Het vak waar de filiaalgegevens in komen is geen textbox maar een listbox.

Met listbox.Clear is die dus simpel leeg te maken. Een tekstbox is trouwens net zo simpel leeg te maken Textbox.text = ""



Suc6
 
Werkt goed,
was te veel gefocussed op het aanklikken van een nieuwe accesoire (combobox: accesoirebox).

Thanks spiderman.Ben benieuwt wat Toverkamp er van gaat vinden ;)
(is zijn post :))

Groet,
Ferenc
 
Spiderman bedankt voor je post!!:thumb: Ik kan er momenteel niet naar kijken, ik heb het bestand hier namelijk niet. Zodra ik het weet krijg je het te horen!

In ieder geval al hardstikke bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan