Routine om set variabelen een andere waarde mee te geven

Status
Niet open voor verdere reacties.

Plotinus

Gebruiker
Lid geworden
25 mrt 2007
Berichten
659
In Word gebruik ik een sjabloon met daarin een UserForm. Op dat userForm heb ik vele checkboxen met daaraan gekoppeld variabelen ('Aandachtspunt_1-10'). Daarnaast één 'moeder'checkbox (CB_Alles) waarmee ik alle andere checkboxen (en variabelen) in één keer kan laten veranderen van True naar False en omgekeerd.

Ik heb de naampjes zo gekozen dat ze enkel verschillen met door een volgnummer. Dit in de hoop dat ik gemakkelijk via een for-next-lus de checkboxen en variabelen kan aanspreken en van waarde doen veranderen. Dat lukt mij echter niet. Zie onderstaande code, dat maakt alles duidelijk. De simpele vraag is nu: kan dit niet veel eenvoudiger, bijvoorbeeld met een for-next-lus?

Code:
Private Sub CB_Alles_Click()
    If CB_Alles.Value Then
        Aandachtspunt_1 = True
        Aandachtspunt_2 = True
        Aandachtspunt_3 = True
        Aandachtspunt_4 = True
        Aandachtspunt_5 = True
        Aandachtspunt_6 = True
        Aandachtspunt_7 = True
        Aandachtspunt_8 = True
        Aandachtspunt_9 = True
        Aandachtspunt_10 = True
        CB_1.Value = True
        CB_2.Value = True
        CB_3.Value = True
        CB_4.Value = True
        CB_5.Value = True
        CB_6.Value = True
        CB_7.Value = True
        CB_8.Value = True
        CB_9.Value = True
        CB_10.Value = True
    Else
       Aandachtspunt_1 = False
        Aandachtspunt_2 = False
        Aandachtspunt_3 = False
        Aandachtspunt_4 = False
        Aandachtspunt_5 = False
        Aandachtspunt_6 = False
        Aandachtspunt_7 = False
        Aandachtspunt_8 = False
        Aandachtspunt_9 = False
        Aandachtspunt_10 = False
        CB_1.Value = False
        CB_2.Value = False
        CB_3.Value = False
        CB_4.Value = False
        CB_5.Value = False
        CB_6.Value = False
        CB_7.Value = False
        CB_8.Value = False
        CB_9.Value = False
        CB_10.Value = False
    End If
End Sub
 
Probeer deze eens:
Code:
Private Sub CB_Alles_Click()
    For i = 1 To 10
        Controls("Aandachtspunt_" & i) = CB_Alles
        Controls("CB_" & i) = CB_Alles
    Next i
End Sub

Maar ik verwacht dat je voor de Comboboxen dit zal willen:
Code:
If Not CB_Alles Then Controls("CB_" & i) = ""
 
Laatst bewerkt:
Of
Code:
Private Sub CB_Alles_Click()
  For j = 1 To 10
    Me("Aandachtspunt_" & j) = CB_Alles
    Me("CB_" & j) = CB_Alles
  Next
End Sub
Maar voor hetzelfde geld zet je ze allemaal in een Collection, dan volstaat
Code:
Private Sub CB_Alles_Click()
  For each it in m_coll
    it = CB_Alles
  Next
End Sub
 
Laatst bewerkt:
j is iets anders dan i :cool:
 
Dank Edmoor dat werkt voor de checkboxen super, echter niet voor de (gewone) variabelen 'Aandachtspunten_1 tot 10. Deze heb ik als volgt gedeclareerd:
Code:
Public Aandachtspunt_1 As Boolean
Public Aandachtspunt_2 As Boolean
Public Aandachtspunt_3 As Boolean
etc.

Hij geeft aan dat hij het opgegeven object niet kan vinden.

Kan het declareren eigenlijk ook niet in één keer voor die 10 variabelen?
 
Uit je eerste vraag begreep ik dat Aandachtspunt_1 tm/ 10 Checkboxes zijn.
Als het een variabele is heeft die actie alleen nut als ze voor de hele module gedeclareerd zijn, dus bovenin de Userform module.
Als het wel Checkboxes zijn is die hele Public declaratie overbodig, daarnaast is als het alleen voor de Userform is Dim voldoende,

En zo kan ik er nog meer opmerkingen over maken en vragen stellen.
Daarom is een voorbeeld document dus altijd zo handig.
 
Laatst bewerkt:
Nee het zijn gewone variabelen. Dus als ik Checkbox CB_1 aanklik dan krijgt de variabele 'Aandachtspunt_1' de waarde 'True'. In een procedure van een module (dus buiten de Userform) laat ik vervolgens een tekstblok ophalen. Is de Aandachtspunt_1=False, dan wordt het tekstblok niet opgehaald. Ik heb die tussenstap nodig, omdat ik niet kan zeggen: If CB_1.value 'haal tekstblok 1' op.

Code:
Private Sub CB_1_Click()
    If CB_1.Value Then Aandachtspunt_1 = True Else Aandachtspunt_1 = False
End Sub
 
Ik snap er niks meer van.
Maar het voorbeeld lijkt me duidelijk.
 
Laat ik het anders formuleren: Hoe kan ik gewone variabelen, dus buiten een UserForm, in een for-next-lus in één handeling van True de waarde False meegeven?

var_1=True -> False
var_2=True -> False
var_3=True -> False
var_4=True -> False
var_5=True -> False
....

var_1.000=True -> False
 
Ik zie nog steeds geen voorbeelddocumentje. Het lijkt mij, als ik het zo lees, desalniettemin simpel op te lossen.
 
Code:
Sub Aandacht()
   Dim Aandachtspunt(1 To 1000) As Boolean
   For i = 1 To UBound(Aandachtspunt)
      Aandachtspunt(i) = i Mod 2 'alternerend false en true
   Next
End Sub
 
Bedankt Cow18, dit is precies wat ik nodig had. Eerlijk gezegd duurde het even dat ik doorhad dat je het met een array had opgelost. Maar dus heerlijk kort en krachtig; precies wat ik beoogde.

Octafish, Edmoor en snb natuurlijk ook bedankt voor het meedenken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan