Additem niet meer dan 1 x uitvoeren

Status
Niet open voor verdere reacties.

MaikBisschop

Gebruiker
Lid geworden
19 mrt 2018
Berichten
39
Ik heb een stukje code, waarin de waarde van ComboBox 1 t/m 10 verandert door de waarde van ComboBox.
Dit wordt steeds gecheckt door in elk 'change event' het kopje 'Change' op te roepen. Maar omdat hier mijn
'Additem' ook staat wordt de lijst van ComboBox 1 t/m 10 i.p.v. 2, 3, 4 5, 6 bijvoorbeeld 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6.
Dit komt omdat hij nog een keer bij het stukje langsloopt waar de waardes aan de combobox worden toegevoegd.

Hoe kan ik zorgen dat wanneer er weer bij dit stukje 'langsgelopen' wordt, de waardes niet nóg een keer aan de lijst worden toegevoegd?


Code:
Private Sub Check()
'Visibility comboboxes and labels
    For i = 1 To (sheet2.Range("D2"))
        With Me.Controls("ComboBox" & i)
            .Visible = True
        End With
        With Me.Controls("Label" & i)
            .Visible = True
        End With
    Next i
      For i = (sheet2.Range("D2") + 1) To 10
        With Me.Controls("ComboBox" & i)
            .Visible = False
        End With
        With Me.Controls("Label" & i)
            .Visible = False
        End With
    Next i
    
For d = 1 To 10
For i = 2 To (sheet2.Range("B2") - 1)
        With Me.Controls("ComboBox" & d)
            .AddItem i
        End With
    Next i
    Next d
End Sub

Private Sub UserForm_Initialize()
'ComboBox
For i = 1 To (sheet2.Range("B2") - 2)
ComboBox.AddItem i
Next i
Check
End Sub

Private Sub ComboBox_Change()
sheet2.Range("E2") = ComboBox.Value
Check
End Sub

Private Sub ComboBox1_Change()
sheet2.Range("E3") = ComboBox1.Value
Check
End Sub

Private Sub ComboBox2_Change()
sheet2.Range("E4") = ComboBox2.Value
Check
End Sub

Private Sub ComboBox3_Change()
sheet2.Range("E5") = ComboBox3.Value
Check
End Sub

Private Sub ComboBox4_Change()
sheet2.Range("E6") = ComboBox4.Value
Check
End Sub

Private Sub ComboBox5_Change()
sheet2.Range("E7") = ComboBox5.Value
Check
End Sub

Private Sub ComboBox6_Change()
sheet2.Range("E8") = ComboBox6.Value
Check
End Sub

Private Sub ComboBox7_Change()
sheet2.Range("E9") = ComboBox7.Value
Check
End Sub

Private Sub ComboBox8_Change()
sheet2.Range("E10") = ComboBox8.Value
Check
End Sub
Private Sub ComboBox9_Change()
sheet2.Range("E11") = ComboBox9.Value
Check
End Sub
Private Sub ComboBox10_Change()
sheet2.Range("E12") = ComboBox10.Value
Check
End Sub

Zie ook het voorbeeld bestand (hoop dat jullie het snappen;))
Bekijk bijlage Voorbeeld.xlsm

Met vriendelijke groet,
Maik Bisschop
 
Laatst bewerkt:
Wellicht dit:
Code:
For d = 1 To 10
        [COLOR="#FF0000"]Me.Controls("ComboBox" & d).Clear[/COLOR]
 
EDIT:
Waar vul je dat stukje dan in want als ik dat er tussen plak krijg ik ipv 1 t/m 10 als keuze, alleen 11 als keuze
 
Laatst bewerkt:
Precies daar waar ik liet zien.
 
Ik zou deze code gebruiken:

Code:
Private Sub UserForm_Initialize()
    ComboBox.List = [row(1:10)]
End Sub

Private Sub ComboBox_Change()
    For j = 1 To 10
      Me("ComboBox" & j).Visible = j <= Val(ComboBox.Value)
      Me("Label" & j).Visible = j <= Val(ComboBox.Value)
    Next
End Sub

Private Sub ComboBox1_Change()
   M_Check 1
End Sub
Private Sub ComboBox2_Change()
   M_Check 2
End Sub
Private Sub ComboBox3_Change()
   M_Check 3
End Sub
Private Sub ComboBox4_Change()
   M_Check 4
End Sub
Private Sub ComboBox5_Change()
   M_Check 5
End Sub
Private Sub ComboBox6_Change()
   M_Check 6
End Sub
Private Sub ComboBox7_Change()
   M_Check 7
End Sub
Private Sub ComboBox8_Change()
   M_Check 8
End Sub
Private Sub ComboBox9_Change()
   M_Check 9
End Sub
Private Sub ComboBox10_Change()
   M_Check 10
End Sub

Private Sub M_Check(y)
    sheet2.Cells(y, 6) = Me("ComboBox" & y)
End Sub
 
@snb
Dat maakt het ook gelijk een stuk duidelijker. Heb jij e.v.t. ook een suggestie voor de onderstaande code?

@edmoor
Het gaat om een machine. Deze bestaat bijv. uit 10 modules (Cell B2 heeft dan deze waarde), dan kunnen er 8 torens geplaatst worden (aantal modules - 2).
Dit omdat er op de eerste en laatste module geen toren mag/kan staan.
Waneer ik deze code gebruik met 10 modules (B2), dan krijg ik 2, 3, 4, 5, 6, 7, 8, 9 in de lijsten van de comboboxen te zien. Maar zo gauw dit stukje nog een keer
langsgelopen wordt, komt er: 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5, 6, 7, 8, 9 te staan. (Geen .Clear gebruikt)

Code:
For d = 1 To 10
For i = 2 To (sheet2.Range("B2") - 1)
        With Me.Controls("ComboBox" & d)
        .AddItem i
        End With
    Next i
    Next d

Wanneer ik .Clear toevoeg verschijnt er i.p.v. 2 t/m 9, alleen het getal 9.
Code:
For d = 1 To 10
For i = 2 To (sheet2.Range("B2") - 1)
        With Me.Controls("ComboBox" & d)
        .Clear
        .AddItem i
        End With
    Next i
    Next d

Hoe kan ik dit probleem oplossen, en hoe kan dit e.v.t. nog versimpelt/ingekort worden?
 
Laatst bewerkt:
Code:
For j = 1 To 10
   Me("ComboBox" & j).list=[row(2:10)]
Next
 
@snb
Bedankt voor je reactie, maar de de keuze lijst moet echt afhankelijk zijn van de waarde uit de B2.
De waarde in B2 kan variëren, dus om foutieve keuzes te voorkomen moet de lijst bestaan uit 2 t/m (B2 - 1)
 
Laatst bewerkt:
Ik zal even uitleggen wat ik aan het maken ben

Ik zit in het examenjaar van mijn mechatronica opleiding en ben bezig om het maken van 3d offerte modellen te automatiseren
(als eindopdracht). Ik heb een 3D model opgezet die op een dusdanige manier is opgebouw dat deze wordt gestuurd door een Excel
blad oftewel een 'Design Table'. Het is de bedoeling dat de verkoop afdeling een Excel bestand opent waar verscheidene UserForms
verschijnen. Hier kunnen zij bepaalde keuzes maken, deze keuzes moeten echter 'hùfterproof' zijn om foutieve 3D modellen te voorkomen.

Data die wordt ingevuld in een UserForm wordt opgeslagen in sheet2. Weet niet of ik het zo kan noemen maar zie het als een soort van
database. Wanneer zij bij het laatste UserForm zijn gekomen klikken ze op 'Genereren' en dan wordt er aan de hand van de data in sheet2 een
'Design Table' gegeneerd in sheet1. Wanneer ik deze daarn inlaad wordt er een model gegenereerd. Één van de eisen is dat er geen foutieve
keuzes gemaakt kunnen worden dus vandaar dat de data op sheet2, als voorwaarde geldt voor andere keuzes.

Qua 3D ontwerpen weet ik precies wat ik moet en kan doen. Echter was ik totaal onbekend met VBA en moet ik lerendeweg mijn project
afronden. Alle vragen die ik hier stel zijn onderdeel van een veel groter geheel.

Ik kan helaas het hele project niet zomaar plaatsen omdat er zo veel bedrijfsgegevens in staan. En om het leeg aan te leveren vergt ook wel
redelijk wat werk. Vandaar dat mijn vragen soms ietwat onduidelijk zijn.

Hier een foto van een model dat ik bijvoorbeeld kan genereren:
Snapshot.png

Maar even terug op jou vraag, het bovenstaande model bestaat uit 10 modules. op de 3e en 5e module staat een toren.
Op de eerste en laatste module staat een afzuiging. Dus dan heb je nog 8 locaties over om je toren('s) te plaatsen. maar wanneer ik 15
modules heb, heb ik 13 locaties voor mijn toren('s) daarom is het zo belangrijk dat de keuze lijst afhankelijk is van B2. Zodat waneer B2
verandert, de keuzes in de lijst ook veranderen.
 
Laatst bewerkt:
En heb je nou #2 al getest?
 
@edmoor

Had het heel dom opgebouwd maar het werkt blijkbaar gewoon :eek:
Had het stukje in mijn Change subje geplaatst. Maar dan herhaalt hij zichzelf continu nu heb ik m in de ComboBox_Change
geplaatst. En nu werkt het wel.

Had echt al veel verschillende dingen geprobeert, maarja weer wat geleerd.
 
@snb
In het voorgaande userform kun je het aantal modules aangeven, en dan verandert B2.
Dus de .additem kan gewoon in het initialize event. Ik had het verkeerd ingevuld en daarom werkte het niet,
dacht dat ik alle mogelijkheden getest had maar dat blijkt dus van niet.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan