Store Subname in container

Status
Niet open voor verdere reacties.

pollekecrown

Gebruiker
Lid geworden
22 dec 2010
Berichten
71
Ik heb een checkbox gemaakt die o.a. een sub aanroept die rijen verbergt/zichtbaar maakt. Deze is nu als volgt:

Code:
Private Sub chbToiletSloopwerk_Click()
    Dim Checkbox, LinkCell, Caption
    
    Checkbox = chbToiletSloopwerk.Value
    LinkCell = chbToiletSloopwerk.LinkedCell
    Caption = chbToiletSloopwerk.Caption
    
    Call ToggleItemRows(Checkbox, LinkCell, Caption)

End Sub

Nu wil ik graag de private sub opslaan in een container die ik vervolgens kan aanroepen, zodat ik maar één waarde hoef te veranderen. Onderstaand een voorbeeld van de bedoeling.

Code:
Private Sub chbToiletSloopwerk_Click()
    Dim Checkbox, LinkCell, Caption
    
Set container = chbToiletSloopwerk

    Checkbox = container.Value
    LinkCell = container.LinkedCell
    Caption = container.Caption
    
    Call ToggleItemRows(Checkbox, LinkCell, Caption)

End Sub

Ik krijg het niet voor elkaar, maar geloof dat het wel mogelijk is. Kan iemand mij misschien helpen?
 
Hoi,
Net zoals in je postje van 19:02 is je vraag nog altijd even onduidelijk, post eens een vb bestandje
 
Voorbeeld bestand gekoppeld. In het script staat een toelichting wat mijn doel is. Wat ik wil bereiken is dat het script onafhankelijk wordt van het element/object, zodat ik het kan kopiëren en hierbij geen wijzigingen hoef aan te brengen in het script. Moet hetzelfde script voor 50-60 elementen gebruiken.

Sorry voor de onduidelijke uitleg, hoop dat het zo beter is.

groet Paul
 

Bijlagen

Hallo Eric,

Kan het zijn dat hij bij mij niet goed werkt?

Ik heb wel gekeken wat je doet en als ik het goed heb vang je alle checkboxen af - met de class module - om automatisch de sub uit te voeren, dit klopt toch?

Stel dat het wel werkt, is het dan mogelijk om voor de checkboxen die een andere sub moeten uitvoeren wel een on_click event te laten uitvoeren ipv de class module?
 
Draai eerst de macro "ZetInClass"
Deze macro kun je dan bijv. in een workbook open event zettten

werkt het dan wel?
 
Hallo Erik,

Dan werkt het inderdaad. Het probleem is echter dat het script niet op alle checkboxen van toepassing moet zijn. Als bijlage heb ik een bestandje toegevoegd met hierin een derde checkbox. Hier heb ik een on_click event met MsgBox toegevoegd. In dit geval wil ik dat alleen dit script wordt uitgevoerd en niet het centrale. Is dit mogelijk?

Groet Paul
 

Bijlagen

snb,

Volgens mij is de oplossing via jouw link eenzelfde oplossing, klopt dit.

Betekent dit dat het niet mogelijk is
1. een referentie naar de active checkbox te gebruiken (dus actieveCheckbox.Caption, etc.)
2. de naam van het element op te slaan in een variabele en vanuit hier deze variabele verder te gaan (dus variabele.LinkedCell, variabele.Caption, etc.)

Graag jullie input. Want als dit gewoon niet mogelijk is, hoef ik hier ook niet verder naar te zoeken ;-) Alvast bedankt.

Groet Paul
 
Bestudeer die pagina eerst eens goed. Dan verdwijnen je vragen als sneeuw voor de zon.

PS. In het Nederlands kun je geen ontkennende vragen eenduidig beantwoorden. Stel ze dan ook altijd in positieve vorm.
 
uiteraard is dit mogelijk,
Zorg dat dan die ene Checkbox op basis van bijv. naam niet wordt opgenomen in de collection/class
 
Ik heb het bestudeerd maar zie nog te veel sneeuw ;-)

Het gaat ook om meerdere checkboxen die niet meegenomen moeten worden, dus wordt het dan niet veel beheer op een andere locatie? Kun je misschien een voorbeeldje maken hoe je de checkbox kunt uitsluiten van de class module?

Ondertussen heb ik wel een mogelijkheid gevonden om de sub Name toe te wijzen aan een variabele en deze in het verder script te gebruiken. Dit brengt het aanpassen van het script terug naar één waarde, wat al veel efficiënter en minder foutgevoelig is. Het bestandje met voorbeeld heb ik als bijlage toegevoegd en onderstaand het script:

Code:
Private Sub CheckBox2_Click()

    Dim newName As MSForms.CheckBox
    Set newName = CheckBox2 

    Call Uitvoeren(newName)
    
End Sub

Als het nu ook nog mogelijk is om de sub naam via script op te halen? Op internet vond ik het volgende script, maar helaas werkt dit niet:
Code:
Application.VBE.ActiveCodePane.CodeModule.Name

groet Paul
 

Bijlagen

Het probleem is echter dat het script niet op alle checkboxen van toepassing moet zijn.

reaktie op post#8

zie voorbeeldje:
meerdere wegen naar Rome:
- of je vangt het af in de klasse (zoals nu in vb)
- of je zorgt ervoor dat de betreffende checkboxen niet worden meegenomen in de klasse)
- of ...
 

Bijlagen

Hoi Eric,

Mooie oplossing zo. Ik ga nog nadenken of ik deze ga gebruiken of het toch via het click event ga inrichten. Hoe dan ook bedankt voor jullie hulp hierbij, heb er weer erg veel van geleerd.


Als iemand nog een oplossing weet om in een private sub de sub naam op te halen via script dan zou ik dit nog erg graag willen horen :)

gr paul
 
Als iemand nog een oplossing weet om in een private sub de sub naam op te halen via script dan zou ik dit nog erg graag willen horen :)

Makkelijkste methode: Geef iedere Sub de naam van de sub mee in een variabele

Dit brengt het aanpassen van het script terug naar één waarde, wat al veel efficiënter en minder foutgevoelig is

Mwahhh...eerder het tegenovergestelde, ik zou het bij een Klasse houden;)
 
Ik begrijp je vraag niet helemaal, als je via _click binnenkomt weet je toch dat de _click sub is aangeroepen?

Ik probeer te begijpen hoe het je verder zou helpen om je doel te bereiken. Als je de begininformatie wil meegeven zoek je mischien de "Sender" variabele?
 
Ik begrijp je vraag niet helemaal, als je via _click binnenkomt weet je toch dat de _click sub is aangeroepen?

Ik probeer te begijpen hoe het je verder zou helpen om je doel te bereiken. Als je de begininformatie wil meegeven zoek je mischien de "Sender" variabele?

Misschien wel, hoe kan ik de sender informatie gebruiken?

Natuurlijk weet ik dat de _click sub is aangeroepen, maar bij elke sub moet ik de sub naam in mijn script aanpassen. Als de subnaam automatisch wordt opgehaald dan kan ik het script gewoon 50-60 keer kopiëren zonder iets te hoeven aanpassen. Ik heb mijn script nu teruggebracht tot:
Code:
Private Sub naam()

call subnaam(Private sub naam)

End Sub

'en dan ga ik in de sub verder
Sub (subnaam)
    subnaam.Caption
   subnaam.LinkedCell
End Sub

Nu wil ik alleen die Sub naam nog vervangen door een variabele, zodat ik die ook niet meer hoef aan te passen als ik het script kopieer.
 
Laatst bewerkt:
Maar je weet toch wat het originele object is? Het enige wat VBA doet is ook een object met een sub koppelen. Het voorbeeld van Eric heeft een sub met een CASE structuur waarbij je aan de hand van de checkbox in een sub verschillende dingen kan doen.

Het weten wat de sub naam is voegt niet meer informatie toe. Als je sub wordt gestart door "checkbox21" dan was de aanroepende originele call "checkbox21_click" ?
 
Als het enkel gaat om het Click event : Gebruik dan de Check Box uit de form controls ipv ActiveX controls, dan kun je application.caller gebruiken
 
Als het enkel gaat om het Click event : Gebruik dan de Check Box uit de form controls ipv ActiveX controls, dan kun je application.caller gebruiken

Dit zou werken ware het niet dat form controls zich niet aanpassen aan het formaat van de cel. Dus als ik een rij met het form control verberg, dan verbergt het form control niet mee. Optie is dus niet bruikbaar voor wat ik ermee wil.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan