NL Computer Forum

Software => Word, Excel en Office algemeen => Topic gestart door: NLCOMP op 11 november 2009, 23:11:44

Titel: VBA: Excel-Combobox
Bericht door: NLCOMP 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 (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: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 (http://home.hetnet.nl/%7Em-u)


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 (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 (http://home.hetnet.nl/%7Em-u)


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 (http://home.hetnet.nl/%7Em-u)

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 (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 (http://home.hetnet.nl/%7Em-u)


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 (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 (http://home.hetnet.nl/%7Em-u)

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 (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 (http://home.hetnet.nl/%7Em-u)