Hallo

Welkom, Gast. Alsjeblieft inloggen of registreren.

Recent

215 gasten, 0 leden

Welkom, Gast. Alsjeblieft inloggen of registreren.

28 maart 2024, 18:47:47

Login met gebruikersnaam, wachtwoord en sessielengte

Nieuws

Welkom op het vernieuwde NL Computer Forum!

Auteur Topic: VBA: Excel-Combobox  (gelezen 23761 keer)

0 leden en 1 gast bekijken dit topic.

Offline NLCOMP

  • Forumheld
  • *****
  • Berichten: 14.666
    • NL Computer Forum
VBA: Excel-Combobox
« Gepost op: 11 november 2009, 23:11:44 »
Bericht 1 van 11

NL Computer Forum ~ Word, Excel & Office
Van:Stefan de Best (Sysop)Datum:20-11-2007
Aan:AllenMsgID:3636.1
Onderwerp:VBA: Excel-ComboboxForum:ws-nlcomputer

Hoi,
Ik heb in Excel een werkblad met daarop een lijst met namen, een ComboBox en een Tekstvak (een Autovorm).
Wat ik graag zou willen is dat de ComboBox bij het openen van het Excel-bestand automatisch wordt gevuld met de lijst met namen.
Daarna zou ik graag willen dat bij het kiezen van een naam uit de ComboBox, dat deze in een bestaande tekstvak (een Autovorm, dus geen cel) op hetzelfde werkblad wordt gekopieerd. Is dat mogelijk?
BvD

S t e f a n

    Overzicht van 150 oude en minder bekende zwemslagen
    http://tinyurl.com/yuojv[/]
 


Bericht 2 van 11

NL Computer Forum ~ Word, Excel & Office
Van:Michel Uphoff (Sysop)Datum:21-11-2007
Aan:Stefan de Best (Sysop)MsgID:3636.2
Onderwerp:VBA: Excel-ComboboxForum:ws-nlcomputer

Hoi Stefan,
Dat moet wel lukken. Voorbeeldje, de volgende elementen zijn aanwezig:
    Een commandbutton (voor een click-event), maar je mag natuurlijk straks een ander event uitkiezen. CommandButton1 Een listbox, ListBox1 die leeg is. Een textbox, TextBox1 die leeg is Een lijst met namen, het cellenbereik van die lijst heb ik even een naam gegeven, maar je kan het ook anders oplossen. Het bereik heeft NamenLijst.
Met onderstaande twee stukjes VBA code moet het dan in principe lukken. Het eerste stukkie plaats de namen uit het aangegeven bereik in de listbox, en het tweede stuk plaats na kiezen van een van de namen uit de listbox de waarde in de tekstbox.
Private Sub CommandButton1_Click()
Set RangeNameList = Range("NamenLijst").Cells
Worksheets(1).Select
With Worksheets(1)
For Each cell In RangeNameList
ListBox1.AddItem cell.Value
Next cell
End With
End Sub


Private Sub ListBox1_Click()
TextBox1.Text = ListBox1.Value
End Sub

Kan nog veel aan verbeterd worden, maar dit is denk ik wel het principe.

Michel Uphoff (NLcomputer)
Homepage



Bericht 3 van 11

NL Computer Forum ~ Word, Excel & Office
Van:Stefan de Best (Sysop)Datum:21-11-2007
Aan:Michel Uphoff (Sysop)MsgID:3636.3
Onderwerp:VBA: Excel-ComboboxForum:ws-nlcomputer

Hoi Michel,
>> Kan nog veel aan verbeterd worden, maar dit is denk ik wel het principe.  <<
Dat is inderdaad het principe. De volgende wensen heb ik dan nog, gebaseerd op jouw code:
    Dat de ListBox wordt vervangen door een ComboBox (= gedaan!).Dat de ComboBox wordt geleegd vóórdat deze gevuld wordt (= gedaan!). Dat de ComboBox automatisch wordt gevuld zodra het Excel-bestand wordt geopend. Dat een gekozen naam uit de ComboBox wordt weergegeven in een Tekstvak (zie tekenfunctie van Excel). Dus NIET in het besturingselement TextBox.[/][/list]Ik hoop dat vooral puntje 4 mogelijk is!
    Dit is wat ik nu aan code heb:
    Private Sub CommandButton1_Click()
        Deelnemers1.Clear
        Set RangeNameList = Range("J12", "J20").Cells
        Worksheets(1).Select
        With Worksheets(1)
            For Each cell In RangeNameList
                Deelnemers1.AddItem cell.Value
            Next cell
        End With
    End Sub

    Private Sub Deelnemers1_Click()
        TextBox1.Text = Deelnemers1.Value
    End Sub
    PS: Deelnemers1 is een ComboBox!

    S t e f a n

        Overzicht van 150 oude en minder bekende zwemslagen
        http://tinyurl.com/yuojv[/]
     


    Bericht 4 van 11

    NL Computer Forum ~ Word, Excel & Office
    Van:Michel Uphoff (Sysop)Datum:21-11-2007
    Aan:Stefan de Best (Sysop)MsgID:3636.4
    Onderwerp:VBA: Excel-ComboboxForum:ws-nlcomputer

    Hoi Stefan,
    3 moet eenvoudig zijn, in plaats van een button click event zou je dan het worksheet activate event kunnen gebruiken. Dus iets als:
    Private Sub Worksheet_Activate()
        Deelnemers1.Clear
        Set RangeNameList = Range("J12", "J20").Cells
        Worksheets(1).Select
        With Worksheets(1)
            For Each cell In RangeNameList
                Deelnemers1.AddItem cell.Value
            Next cell
        End With
    End Sub

    4 is lastiger, het zou denk ik wel moeten kunnen, maar het rottige is dat ik zo snel niet achter de code kan komen die een tekenobject (shape)  kan vullen. MS is nogal verwarrend want een textbox (actief element) heet in Excel tekstvak, terwijl jij het tekenobject tekstvak bedoelt. Ik kijk er nog even naar.


    Michel Uphoff (NLcomputer)
    Homepage



    Bericht 5 van 11

    NL Computer Forum ~ Word, Excel & Office
    Van:Michel Uphoff (Sysop)Datum:21-11-2007
    Aan:Stefan de Best (Sysop)MsgID:3636.5
    Onderwerp:VBA: Excel-ComboboxForum:ws-nlcomputer

    Hoi Stefan,
    4 Moet ook wel lukken. Vreemde manier om een tekstvak (in het voorbeeldje heet het tekstvak1, met "Text spatie Box spatie 1 tussen quotes) aan te roepen, dus daar moest ik even naar zoeken. Dit zou moeten werken.
    Private Sub Deelnemers1_Click()
        ActiveSheet.Shapes("Text Box 1").Select
        Selection.Characters.Text = Deelnemers1.Value
        Range("A1").Select
    End sub

    Range A1 selecteren komt er op neer dat de cursor uit dat tekstvak gehaald wordt en in A1 gezet wordt. Iets moet de focus hebben, en ik denk niet dat jij dat tekstvak geactiveerd wilt zien aan het einde. Wil je dat wel dan die regel verwijderen.

    Michel Uphoff (NLcomputer)
    Homepage


    Gewijzigd 21/11/2007 17:36 CET door Michel Uphoff (Sysop)


    Bericht 6 van 11

    NL Computer Forum ~ Word, Excel & Office
    Van:Stefan de Best (Sysop)Datum:22-11-2007
    Aan:Michel Uphoff (Sysop)MsgID:3636.6
    Onderwerp:VBA: Excel-ComboboxForum:ws-nlcomputer

    Hoi Michel,
    Puntje 4 met die Shape("Text Box 1") werkt precies zoals ik graag wilde. :-) Wat ik alleen moest doen is de 1 vervangen door een 2; er was al een andere shape aanwezig namelijk.
    Wat alleen nog niet wil lukken is die
    Worksheet_Activate() om te zorgen dat de ComboBox automatisch word gevuld bij het openen van het Excel-bestand. Nu blijft de lijst nog steeds leeg. Dit is wat ik nu heb aan code :
    Private Sub Deelnemers1_Click()
        ActiveSheet.Shapes("Text Box 2").Select
        Selection.Characters.Text = Deelnemers1.Value
        Range("J2").Select
    End Sub

    Private Sub Worksheet_Activate()
        Deelnemers1.Clear
        Set RangeNameList = Range("J12:J20").Cells
        Worksheets(1).Select
        With Worksheets(1)
            For Each cell In RangeNameList
                Deelnemers1.AddItem cell.Value
            Next cell
        End With
    End Sub


    S t e f a n

        Overzicht van 150 oude en minder bekende zwemslagen
        http://tinyurl.com/yuojv[/]
     


    Bericht 7 van 11

    NL Computer Forum ~ Word, Excel & Office
    Van:Michel Uphoff (Sysop)Datum:22-11-2007
    Aan:Stefan de Best (Sysop)MsgID:3636.7
    Onderwerp:VBA: Excel-ComboboxForum:ws-nlcomputer

    Hoi Stefan,
    Vervelend onduidelijke events. Je zou denken dat ieder sheet bij opstarten geactiveerd wordt. Nou .. je hebt het gemerkt. Nee dus.
    Dit zou wel moeten werken:
    Private Sub Workbook_Open()
    MsgBox "Ha die Stefan!", vbInformation, "Testje"
    End Sub

    Maar je moet dit macrootje wel in de private sectie zetten. In ThisWorkbook dus. In de VB editor staat ThisWorkbook onderin de project explorer (niet zichtbaar links in beeld? dan Ctrl-R).
    Werkt dat zoals je wilt dan plak je de boel even om in:
     Private Sub Workbook_Open()
        Deelnemers1.Clear
        Set RangeNameList = Range("J12:J20").Cells
        Worksheets(1).Select
        With Worksheets(1)
            For Each cell In RangeNameList
                Deelnemers1.AddItem cell.Value
            Next cell
        End With
    End Sub



    Michel Uphoff (NLcomputer)
    Homepage



    Bericht 8 van 11

    NL Computer Forum ~ Word, Excel & Office
    Van:Stefan de Best (Sysop)Datum:23-11-2007
    Aan:Michel Uphoff (Sysop)MsgID:3636.8
    Onderwerp:VBA: Excel-ComboboxForum:ws-nlcomputer

    Hoi Michel,
    Ja, de test met de MsgBox werkt. Na het omkopiëren wordt de procedure (Workbook_Open) nu inderdaad gestart, maar treed er een foutmelding op bij de eerste regel: Object vereist.
    Vóór Deelnemers.Clear moet volgens mij nog iets staan; een verwijzing naar de combobox in een 1ste sheet. Iets in de trant van: Worksheet.Deelnemers1.Clear
    Zoiets denk ik tenminste. Weet jij precies hoe of wat?

    S t e f a n

        Overzicht van 150 oude en minder bekende zwemslagen
        http://tinyurl.com/yuojv[/]
     


    Bericht 9 van 11

    NL Computer Forum ~ Word, Excel & Office
    Van:Michel Uphoff (Sysop)Datum:23-11-2007
    Aan:Stefan de Best (Sysop)MsgID:3636.9
    Onderwerp:VBA: Excel-ComboboxForum:ws-nlcomputer

    Hoi Stefan,
    >> Zoiets denk ik tenminste. <<
    Dat denk je goed. Omdat het stukje VBA in een andere context (ThisWorkbook)  wordt geopend, moet het wel naar de juiste context met de elementen die het aanpast verwijzen. Het moet dus naar werkblad1 verwijzen. In VBA is dit Worksheets(1) . Ms heeft wat hun keuze van elementnamen betreft een niet al te beste reputatie. Waarom in dit geval die s er nu bij moest?? Omdat er meerdere werkbladen kunnen zijn, is het een array met tussen () het sheetnummer.
    Dus na deze aanpassingen zou het moeten werken als gewenst. Kloptda?
    Worksheets(1).Deelnemers1.Clear
    Worksheets(1).Deelnemers1.AddItem cell.Value


    Michel Uphoff (NLcomputer)
    Homepage


    Gewijzigd 23/11/2007 16:33 CET door Michel Uphoff (Sysop)


    Bericht 10 van 11

    NL Computer Forum ~ Word, Excel & Office
    Van:Stefan de Best (Sysop)Datum:24-11-2007
    Aan:Michel Uphoff (Sysop)MsgID:3636.10
    Onderwerp:VBA: Excel-ComboboxForum:ws-nlcomputer

    Hoi Michel,
    Ja, het werkt nu zoals ik wil. Verder heb ik nog e.e.a. een beetje fine-getuned en is het prima zo. :-)
    Bedankt!

    S t e f a n

        Overzicht van 150 oude en minder bekende zwemslagen
        http://tinyurl.com/yuojv[/]
     


    Bericht 11 van 11

    NL Computer Forum ~ Word, Excel & Office
    Van:Michel Uphoff (Sysop)Datum:24-11-2007
    Aan:Stefan de Best (Sysop)MsgID:3636.11
    Onderwerp:VBA: Excel-ComboboxForum:ws-nlcomputer

    Hoi Stefan,
    >> en is het prima zo <<
    Mooi! Ik vond het ook wel weer even leuk met VBA te klooien, dat was al een tijd geleden.

    Michel Uphoff (NLcomputer)
    Homepage