groep comboboxen in een loop aanpassen

Status
Niet open voor verdere reacties.

Plotinus

Gebruiker
Lid geworden
25 mrt 2007
Berichten
658
Ik heb een grote groep combo boxen, drie op een rij en voor ca. 100 rijen en genummerd als volgt
Combox1_1, ...1_2, ...1_3
etc
Combox100_1, ...100_2, ...100_3

Voor bepaalde repetitieve acties zou ik de comboboxen via een variabele in een lus aan willen spreken, bijvoorbeeld als volgt: Comboboxi_1 etc. Dit lukt helaas echter niet. Ook geprobeerd: Combobox & i_1, met hetzelfde resultaat.

Iemand een idee hoe dit te realiseren?
 
Beste,

Graag een voorbeeldbestandje. Hoef ik dan zelf niet te bouwen om de macro uit te testen.
 
Code:
for j=1 to sheet1.oleobjects.count

next

of

Code:
for j=1 to 100
  msgbox sheet1.oleobjects("Combobox" & j & "_1").name
next
 
Laatst bewerkt:
Of zoiets:
Code:
Sub AllecbxS()
    Dim OleObj As OLEObject

    For Each OleObj In ActiveSheet.OLEObjects
        If OleObj.OLEType = xlOLEControl Then
            If TypeName(OleObj.Object) = "ComboBox" Then
                With OleObj.Object
                    [COLOR="#FF0000"]'HIER JE ACTIE[/COLOR]
                End With
            End If
        End If
    Next OleObj
End Sub
 
Ik probeer het als volgt:

Code:
Sub Vullingcombo1(i)

    Dim strControl As Variant
    strControl = "ComboBox" & CStr(i) & "_2"
   
 With strControl
        Select Case ComboBox1_1
            Case "A"
                .AddItem "Overig"
                .Text = "Overig"
            Case "B1"
                .AddItem "Agrarisch"
                .AddItem "Overig"
etc

Dit lijkt goed te gaan en het proces stapt de 'with lus' in. Echter als er gedeclareerd moet worden (.AddItem bijvoorbeeld), dan verschijnt de foutmelding: 'fout 424 tijdens uitvoering, Object vereist'. Ik had het eigenlijk ook wel verwacht, omdat strControle de inhoud "Combobox1_2" krijgt, dus met de dubbele aanhalingstekens erbij... Gevoelsmatig ben ik er dus bijna. strControl moet waarschijnlijk geen variant zijn, maar wat dan wel?
 
En mijn methode werkt niet voor je?
 
Dank voor de reacties! Ik ga het vanavond/morgen uitproberen.
Mijn laatste reactie (die een tijdje open heeft gestaan) en enkele andere reacties (Edmoor en snb) zaten in tijd zo dicht bij elkaar, dat ik die gemist heb. Een beetje verwarrend en wellicht wat ergernis; jammer; het was me echt even ontgaan.
 
Er wordt in ieder geval gereageert op je vraag ;)
 
Is 'gereageerd' in Nieuwerkerk met een 't'?
 
Haha, de koffie was op, dus maar t genomen ;)
 
Omdat de suggestie van snb het gemakkelijkst toont heb ik die eerst even geprobeerd:
Code:
MsgBox Blad2.OLEObjects("Combobox" & i & "_2").Name

 With Blad2.OLEObjects("Combobox" & i & "_2").Name
        Select Case ComboBox1_1
            Case "A"
                .AddItem "Overig"
                .Text = "Overig"
            Case "B1"
                .AddItem "Agrarisch"
                .AddItem "Overig"
De eerste regel geeft netjes ComboBox1_2 (bij i =1). Daarna treedt toch helaas weer dezelfde fout op, als er iets moeten worden toegveoegd (AddItem): 'fout 424 tijdens uitvoering, Object vereist'. Zou dit dan echt met AddItem te maken hebben, terwijl het altijd goed gaat als ik gewoon voluit 'With ComboBox1_2' schrijf?

Morgen maar eens verder zoeken...
 
Waarom plaats je niet de hele code? en/of het bestand waarin je wat aan het doen bent. Dit schiet toch totaal niet op zo!
 
Je gebruikt mijn voorbeeld totaal verkeerd. Dat gaat zo niet werken. Kijk daarnaast ook naar de opmerking van snb in #8.
 
Edmoor, zoals vermeld heb ik het voorbeeld van snb gebruikt; die van jou is wat complexer om te doorgronden; voor (over)morgen.
VenA, ik moet het document wat aanpasen om gevoelige informatie eruit te halen, met plezier deel ik het dan; voor (over)morgen hoop ik.
En natuurlijk doe ik wel iest met de aangedragen suggesties: ik heb al alle 'AddItems' al vervangen door 'List = Array...', maar helaas met dezelfde fout. Ondertussen is de code hierdoor al wel een stuk compacter geworden - prachtig!.

Kern van het probleem is dus dat ik op elke rij drie comboboxen nodig heb, die op elke rij (100+) hetzelfde moeten doen (afhankelijke vulling). Om de code te beperken zoek ik dus een manier om op elke rij de code te delen door in de naamgeving van de Comboboxen een variabele te steken.

Bedankt zover!
 
Edmoor, zoals vermeld heb ik het voorbeeld van snb gebruikt; die van jou is wat complexer om te doorgronden; voor (over)morgen.

Dat had ik dus even gemist ;)
Een voorbeeld document zal inderdaad meer duidelijkheid geven :)
 
Hier een voorbeeldje, zie 'testblad'.De bovenste rij Comboboxen met afhankelijke inhoud werkt zoals het moet werken en levert alle combinaties zoals opgelijst in blad1. Ik heb nog een paar rijen Comboxen toegvoegd waarvoor ik zoveel mogelijk code wil hergebruiken, met name de laatse routine op (code blad) 'testblad'. Het zal in de praktijk om zo'n 100 rijen kunnen gaan. Dat alleen al een serieuse uitdaging om allemaal juist te nummeren en goed te laten verwijzen...

Voor het juiste begrip: betreffende tabel is de staart van een veel grotere sheet met op elke rij unieke data, dus rijen samenvoegen is geen optie.
 

Bijlagen

Dat is een hele mooie oplossing snb hartelijk dank! De code is voor mij helaas wel een beetje te hoog gegrepen. Nog een paar opmerkingen waarbij jij misschien nog behulpzaam bij wilt zijn:

1 Een foutje betreft A: bij die selectie mag enkel de optie 'Overig' beschikbaar zijn; nu is dat een hele lijst van het type 'categorie. En omdat ik de code niet helemaal doorgrond, is dat lastig aanpassen.

2 Ik zou niet willen dat het steeds automatisch de volgende regel wordt, maar een regel die jezelf aanwijst, zodat elke regel ook aangepast kan worden. Dit kan ik oplossen met 'ActiveCell' in jouw code. Dat is wel wat gevaarlijk: het moet de actieve rij zijn, waarbij de juiste cel wordt gevonden als startpunt bij het wegschrijven. Dat vind ik wel uit hoe dat moet, hoop ik. Maar graag zou ik daarbij wel een duidelijk merkteken (rode randmarkering bijvoorbeel) rond de betreffende drie cellen aangeven als de Comboxselectie wordt gebruikt, zodat de gebruiker weet/ziet in welke rij de gegevens worden weggeschreven.

3 En tot slot zouden de comboxen weer gereset (geleegd) moeten worden na wegschrijven', of bij verandering van selectie: Als de eerste box wordt veranderd, dan mag de tweede niet de eerdere selectie laten staan. Nu kan een zo ontstane foute combinatie ook worden weggeschreven. Helaas gaat het met 'Clear' fout in 'ComboBox1_3_Change()'
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan