Loop gebruiken in de namen van Comboboxen

Status
Niet open voor verdere reacties.

andyraes

Gebruiker
Lid geworden
18 aug 2011
Berichten
13
Zou er mij iemand kunnen helpen met volgend probleem aub:
Op 1 excel-blad heb ik 50 comboboxen staan. Nu zou ik deze allemaal moeten leeg maken en onzichtbaar maken via een loop.

Ik heb dit al terug gevonden via For Each Combobox... maar dit kan ik hier niet gebruiken aangezien niet alle comoboxen op dit tabblad moeten gewist/onzichtbaar gemaakt worden.

Vb: (blad bevat 50 Comboboxen met benaming: comobox1, combobox2,..., comobox50)

Code:
i=10
Do While i<51 then
Sheets("blad1").Combobox[COLOR="#FF0000"]&i&[/COLOR].Value=""
Sheets(blad1").Comobox[COLOR="#FF0000"]&i&[/COLOR].Visible=False
Loop

Afhankelijk van waar men zich in het excelblad bevindt zal ik dan de "start" i-waarde wijzigen waardoor er meer of minder comoboxen moeten gewist/onzichtbaar gemaakt worden.
Weet er iemand hoe ik bovenstaande code wel kan doen werken aub? Ik heb al veel geprobeerd maar weet niet hoe ik een variabele in een naam van een combobox kan gebruiken.
 
Laatst bewerkt door een moderator:
Je kunt wel door de collectie lopen met een lus. Simpel voorbeeldje:
Code:
Sub test()
Dim obj As OLEObject
Dim sName As String
    For Each obj In ActiveSheet.OLEObjects
        sName = obj.Name
        MsgBox ActiveSheet.OLEObjects(sName).Object.Value
    Next
End Sub
 
Ik veronderstel dat dit dus niet mogelijk zal zijn om de naam van de combobox te gebruiken in de loop.

A.d.h. van uw voorbeeld kan ik echter wel verder.
Via de Split-functie kan ik de nummers af zonderen en dan hier de voorwaarden op toepassen!

Bedankt voor het snelle antwoord
 
Krijg je zoiets:

Code:
    For Each obj In ActiveSheet.OLEObjects
        sName = obj.Name
        If Left(obj.Name, 8) = "ComboBox" Then
            i = i + 1
            If i >= 10 And i <= 50 Then
                cbo = "ComboBox" & i
                Sheets("blad1").OLEObjects(sName).Object.Value = ""
                Sheets("blad1").OLEObjects(sName).Object.Visible = False
            End If
        End If
    Next
 
@Octafish


Dit is perfect wat ik zocht. Ik was het terug veel te moeilijk aan het maken.
'K ben dan ook nog een beginner in VBA hé...

Bedankt voor de supersnelle reacties!
 
Ik merk dat uw code toch niet volledig werkt (het deel met Visible werkt niet) maar heb deze zelf kunnen aan passen.

Zie hieronder de code:

Code:
 For Each obj In ActiveSheet.OLEObjects
        sName = obj.Name
        If Left(obj.Name, 8) = "ComboBox" Then
            i = i + 1
            If i >= 10 And i <= 50 Then
                Sheets("blad1").OLEObjects(sName).Object.Value = ""
                Sheets("Blad1").Shapes(sName).OLEFormat.Object.Visible = True           
            End If
        End If
    Next
 
Laatst bewerkt door een moderator:
Code:
Sub M_snb()
    For Each ob In Blad1.OLEObjects
        If TypeName(ob.Object) = "ComboBox" Then
          ob.Visible = True
          ob.Object.Value = 12
        End If
    Next
End Sub
 
Daarmee pakt hij ook de comboboxen Combobox1 t/m Combobox9 en Combobox50 t/m Combobox9999....
 
@Octa

De suggestie was om te illustreren hoe je de test of een oleobject een combobox is of niet eenvoudig kunt uitvoeren en dat de eigenschap visible een eigenschap van het oleobject is en de eigenschap value van het in het oleobject opgenomen object is.
1000 comboboxen lijken mij een beetje veel in een werkblad......

Als je een kant en klare oplossing wil:

Code:
Sub M_snb()
    For j = 10 To 50
        With Sheet1.OLEObjects("combobox" & j)
            .Visible = True
            .Object.Value = ""
        End With
    Next
End Sub
 
@ Octa & snb:

=> Bedankt voor beide oplossingen. De oplossing van snb zal wel iets sneller werken (blad bevat +/- 300 Comboboxen...) waardoor ik voor deze oplossing zal kiezen.

Beide bedankt voor jullie antwoord!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan