Keuzerondje ActiveX deselecteren

Status
Niet open voor verdere reacties.

Plotinus

Gebruiker
Lid geworden
25 mrt 2007
Berichten
649
Ik heb in een werkblad (Excel 2007/10) een groot aantal keuzerondjes (ActiveX) geplaatst. Nadat er een is geselecteerd en er vervolgens een actie is uitgevoerd, zou ik graag weer in het betreffende werkblad terugkeren waarbij het keuzerondje is uitgeschakeld; of beter dat alle keuzerondjes weer volledig wit zijn. Iemand een idee hoe dit aan te pakken? Ik heb al een tijd op internet zitten zoeken maar nog geen bevredigend antwoord gevonden.
 
Dat zijn OLE objecten en daar kun je op de volgende manier doorheen wandelen om iets mee te doen, deselecteren bijvoorbeeld:
Code:
    Dim OleObj As OLEObject
     
    For Each OleObj In ActiveSheet.OLEObjects
        OleObj.Object.Value = False
    Next OleObj
 
Dit werkt inderdaad, maar wel wat al te enthousiast, want het grijpt ook in op andere stuurelementen. Weet je toevallig ook hoe ik het aanpas naar alleen keuzerondjes?
 
Zo kun je ze per stuk op naam benaderen:
Code:
Sub ClearOptionButtons()
    Dim OleObj As OLEObject
     
    For Each OleObj In ActiveSheet.OLEObjects
        If OleObj.progID = "Forms.OptionButton.1" Then
            Select Case OleObj.Name
                Case "OptionButton1"
                    OleObj.Object.Value = False
                    
                Case "OptionButton2"
                    OleObj.Object.Value = False
            End Select
        End If
    Next OleObj
End Sub

Dus inclusief nog een stapje verder dan wat je vroeg.
 
Laatst bewerkt:
Het spijt me, het werkt niet. Zou het kunnen dat het verkeerde keuzerondje zoekt: ik gebruik de Active-X in plaats van keuzerondje formulierbesturingselement
 
Sorry, ik was te snel: het werkt wel, maar alleen voor keuzerondje 1 en 2, ik heb er echter 75...
 
M'n voorbeeld lijkt me toch duidelijk genoeg om hem eenvoudig aan je eigen situatie aan te passen. Als je echt niet weet wat er dan moet gebeuren kun je beter je document plaatsen zodat de code in 1 keer aan je eigen situatie kan worden aangepast. Anders blijf je heen en weer berichten.

Maar het is veel belangrijker om te kijken in dat voorbeeldje of je begrijpt wat daar nou precies gebeurd en dan kun je dat heel eenvoudig aanpassen naar je eigen wensen. Alles zit er in om dat te doen. Zoek bijvoorbeeld eens op wat "Forms.OptionButton.1" betekend, dan kom je bijvoorbeeld hier terecht en zie je dat het wel degelijk gaat om de ActiveX controls en niet om Form besturingselementen:
http://msdn.microsoft.com/en-us/library/office/aa272504(v=office.10).aspx

Deze zet bijvoorbeeld alle keuzerondjes op "Niet geselecteerd":
Code:
Sub ClearOptionButtons()
    Dim OleObj As OLEObject
     
    For Each OleObj In ActiveSheet.OLEObjects
        If OleObj.progID = "Forms.OptionButton.1" Then
            OleObj.Object.Value = False
        End If
    Next OleObj
End Sub
 
Laatst bewerkt:
Ik snap niet dat Ed een oplossing geeft met Select Case, want zo ben je inderdaad wel even bezig. Je kunt makkelijk met IF Left(OleObj.Name,12) = "OptionButton") controleren of het om een OptionButton gaat of niet. En dan de waard FALSE maken.
 
Al je goed leest staat de select case erin als voorbeeld hoe je de objecten per stuk kunt bereiken. Om alle keuzerondjes op False te zetten is dat uiteraard niet nodig en IF Left(OleObj.Name,12) = "OptionButton") ook niet. Snap je het nu wel?
 
Laatst bewerkt:
Tegen wie heb je het nu?
Code:
    For Each OleObj In ActiveSheet.OLEObjects
        If Left(OleObj.name,12) = "OptionButton" Then
            OleObj.Object.Value = False
        End If
    Next OleObj
Lijkt mij een legitieme oplossing...
 
Dt kan ook maar ik gebruik liever de OleObj.progID en zo staat dat ook in mijn voorbeeld.
 
En dit is een ander voorbeeld :). Je hebt toch hopelijk niks tegen alternatieven?
 
Ik vind het ontzettend sympathiek dat jullie mij helpen aan de meest elegante code om deze uitdaging het hoofd te bieden. Ik heb nu even geen tijd om te testen, maar zo te zien moeten beide oplossingen werken.

Even ingaand op de opmerking van Ed: ja mijn kennis van VBA is nog beperkt, maar groeit snel. Probleem is dat ik een concrete klus onder handen heb waar ik steeds meer functionaliteit in steek en verfraai en tegelijkertijd in een boek over VBA voor Excel 2007 (Reed Jacobsen) 'studeer' om mijn kennis op dit vlak bij te spijkeren en internet afzoek naar wat ik nodig heb. Gelukkig kan ik ook terugvallen op dit fantastische forum en heb ik er begrip voor dat mijn vragen soms wat wrevel oproepen wegens de eenvoud voor de echte specialist.
 
Vandaar dat ik een wat uitgebreider voorbeeld gaf dan waar je in eerste instantie om vroeg. En uiteraard kun je met alle vragen hier terecht. Ook als het gaat om vragen m.b.t. gegeven voorbeelden :)


@Octafish:
Nee, ik heb niks tegen alternatieven. Zolang ze maar netter en/of beter zijn dan m'n eigen voorbeeld :p
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan