• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Wisselknoppen gebruiken in een userform

Status
Niet open voor verdere reacties.

Bakkerken

Gebruiker
Lid geworden
14 dec 2014
Berichten
46
Collega Excel liefhebbers,

ik zit met een vraagje ivm wisselknoppen.

Graag had ik in een userform heel wat wisselknoppen gehad die men kan aan en uitzetten.
Na bevestiging op een "Save" knop (commandbutton) zou de datum van vandaag moeten ingevuld worden
in de desbetreffende rij (wisselknoppen zijn genummerd + in rij A zijn deze zelfde nummers voorzien)
Hier dient dan steeds de datum van vandaag ingevuld te worden in de eerstvolgende, lege cel.

Hopelijk is dit min of meer duidelijk en kunnen jullie me even helpen.

momenteel gebuik ik volgende code
maar hoe kan ik er dus voor zorgen dat dit ook werkt met alle andere wisselknoppen (dit zullen er meer dan 100 worden denk ik...)


Private Sub CommandButton1_Click()
Dim bereik As Range
If ToggleButton1 = True Then
Set bereik = Columns(1).Find("1")
bereik.Select
ActiveCell.Offset(0, 20).Select
End If
Do
If IsEmpty(ActiveCell) = True Then
ActiveCell.Offset(0, -1).Select
End If
Loop Until IsEmpty(ActiveCell) = False
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Date
End Sub


Alvast vriendelijk bedankt voor enige hulp hierbij.
 
Laatst bewerkt:
Je wilt met 1 knop een actie starten die alle ToggleButtons langs gaat om daarvoor dezelfde code uit te voeren?

Dat zou je zo kunnen doen:
Code:
Private Sub CommandButton1_Click()
    Dim i As Integer
    For i = 1 To 4 '< Aantal wisselknoppen
        Call HandleTB(i)
    Next i
End Sub

Private Sub HandleTB(TBnum As Integer)
    Dim bereik As Range
    Dim TBvalue As Boolean
    
    TBvalue = Me.Controls("ToggleButton" & TBnum)
    If TBvalue = True Then
        Set bereik = Columns(1).Find("1")
        bereik.Select
        ActiveCell.Offset(0, 20).Select
    End If
    
    Do
    If IsEmpty(ActiveCell) = True Then
        ActiveCell.Offset(0, -1).Select
    End If
    Loop Until IsEmpty(ActiveCell) = False
    
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = Date
End Sub
 
Laatst bewerkt:
Thx voor je reactie, maar dit is niet exact wat ik zoek.

Indien wisselknop 1 AAN is, dient datum van vandaag in rij van nr 1 geplaatst te worden.
Indien wisselknop 2 AAN is, dient datum van vandaag in rij van nr2 geplaatst te worden
enz...

Het is mogelijk dat bv wisselknop 1, 2 en 4 AAN zijn, en wisselknop 3 UIT.

Dan dient er zowel in rij 1, 2 als 4 de datum van vandaag geplaatst te worden, in rij 3 komt er dan niets.
 
Wat de knoppen moeten doen kun je zelf invullen. Mijn voorbeeld betreft alleen het aanroepen van de objecten met maar 1 routine die ze allemaal behandelt. De rest had je zelf ingevuld en heb ik niets aan gewijzigd.
De aan en uit controle staat er in.
 
Laatst bewerkt:
Het is vooral onderstaand stukje die me niet lukt

Set bereik = Columns(1).Find("1")
bereik.Select

Lukt perfect als er op 1 wordt geklikt, maar wat met andere nrs?

waar dien ik dan in te voeren dat dit bv find("2") dient te zijn indien op nr 2 wordt geklikt?
 
Kijk naar de parameter van de functie:
Sub HandleTB(TBnum As Integer)

Daar krijg je het gewenste nummer als variabele TBnum binnen.

Je kunt dus Find(Cstr(TBnum)) gebruiken.
 
Laatst bewerkt:
wanneer ik deze gebruik:

Set bereik = Columns(1).Find(Cstr(TBnum)

krijg ik een syntaxisfout?
 
Klopt. Je mist een haakje sluiten ")"
 
tja, het zit soms in een klein hoekje :) Bedankt !!!

enige dat ik nu nog heb is als ik bv 1 selecteer en save komt datum 4x in rij 1.

Als ik wisselknop 2 selecteer en save komt datum 1x in rij 2 maar ook 3x in rij 1?
 
Plaats je huidige document eens.
 
Je verwacht dus dat ik er wel uit kom? ;)
 
Ik begrijp nog steeds niet de precieze bedoeling, maar probeer het zo eens.
Bekijk bijlage wisselknoppen.xlsm

De code voor het plaatsen van een datum werd altijd uitgevoerd. Nu alleen als het moet.
Ik heb dus een Exit Sub toegevoegd.

Ook de kleur van de overige wisselknoppen en de schermupdate heb ik geregeld.
Het wijzigen van de kleur heb ik anderes geregeld dan het was. Kijk er maar eens naar.

het volgende mag ook en heb ik voor je aangepast.
In plaats van: If Object.Value = True Then
Mag je ook schrijven: If Object Then

Dat heb ik ook gewijzigd.
De tegenhanger ervan is: If Not Object Then
 
Laatst bewerkt:
Als ik je toch nog even mag storen:

Alles doet het zoals ik het wil, waarvoor nogmaals heel veel dank.

Echter bij uitbreiding neemt hij rij 10 wanneer ik 1 neem,
en als er bv een nummer niet in voorkomt geeft hij foutmelding...

Het zal zo zijn dat er bv nummers 1 tem 100 zijn,
maar 40 tem 60 zullen niet worden gebruikt.

Kan er dan voor gezorgd worden dat deze foutmelding er niet komt?
 
Laatst bewerkt:
Wijzig deze regel:
Set bereik = Columns(1).Find(Cstr(nummer))

In:
Set bereik = Columns(1).Find(nummer, lookat:=xlWhole)


Verder is het wel de bedoeling dat de nummers van de wisselknoppen opeenvolgend zijn.
Nummers die je niet gebruikt zal je in de loop moeten uitsluiten.

Of je wijzigt de regel:
nummerwaarde = Me.Controls("ToggleButton" & nummer)

In:
Code:
    On Error Resume Next
    nummerwaarde = Me.Controls("ToggleButton" & nummer)
    If Err.Number > 0 Then
        Exit Sub
    End If
    On Error GoTo 0

Maar dat is minder netjes.
 
Laatst bewerkt:
Graag gedaan :)
 
collega excel liefhebbers,

mijn file zo goed als klaar voor verschillende doelleinden.

één ervan bevat echter nrs die boven 100000 gaan en hierbij krijg ik foutmelding van "overloop".

Is er iets waarmee ik dit kan verhelpen?
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan