Sama lista useisiin ComboBoxeihin VBA:lla?

Taul1:ssä esim. 20 ComboBoxia. Kuinka saadaan kaikkiin compoihin sama lista lyhyemmällä koodilla, ettei tarvi jokaista compoa erikseen määritellä samoilla listakohteilla? (Alla esimerkki). For...Next?

With Taul1.ComboBox1
.AddItem ("Yksi")
.AddItem ("Kaksi")
....jne....
End With

With Taul1.ComboBox2
.AddItem ("Yksi")
.AddItem ("Kaksi")
....jne.......

Kiitos!
4118
Äänestä

Muut lukivat myös

Vastaukset 4

Vanhimmat

vaihda taulukon nimi sopivaksi ja luetteloalue nyt A1:AXXXXXX
Option Explicit
Sub Täytä()
Dim OLEobj As Object
Dim Lista As Variant
Lista = Sheets("Sheet1").Range("A1", Sheets("Sheet1").Range("A65536").End(xlUp))
For Each OLEobj In ActiveSheet.OLEObjects
If TypeName(OLEobj.Object) = "ComboBox" Then
OLEobj.Object.List = Lista
End If
Next OLEobj
End Sub

Keep EXCELing
@Kunde

Äänestä

Kiitos paljon!

Sain toimimaan seuraavalla muutoksella. Compokohteet sijaitsevat B50:B60.

Lista = Sheets("Sheet1").Range("B50:B60")

Alkuperäinen pätkä:
Lista = Sheets("Sheet1").Range("B50", Sheets("Sheet1").Range("B60").End(xlUp))

..listaa vain rivit B49:B50, eli yhtä riviä liian ylhäältä ja vain kaksi kohdetta.
Käytössäni on Excel 2003 versio, olisiko sillä vaikutusta asiaan?

Tietysti nyt kaikkissa taulukon kompoissa on sama lista ja taulukossa on kaksi muuta compolistaa, mutta ne määritellään nyt erikseen käyttäen ensin .Clear toimintoa :)

Pistän haastetta :) Kuinka määritellään sitten useampi comporyhmä eri listoilla? Eli compot 1-10 Lista1, compot 11-20 Lista2, compot 21-30 Lista3 jne...

Äänestä
  • Alkuperäinen pätkä:
    Lista = Sheets("Sheet1").Range("B50", Sheets("Sheet1").Range("B60").End(xlUp))

    ..listaa vain rivit B49:B50, eli yhtä riviä liian ylhäältä ja vain kaksi kohdetta.
    Käytössäni on Excel 2003 versio, olisiko sillä vaikutusta asiaan?

    EI
    Sheets("Sheet1").Range("B60").End(xlUp)
    ko. koodin pätkä valitsee solun B49 eli sinulla on solussa B49 joku arvo jolloin valinnaksi tulee koodissa Lista = Sheets("Sheet1").Range("B50", Sheets("Sheet1").Range("B60").End(xlUp)) B50:B49...

    eli muutat sitä arvoa B61 tai tarpeeksi kauaksi. Tietenkin jos sulla listat allekkain silloin ainut keino on hard codeta ne tyyliin Lista = Sheets("Sheet1").Range("B50:B60") kuten olet tehnyt


    no haasteeseen sitten...
    ei siinä tartte kummosta lisäystä

    Option Explicit
    Sub Täytä()
    Dim OLEobj As Object
    Dim Lista1 As Variant
    Dim Lista2 As Variant
    Dim Lista3 As Variant
    Lista1 = Sheets("Sheet1").Range("B50", Sheets("Sheet1").Range("B600").End(xlUp))
    Lista2 = Sheets("Sheet1").Range("C50", Sheets("Sheet1").Range("C600").End(xlUp))
    Lista3 = Sheets("Sheet1").Range("D50", Sheets("Sheet1").Range("D600").End(xlUp))
    For Each OLEobj In ActiveSheet.OLEObjects
    If TypeName(OLEobj.Object) = "ComboBox" Then
    Select Case Mid(OLEobj.Name, 9)
    Case 1 To 10
    OLEobj.Object.List = Lista1
    Case 11 To 20
    OLEobj.Object.List = Lista2
    Case 21 To 30
    OLEobj.Object.List = Lista3
    End Select
    End If
    Next OLEobj
    End Sub


    keep EXCELing
    @Kunde

    Äänestä

Kolahti :)

Kiitos!

Äänestä

Kommentoi aloitusta


Excelsson kirjoitti:

Taul1:ssä esim. 20 ComboBoxia. Kuinka saadaan kaikkiin compoihin sama lista lyhyemmällä koodilla, ettei tarvi jokaista compoa erikseen määritellä samoilla listakohteilla? (Alla esimerkki). For...Next?

With Taul1.ComboBox1
.AddItem ("Yksi")
.AddItem ("Kaksi")
....jne....
End With

With Taul1.ComboBox2
.AddItem ("Yksi")
.AddItem ("Kaksi")
....jne.......

Kiitos!

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu