Formulier met dynamische inhoud dropdown box

Status
Niet open voor verdere reacties.

Dubya

Gebruiker
Lid geworden
22 okt 2012
Berichten
6
Beste leden,

Voor mijn werk probeer ik een excel-bestand op te maken waarbij via een formulier gegevens worden ingegeven.
Het formulier bevat een aantal tekstvelden die vrij in te geven zijn.
Daarnaast zijn er een aantal dropdown boxes/keuzelijsten.
De inhoud van deze dd-boxes/lijsten wordt dynamisch opgemaakt a.d.h.v. lijsten die onder een ander tabblad worden beheerd.

Aan de hand van dit bestand zal binnenkort de verzending van de kerstkaarten van onze organisatie worden georganiseerd. Om de data beter te structureren en te beheren wil ik nu via een formulier en vaste indeling aan de slag.

Momenteel bestaat het excelbestand uit:
- het tabblad "Beheer": hier komen de knoppen om formulieren aan te sturen (momenteel nog maar 1 formulier: voor ingave gegevens)
- het tabblad "Contacten": hier moeten de gegevens die via het formulier worden ingegeven worden ingevuld
- onder tabblad "Opzoeklijsten" komen de keuzegegevens die in het formulier de comboboxen moeten bevolken

Voor de opmaak van mijn excelbestand heb ik tips&technieken gebruikt van deze bronnen:
Excel UserForm With ComboBoxes
Excel VBA ComboBox Lists

Ik ben nu ergens vastgelopen, maar weet niet juist waar.
Als ik mijn formulier wil testen krijg ik de melding "Fout 1004 Methode Range van object_Worksheet is mislukt"

Ik heb mijn excelbestand bijgesloten zodat er naar de programmeercode kan worden gekeken.
Elke hulp is welkom!

G's

Dubya
 

Bijlagen

Bij je dynamische bereiken stond op vele plaatsen nog een verwijzing naar foutieve werkbladen.
In je Userform_Initialize waren de Ranges niet aangepast aan de werkelijke bereiknamen.
 

Bijlagen

en comboboxen/listboxen vullen we niet met additem maar met de eigenschap .list

Code:
Private Sub UserForm_Initialize()
  cboAanhef.list=Range("Aanheflijst").value
  cboGroep.list=Range("Groeplijst").value
  cboKanaal.list=Range("Kanaallijst").value
  cboEigenaar.list=Range("Eigenaarlijst")
End Sub

Maar als je VBA gebruikt zijn named ranges overbodig (met alle verwarringen vandien)
Met VBA zijn deze lijsten altijd 'dynamisch'.
Je voorkomt zo ook de herberekening van dynamische benoemde bereiken als gevolg van allerlei andere wijzigingen in het werboek.

Code:
Private Sub UserForm_Initialize()
  cboAanhef.list=sheets(opzoeklijsten").columns(1).specialcells(2).value
  cboGroep.list=sheets(opzoeklijsten").columns(3).specialcells(2).value
  cboKanaal.list=sheets(opzoeklijsten").columns(5).specialcells(2).value
  cboEigenaar.list=sheets(opzoeklijsten").columns(7).specialcells(2).value
End Sub

dat je dan weer zo kunt schrijven:

Code:
Private Sub UserForm_Initialize()
  for j=1 to 4
    me("cbo" & choose(j,"Aanhef","Groep","Kanaal","Eigenaar")).list=sheets("opzoeklijsten").columns(2*j-1).specialcells(2).value
  next
End Sub
Deze 3 regels doen exact hetzelfde als de 27 regels die deze procedure nu bevat. + de rekenregels van 4 benoemde bereiken.
 
Laatst bewerkt:
Code:
Private Sub UserForm_Initialize()
  for j=1 to 4
    me("cbo" & choose(j,"Aanhef","Groep","Kanaal","Eigenaar")).list=sheets([COLOR="#FF0000"]"[/COLOR]opzoeklijsten").columns(2*j-1).specialcells(2).value
  next
End Sub
Voor de leek misschien een vergetelheidje met grote gevolgen ?;)
 
Beste Bakkertje en SNB,

Alvast bedankt voor jullie oplossing. Ik heb het aangepaste bestand inmiddels getest en YIIIIIIHAAAAAA, het werkt!

De aangereikte code gaat in de documentatiemap. En inmiddels heb ik me, samen met enkele collega's, bij onze HRM dienst aangemeld voor een cursus VBA.

Nogmaals bedankt!
G's

Werner
 
Graag gedaan, markeer je de vraag dan nog even als opgelost (in de balk bovenaan je 1ste post):thumb:
 
Doen we!

By the way... toch gek hé: jij zit in Merksem en ik, in Deurne. En toch hadden we het Internet nodig om elkaar te vinden...

G's
Werner
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan