Gegevens ophalen over meerdere pagina's

Status
Niet open voor verdere reacties.

Yrck23

Gebruiker
Lid geworden
26 dec 2013
Berichten
7
Hallo allemaal,

Ik hoop dat iemand mij kan helpen! :D
Ben bezig met een database, waar je kan zoeken op bijvoorbeeld een machinenaam.
Omdat er meerdere machines beschikbaar zijn, krijg je een vervolg keuze waar je desbetreffende omschrijving kan selecteren.
De code van bovenstaande stappen heb ik werkend, mede door zoeken op dit forum.

Echter zit er ergens een fout: als je een machine hebt met 5 omschrijvingen en je hiervan een selecteert dan komen de gegevens netjes in de tekst velden.
Selecteer je een andere omschrijving uit het lijstje dan gebeurd er niks. De gegevens van de eerste keuze blijft staan.

Als je in het voorbeeld bestand zoekt op "test" dan verschijnen er drie resultaten. De eerste keuze verschijnt in het userform. Selecteer je een andere keuze dan gebeurd er niks (wat wel zou moeten).
Ik denk dat het te maken heeft omdat ik met meerdere pagina's werk.

Iemand die hier een oplossing voor heeft? :eek:
 

Bijlagen

  • Voorbeeld database.xlsm
    48,5 KB · Weergaven: 47
Dag Yrck23 !

Het is moeilijk om iemand anders z'n code te doorgronden, maar ik heb toch een poging gedaan. De routine om de gegevens in de andere controls aan te passen loopt fout op de evaluatie:
Code:
If TypeOf Ctl Is MSForms.ComboBox And TypeOf ActiveControl Is MSForms.ComboBox And Ctl.Name <> "contractnummer" Then
Aan die voorwaarde wordt nooit voldaan want de ActiveControl is steeds "Multipage1". Wegens dezelfde reden zal ActiveControl.ListIndex ook niet werken.
Je kan die voorwaarde vereenvoudigen door alleen maar op combobox te toetsen. De toets Ctl.Name <> "contractnummer" hoeft ook niet want "contractnummer" is een textbox

Samengevat zou dat een gewijzigde procedure Nieuw() geven:
Code:
Sub Nieuw()
    For Each Ctl In instructieOPHALEN.Controls
        If TypeOf Ctl Is MSForms.ComboBox Then
            If Ctl.ListCount > 0 Then Ctl.ListIndex = Me.betreft.ListIndex      
        End If
    Next
End Sub
Misschien kan dat u wel verder helpen.

Grtz,
MDN111.
 
MDN111; geweldig! Het werkt nu zoals ik het bedoeld had! :thumb:

Zit ik nog met een probleem welke ik net tegen kwam.
De gegevens worden nu allemaal netjes opgehaald vanuit sheet "gegevens". Alle velden op het userform zijn comboboxen.
Echter heb ik twee velden waar veel tekst in komt te staan, dan kom ik met een combobox in de problemen omdat deze slechts een regel kan zijn.

De gegevens worden nu opgehaald met:
Code:
naamcombobox.AddItem sh.Range("rij/row" & code.Row).Value
Is er een mogelijkheid om deze code ook toe te passen bij een textbox? Als ik nu twee textboxen aan het userform toevoeg krigj ik foutmeldingen.

Ik hoop dat het een beetje duidelijk is! :eek:
 
Dag Yrck23 !

De .AddItem methode is niet toepasbaar op een textbox en de .MultiLine eigenschap is niet toepasbaar op een Combobox. Je zit dus met een probleem.

Om de uitgebreide tekst te tonen in de controls "bijzonderheden" en "bijzonderheden1" zou je die dus moeten vervangen door een TextBox of een Label, maar dan heb je bijkomende code nodig om de inhoud daarvan te vullen als de gebruiker een keuze maakt met de combobox "betreft".

Of je bestand kadert in een groter geheel kan ik natuurlijk niet zien, maar als je alleen aan de gebruiker de mogelijkheid wil geven om een machine in te voeren, eventueel gevolgd door een keuze van een omschrijving en verder alle andere gegevens alleen maar te tonen, dan begrijp ik niet goed waarom je overal ComboBoxen gebruikt. :confused:

Om gegevens alleen maar te tonen kan je net zo goed TextBoxen of zelfs Labels gebruiken. Mijns inziens bestaat de eenvoudigste methode er in om een TextBox te gebruiken voor de invoer van de machine en een ComboBox om de omschrijving te kiezen en verder de gegevens te tonen aan de hand van Labels. Maar het is natuurlijk jouw keuze. Mocht je besluiten om het roer toch om te gooien, wil ik je gerust helpen met de code.

Grtz,
MDN111.
 
Wederom bedankt MDN111 voor je snelle reactie!

Je hebt inderdaad gelijk. Alleen de "omschrijving" dient een combobox te zijn zodat er op diverse instructies gezocht kan worden. De rest kan volstaan met een textbox.

De reden dat alles een combobox is, is omdat ik de regels gewoon gekopieerd heb. :rolleyes:
De "bijzonderheden" dienen goed leesbaar te zijn omdat hier veel informatie in komt te staan. Het is dus noodzaak dat hier een textbox gebruikt gaat worden.

Zou je mij op weg kunnen helpen? De code hoeft niet geheel voorgekauwd te worden, maar een voorbeeld hoe het zou kunnen zal erg fijn zijn! :thumb:

Alvast bedankt!
 
Laatst bewerkt:
Dag Yrck23 !

Bij nader toezien lijkt het beter om de andere gegevens eventueel te tonen in TextBoxen en niet in Labels. Zo ontstaat er automatisch een verschil tussen de labels met de veldaanduidingen (zoals "Zoek op machine", "Omschrijving", ...) en de inhoud van de velden (TextBoxen).

De code in het bestand in bijlage is aangepast. Je hebt nu de keuze. Je kan de controls aanpassen naar TextBoxen of je kan de ComboBoxen behouden. Dat is niet echt elegant, maar het werkt ook wel en als het je niet stoort ...

Jouw oorspronkelijke code is zoveel mogelijk behouden, zodat de aanpassingen gemakkelijk te begrijpen zijn. Mochten er vragen zijn, laat maar weten.

Grtz,
MDN111.
 

Bijlagen

  • Voorbeeld database.xls
    93,5 KB · Weergaven: 67
MDN111, ontzettend bedankt!
Heb de code bekeken en het ziet er nu een stuk duidelijker uit, ook handig dat je wat opmerkingen erbij hebt gezet.:thumb:
Ik zal de code afmaken (aanvullen) zodat het bestand gebruikt kan worden.

Nogmaals ontzettend bedankt! :d Mocht ik tegen problemen aan lopen dan zal ik het laten weten.
 
Hallo MDN111,

Je code werkt perfect! Heb er erg veel plezier van. :)
Heb echter nog wel een vraag/probleem: in de oude code kon ik een gedeelte van de machinenaam invoeren zoals *deel naam* en dan op zoeken drukken. Ik kreeg dan de resultaten die erop leken. In de nieuwe situatie werkt dit helaas niet..

Het is makkelijk om bijvoorbeeld op een gedeelte van de naam te zoeken, omdat machines dezelfde naam hebben alleen het nummer verschilt bijvoorbeeld. Enig idee hoe ik dat kan toevoegen? :eek:
 
Dag Yrck23 !

Vervang de twee onderstaande regels in de code

Code:
With sh.Range("[COLOR="#0000CD"]A1:H1500[/COLOR]")
    Set code = .Find(contractnummer, LookIn:=xlValues, LookAt:=[COLOR="#0000CD"]xlWhole[/COLOR])



door de volgende:


Code:
With sh.Range("[COLOR="#FF0000"]B1:B1500[/COLOR]")
    Set code = .Find(contractnummer, LookIn:=xlValues, LookAt:=[COLOR="#FF0000"]xlPart[/COLOR])


Grtz,
MDN111.
 
Hallo MDN111,

Bedankt! Hij geeft nu inderdaad de resultaten weer. Echter wordt er alleen tekst weergegeven bij 'onderwerp'.
De rest van het formulier vult hij helaas niet in.. Heb je enig idee hoe dit dan? :)
 
Dag Yrck23 !

Ja, hieruit blijkt dat men steeds moet testen vooraleer iets te posten. :eek: Maar goed, de reden was snel gevonden.
We komen hier nu wel in een situatie waarin we het gewenste scenario moeten bepalen.

De vorige code, waarin men de hele machinenaam (contractnummer) moest invoeren haalde de omschrijvingen op die met die machinenaam verbonden zijn en plaatste de resultaten in de ComboBox "Betreft" en als men een andere omschrijving koos, werden de overige gegevens opgehaald.

De laatstse code, waarin men kan zoeken op een deel van de machinenaam, haalt de omschrijvingen op die met die gedeeltelijke machinenaam verbonden zijn, maar omdat de TextBox "contractnummer" geen volledige machinenaam bevat, worden de overige gegevens niet gevonden.

Op gebied van code is dat geen probleem om het op te lossen, maar de vraag is wat er moet gebeuren.

Veronderstel dat de machinenamen "Frees", "Freesmachine" en "Frezenslijpmachine" bestaan. Met iedere machinenaam kunnen één of meer omschrijvingen verbonden zijn. Als men dan "Fre" invoert zullen al die omschrijvingen in de Combobox terecht komen, maar de tekst van de TextBox "contractnummer" blijft onveranderd op "Fre". De vraag is wat er dan moet gebeuren.

Is de gebruiker in staat om aan de hand van de combinatie gedeeltelijke machinenaam + omschrijving de juiste keuze te maken?
Moet de tekst van de TextBox "contractnummer" aangepast worden met een volledige machinenaam? Zo ja, welke?

Gelieve eens grondig na te denken over het gewenste scenario, en laat maar iets weten.

Grtz,
MDN111.
 
Hallo MDN111,
Ongekend je hulp, echt ontzettend bedankt!
Er zijn meerdere machines van dezelfde fabrikant. Bijvoorbeeld machine 1 t/m 5 en bijvoorbeeld onderdeel 1 t/m 10.
Mijn idee was dat als ze alleen machine in typen, dat dan de omschrijving van alle vijf de machines verschijnen. De mensen zijn in staat om dan uit de omschrijvingen een juiste keuze te maken.

Ze kunnen ook op machine 1 zoeken, en dat daar dan de omschrijvingen van verschijnen.
Maar het is makkelijker om alleen op machine te zoeken, zodat alle mogelijke omschrijvingen te selecteren zijn.

Ik hoop dat het nu wat duidelijker is! :)
 
Dag Yrck23 !

Het is wel enigszins duidelijker, maar het geeft mij toch niet echt een beter gevoel. Misschien ook omdat ik je echte gegevens niet zie, maar dat geeft niet. Het invoeren van slechts een gedeelte van de machinenaam (contractnummer) maakt het er evenmin gemakkelijker op, maar dat geeft ook niet. De uitdaging wordt alleen een beetje groter.

In bijlage een nieuwe versie die uitgaat van het volgende scenario:

  • Als de gebruiker een volledige of gedeeltelijke machinenaam invoert en er is maar één bijpassende omschrijving dan worden de gegevens van die unieke combinatie machinenaam+omschrijving (contractnummer+betreft) getoond.
  • Als de gebruiker een gedeeltelijke machinenaam invoert en er zijn meerdere mogelijke combinaties machinenaam+omschrijving (contractnummer+betreft), dan kunnen er zowel meerdere machinenamen als meerdere omschrijvingen bestaan. Volgens mij is dan de beste oplossing om de mogelijke combinaties te tonen in de ComboBox, zodat de gebruiker daaruit kan kiezen.

Probeer deze eens uit en laat maar iets weten.

Grtz,
MDN111.
 

Bijlagen

  • Voorbeeld database - 1.xls
    97,5 KB · Weergaven: 63
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan