Volgnummer van CommandButton Userform verkrijgen

Status
Niet open voor verdere reacties.

Soundslave9

Gebruiker
Lid geworden
10 nov 2018
Berichten
17
Hoi,

Ik wil graag het volgnummer van de commandsbuttons in een userform gebruiken in een click-event code.
Heb al best lang gezocht maar kan het niet vinden.

Als de commandbutton waarop geklikt word CommandButton17 is, het nummer 17 gebruiken om bijvoorbeeld in een cel weg te schrijven.

Omdat ik best veel Buttons heb wil ik het graag op deze manier doen.

Vriendelijke groetjes
 
Waar staan die knoppen? Op een formulier? In dat geval kun je het nummer wel uitlezen in de procedure die je uitvoert. Leg even uit, liefst uiteraard met een voorbeeldbestandje, wat de bedoeling is.
 
De knoppen staan zoals gezegd in een userform.

Bijgaand een klein voorbeeldbestandje.

Groetjes.
 

Bijlagen

Zo:
Code:
Private Sub CommandButton1_Click()
    GetButtonName
End Sub

Private Sub CommandButton14_Click()
    GetButtonName
End Sub

Private Sub GetButtonName()
    Sheets("Blad1").Range("G11") = Replace(Me.ActiveControl.Name, "CommandButton", "")
    Unload Me
End Sub
 
Laatst bewerkt:
Hey bedankt, werkt super!!

Had al zoveel zoekopdrachten in google getypt, maar er kwam niks uit.

Nogmaals bedankt!!
 
Graag gedaan.
En dat is het grote voordeel van een goed voorbeeld documentje :)
 
Dit lijkt me simpeler:

Code:
Private Sub CommandButton1_Click()
    Cells(11, 7) = 1
End Sub

Private Sub CommandButton2_Click()
    Cells(11, 7) = 2
End Sub

Geef de knoppen een 'caption' in de ontwerpmodus, niet in de Initialize-gebeurtenis.
 
Uiteraard is dat simpeler, maar ik wilde laten zien hoe je aan de naam van het aangeklikte object kan komen.
 
Wat snb zegt is natuurlijk waar als er maar een beperkt aantal knoppen zijn.

Maar het gaat hier over 100+ buttons, die staan allemaal voor een genummerde opslagplek. Toevallig zijn die dus ook gewoon genummerd vanaf 1 tot meer dan 100.

Daarom wou ik het graag zo doen, zodat ik de code makkelijk kan plakken in het event voor iedere button. Dat lijkt mij dan weer simpeler dan bij ieder event de nummers in gaan vullen.


Dus bedankt edmoor!
 
Nee hoor, dan kun je beter met een klasse werken.

Maar waarom geen combobox met alle nummers van oplagplekken erin; dan hoef je maar te selecteren en je bent klaar.
 
Met klasse bedoel je een klassemodule?
Ja zover ben ik nog niet helemaal met vba. Ik vind op dit moment deze oplossing best goed. Als ik er wat meer in thuis geraak kan ik misschien die klasse-module erin gaan zetten.
Maar voor mij is veel nog af en toe abracadabra...

En waarom ik voor die knoppen heb gekozen ipv een combobox heeft er o.m. mee te maken dat er sommige mensen mee gaan werken die nog amper met een computer gewerkt hebben. Het management bij ons wil nu alles direct digitaal zonder tussenkomst van nog enig papierwerk.
Het eerste userform-blad start beeldvullend met excel op (en wil ik ook steeds op de achtergrond houden), zodat de 100+ knoppen er makkelijk op passen, gemakkelijk van boven naar beneden aflopend van 1 t/m 10, volgende "kolom 11 t/m 20 etc. Best overzichtelijk. Gewoon op het gewenste nummer/knop klikken en klaar.
 
@ed

Kan ook met:

Code:
Dim Knoppen() As New clsKnop

Private Sub UserForm_Initialize()
    ReDim Knoppen(Controls.Count)
    
    For Each it In Controls
        If TypeName(it) = "CommandButton" Then Set Knoppen(it.TabIndex).Knp = it
    Next
End Sub
en
Code:
Public WithEvents Knp As MSForms.CommandButton

Private Sub Knp_Click()
    Blad1.Cells(11, 7) = Knp.TabIndex
End Sub
 
Laatst bewerkt:
Keurig :thumb:
Meteen overgenomen in mijn eigen voorbeelden :)
 
Laatst bewerkt:
dmoor & snb,

Wat fijn dat jullie er even op doorgaan, leer ik veel van en ik ga het ook wel aanpassen denk ik als ik tijd heb. Maar helaas kan ik er maar af en toe echt aan werken en ben niet al te snel in vba (veel op-/uitzoeken en trial en (vooral) error ;)

@snb: het woordje it in je code kan ik even niet plaatsen. Heb gezocht of het een keyword van vba is ( en ik dacht dat het dan staat voor Item of Iterate?) maar volgens mij niet. Ik vraag het me af omdat ik je nergens een declaratie voor it zie gebruiken, of wordt "it" impliciet in "For Each it In Controls" gedeclareerd en als wat wordt het dan gedeclareerd?

Trouwens stel dat ik nog wat extra knoppen wil voor andere opdrachten en deze dus niet in de code voor het volgnummer te verkrijgen wil betrekken, hoe zouden jullie dat doen?

Ik denk iets van

Code:
If it.TabIndex is >140 then "not set Knoppen".......;)

in de code van snb.

Of in de code van edmoor:

Code:
If knpCount > 140 then "not set Knoppen"....hmm;)

Het "not set knoppen" weet ik dus zo snel even niet maar dat is jullie wel duidelijk ;)

Groetjes
 
Dat zou ik dan zo doen:
Code:
Private Sub UserForm_Initialize()
    ReDim Knoppen(Controls.Count)
    
    For Each it In Controls
        If TypeName(it) = "CommandButton" And it.TabIndex < 140 Then Set Knoppen(it.TabIndex).Knp = it
    Next
End Sub

Het woordje it is overigens een variable van het type Object die door de For Each opdracht wordt gemaakt.
Die mag je dus desgewenst ook wijzigen in Soundslave9.

Het is niet verplicht om variabelen te declareren zolang je geen Option Explicit gebruikt.

Tevens is in jouw formulier de TabIndex altijd 1 lager dan de naam van het object.
Dus CommandButton1 zal TabIndex 0 zijn, wanneer je in de eigenschappen die TabIndex niets hebt gewijzigd en er geen andere objecten met een TabIndex aanwezig zijn.
De TabIndex geeft de volgorde aan waarmee je middels de Tab toets van object naar object springt en begint altijd te tellen bij 0.
 
Laatst bewerkt:
Wederom bedankt he

Als ik wat meer tijd heb ga ik het proberen.

Ik had al zo'n vermoeden dat "it" een zelfgekozen woord is maar twijfelde ivm het ontbreken van een declaratie.

Bedankt voor de reminder mbt de TabIndex. Wist het wel maar zou er waarschijnlijk niet meer aan gedacht hebben ;)
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan