Helpmij.nl
Helpmij.nl
Helpmij.nl
Steun Helpmij.nl! Klik hier     Computerprobleem? Klik hier!

Quote

Pagina 1 van 2 1 2 LaatsteLaatste
Weergeven resultaten 1 tot 20 van 23

Onderwerp: combobox value

  1. #1
    Giga Honourable Senior Member
    Verenigingslid

    Geregistreerd
    12 juni 2008
    Vraag is opgelost

    combobox value

    Ola Helpmij forum

    De volgende vraag:

    Ik heb in een userform een combobox.
    Die vul ik in de Initialize-gebeurtenis.
    Vervolgens stel ik de waarde van de combobox in op een van de waarden, die de combobox bevat.
    Dan blijkt dat alleen de waarden die als tekstreeks (string) in de combobox staan als geldige waarden worden herkend door de methode combobox.Value.

    Wie heeft hiervoor een verklaring ?

    Code:
    Private Sub UserForm_Initialize()
       ComboBox1.List = Array(3, 4, 5, 6, "7", 8)
       
       ComboBox1.Value = 5
       MsgBox "Combobox1.value=5 :   " & ComboBox1.ListIndex
       
       ComboBox1.ListIndex = -1
       ComboBox1.Value = 7
       MsgBox "Combobox1.value=7 :   " & ComboBox1.ListIndex
       
       ComboBox1.ListIndex = -1
       ComboBox1.Value = "7"
       MsgBox "Combobox1.value=""7"" :   " & ComboBox1.ListIndex
    End Sub
    Attached Files Attached Files
    Laatst aangepast door snb : 13 oktober 2017 om 11:13
    VBA voor smarties
    VBA is een taal die je moet leren met een grammatica- en een woordenboek.

    http://www.helpmij.nl/forum/showthread.php/635117-Tips-om-de-helpers-in-deze-sectie-van-dienst-te-zijn
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.

  2. #2
    Ik weet niet of ik de vraag goed begrijp. Mijn verklaring zou zijn dat combobox.value altijd een string is. En dat de numerieke 7 dan ook als zodanig herkend wordt (een string), omdat dit het enige geldige type is.
    Mogelijk moet je door mij voorgestelde formules vertalen. Bv. via deze link.

    Ik ben dan wel senior maar niet te oud om te leren. Ik weet dus ook niet alles ...

  3. #3
    Heeft kennelijk iets te maken met het feit dat de combobox een array krijgt want als je de items met AddItem toevoegt dan werkt het wel.
    Het wordt nog gekker. Als ik de BoundColumn = 0 instel, dan werkt het alleen nog voor 3, 4 en 5. Stel ik BoundCOlumn in op 1, dan werkt 7 en "7" en 3, 4 en 5 weer niet.
    Groetjes,

    Jan Karel Pieterse
    Excel MVP jkp-ads.com

  4. #4
    Giga Honourable Senior Member
    Verenigingslid

    Geregistreerd
    12 juni 2008
    Dank beiden !

    Ik ga verder testen, ook met jouw additem en boundcolumn suggesties JKP.
    VBA voor smarties
    VBA is een taal die je moet leren met een grammatica- en een woordenboek.

    http://www.helpmij.nl/forum/showthread.php/635117-Tips-om-de-helpers-in-deze-sectie-van-dienst-te-zijn
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.

  5. #5
    Giga Honourable Senior Member HSV's avatar
    Geregistreerd
    18 juli 2008
    Andersom werkt het wel prima.
    Code:
    ComboBox1.List = Array(3, 4, 5, 6, "7", 8)
        ComboBox1.ListIndex = 5
       MsgBox "ComboBox1.Value: " & ComboBox1.Value & vbCrLf & "ComboBox1.ListIndex: " & ComboBox1.ListIndex
    ____________
    mvg,
    Harry

    Lag nooit om de keuzes van dien vraauw, bist ter zulf aine van....
    (Grunnegs-Gronings)

  6. #6
    Wat als je een "echte" 2 dimensionale array gebruikt?
    Groetjes,

    Jan Karel Pieterse
    Excel MVP jkp-ads.com

  7. #7
    Giga Honourable Senior Member
    Verenigingslid

    Geregistreerd
    12 juni 2008
    @HSV

    Ja, dat klopt.
    De wijziging van de listindex gaat in alle gevallen vlekkelings; de Value eigenschap gaat volledig mee.
    Ik wilde eigenlijk kijken of je de .Value eigenschap van een Combobox kunt gebruiken als 'sleutel/key' vergelijkbaar met de Dictionary.
    Ik ben nl. bezig met een pagina over Comboboxes in vervolg op de Sortedlists, Arraylist, Dictionaries, Collections, etc.


    @JKP

    Bij de 2-dimensionele Arrays lukt het me nog minder.
    Bij wij versagen vooralsnog niet.
    Laatst aangepast door snb : 13 oktober 2017 om 22:24
    VBA voor smarties
    VBA is een taal die je moet leren met een grammatica- en een woordenboek.

    http://www.helpmij.nl/forum/showthread.php/635117-Tips-om-de-helpers-in-deze-sectie-van-dienst-te-zijn
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.

  8. #8
    Giga Honourable Senior Member HSV's avatar
    Geregistreerd
    18 juli 2008
    Code:
    Private Const stext As String = "3,4,5,6,7,8"
    Private Sub UserForm_Initialize()
    
    
       ComboBox1.List = Split(stext, ",")
       ComboBox1.value= 5
       MsgBox "Combobox1.value=5 :   " & ComboBox1.ListIndex
    end with
    Of:

    Code:
     ComboBox1.List = Split("3,4,5,6,7,8", ",") 'of split("3 4 5 6 7 8") natuurlijk
       ComboBox1.Value = 5
       MsgBox "Combobox1.value=5 :   " & ComboBox1.ListIndex
    Laatst aangepast door HSV : 14 oktober 2017 om 06:53
    ____________
    mvg,
    Harry

    Lag nooit om de keuzes van dien vraauw, bist ter zulf aine van....
    (Grunnegs-Gronings)

  9. #9
    Probeer eens of je na deze regel:
    Code:
    ComboBox1.List = Array(3, 4, 5, 6, "7", 8)
    in de Immediate window door de lijst kan gaan als volgt:
    Code:
    ?ComboBox1.List()(0, 0)
    Code:
    ?ComboBox1.List()(1, 0)
    etcetera...
    het lijkt er op dat je zelfs verschil ziet in de uitlijning van de string "7", ietsje verder naar links als de andere waarden (getallen)

  10. #10
    Giga Honourable Senior Member
    Verenigingslid

    Geregistreerd
    12 juni 2008
    @HSv

    Ja, bij de split gaat het wel goed; dan kun je zelfs kiezen tussen .value=5 of .value="5" om het gewenste item te selecteren.
    VBA voor smarties
    VBA is een taal die je moet leren met een grammatica- en een woordenboek.

    http://www.helpmij.nl/forum/showthread.php/635117-Tips-om-de-helpers-in-deze-sectie-van-dienst-te-zijn
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.

  11. #11
    Giga Honourable Senior Member
    Verenigingslid

    Geregistreerd
    12 juni 2008
    Voorbeeld:

    Code:
       ComboBox1.List = Array(10, 14, 17, 26, "7", 18)
       x3 = ComboBox1.BoundColumn                       '   x3=1
       MsgBox UBound(ComboBox1.List) & vbTab & UBound(ComboBox1.List, 2)    '   5     0
    
       ComboBox1.ListIndex = 3
       c00 = ComboBox1.Value                   '     "26"
    
       ComboBox1.ListIndex = 5
       c01 = ComboBox1.Value                  '      "18"
    
       ComboBox1.Value = c00                 ' foutmelding, hoewel c00 een geldig waarde is, want uit de Combobox zelf gelezen
       ComboBox1.Value = Val(c00)           ' foutmelding, dus string of number maakt niet uit
    @JPK

    Als ik boundcolumn op 0 zet, fungeert de .value als Listindex. (was voor mij ook nieuw).

    Code:
       ComboBox1.List = Array(10, 14, 17, 26, "7", 18)
       ComboBox1.BoundColumn =0 
       MsgBox UBound(ComboBox1.List) & vbTab & UBound(ComboBox1.List, 2)    '   5     0
    
       ComboBox1.ListIndex = 3
       c00 = ComboBox1.Value                   '     3
    
       ComboBox1.ListIndex = 5
       c01 = ComboBox1.Value                  '     5
    
       ComboBox1.Value = c00                 '    geen foutmelding
       ComboBox1.Value = Val(c00)           '   geen foutmelding
    
       y=combobox1.listindex                  '      3;  dus c00 heeft de listindex op 3 gezet
    en inderdaad, de additem methode vertoont dit euvel niet.
    Dat komt niet omdat daardoor een 2-dimensionale Array ontstaat van n*9, want ook als ik een array van n*9 inlees via .List of .Column blijft het daarna onmogelijk om de .Value te gebruiken.

    Dit werkt dus wel:

    Code:
       sn = Array(10, 14, 17, 26, "7", 18)
       For j = 0 To UBound(sn)
           ComboBox1.AddItem sn(j)
        Next
       
       MsgBox UBound(ComboBox1.List) & vbTab & UBound(ComboBox1.List, 2)   '    5 * 9
       ComboBox1.ListIndex = 3
       c00 = ComboBox1.Value                   '     "26"
    
       ComboBox1.ListIndex = 5
       c01 = ComboBox1.Value                  '      "18"
    
       ComboBox1.Value = c00                  '      "26"
       y = ComboBox1.ListIndex                '    3
    
       ComboBox1.Value = Val(c01)            '      18
       y = ComboBox1.ListIndex                '    5
    Laatst aangepast door snb : 14 oktober 2017 om 12:55
    VBA voor smarties
    VBA is een taal die je moet leren met een grammatica- en een woordenboek.

    http://www.helpmij.nl/forum/showthread.php/635117-Tips-om-de-helpers-in-deze-sectie-van-dienst-te-zijn
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.

  12. #12
    Het lijkt wel goed te gaan als je de waarden uit een range haalt...
    Groetjes,

    Jan Karel Pieterse
    Excel MVP jkp-ads.com

  13. #13
    Giga Honourable Senior Member
    Verenigingslid

    Geregistreerd
    12 juni 2008
    @JKP

    Ook dan niet.

    Het criterium blijkt te zijn dat niet met getallen gewerkt kan worden: de opdracht combobox1.value="x" werkt alleen als die 'x'-waarde als tekenreeks (string) in de combobox staat (en in de range in het geval van een getal met apostrof is ingevoerd). Dit geldt voor zowel 1-dimensionele als 2-dimensionele arrays.
    Het waarom is me niet duidelijk, maar ik kan vermoeden dat er een interferentie met indexnummers plaatsvindt (vergelijkbaar met de onvoorspelbaarheid als je gereserveerde VBA-namen voor eigen objekten gebruikt).

    Ik doe maar even of ik 'eruit' ben en zet de draad op opgelost.

    Allen bedankt voor het meestoeien.
    Als de comboboxpagina klaar is geef ik een signaal.
    VBA voor smarties
    VBA is een taal die je moet leren met een grammatica- en een woordenboek.

    http://www.helpmij.nl/forum/showthread.php/635117-Tips-om-de-helpers-in-deze-sectie-van-dienst-te-zijn
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.

  14. #14
    Ik deel de mening uit post#2, volgens mij is een Combobox.value (net als bij een TextBox) altijd een string en voegt de additem methode ook altijd een string toe aan de .list
    Wellicht toch een reden om de .additem boven de .list methode te kiezen (?)
    anyway ben alvast benieuwd naar jouw comboboxpagina
    Gr. Eric

  15. #15
    Giga Honourable Senior Member
    Verenigingslid

    Geregistreerd
    12 juni 2008
    @E v R

    Als die redenering klopt, zou er geen verschil moeten zijn tussen de additem-methode en de .List of .column eigenschap (het zijn toch allemaal 'strings').
    En het komt niet overeen met de bevinding dat, wanneer getallen als 'string' aan de combobox zijn toegevoegd, ze met .value=getal kunnen worden benaderd.
    Het verschil treedt alleen maar op bij het gebruik van .Value als sleutel van een item.
    Additem is niet bedoeld, noch geschikt om een Combobox te vullen met meer dan 1 item tegelijkertijd.
    VBA voor smarties
    VBA is een taal die je moet leren met een grammatica- en een woordenboek.

    http://www.helpmij.nl/forum/showthread.php/635117-Tips-om-de-helpers-in-deze-sectie-van-dienst-te-zijn
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.

  16. #16
    Als ik de typename opvraag van de combobox list items afkomstig uit je eerste array dan krijg ik Integer, Integer, Integer, Integer, String, Integer
    Maar de Value eigenschap verwacht vermoedelijk een string waarde (ook al staat in Help Variant!) en alleen 7 is als string ingegeven.
    Groetjes,

    Jan Karel Pieterse
    Excel MVP jkp-ads.com

  17. #17
    Giga Honourable Senior Member
    Verenigingslid

    Geregistreerd
    12 juni 2008
    @JKP

    Goede invalshoek !
    En dan hebben we nog niet eens over de verschillende combobox-'stylen': combobox & dropdownlist.
    VBA voor smarties
    VBA is een taal die je moet leren met een grammatica- en een woordenboek.

    http://www.helpmij.nl/forum/showthread.php/635117-Tips-om-de-helpers-in-deze-sectie-van-dienst-te-zijn
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.

  18. #18
    Als je middels Additem een integer, long double etc. toevoegt aan een Combobox, wordt dit automatisch een string (dit dus itt .column en .list) (vandaar dat wanneer items middels add.item zijn toegevoegd wel worden gevonden)
    Als je middels VBA een integer, long ... als waarde aan de combobox geeft zal er geen.MatchFound zijn en dus na Change geen wijziging van de Listindex plaatsvinden.
    Gr. Eric

  19. #19
    Giga Honourable Senior Member
    Verenigingslid

    Geregistreerd
    12 juni 2008
    @E v R

    Als je middels VBA een integer, long ... als waarde aan de combobox geeft zal er geen.MatchFound zijn en dus na Change geen wijziging van de Listindex plaatsvinden
    Maar als je de waarde instelt met een string wordt ook geen listindex gewijzigd.
    Zelfs niet als je de geldige waarde uit de combobox gebruikt.

    Voorbeeld een range met in A8 het getal 100

    Code:
    ComboBox1.List = Sheet1.Cells(1).CurrentRegion.Value
    
    ComboBox1.Value = "100"
    MsgBox ComboBox1.ListIndex     ' -1
    
    MsgBox TypeName(ComboBox1.List(7, 0))    ' double
    ComboBox1.Value = ComboBox1.List(7, 0)
    MsgBox ComboBox1.ListIndex    '   -1
    
    ComboBox1.Value = format(ComboBox1.List(7, 0))
    MsgBox ComboBox1.ListIndex    '   -1
    
    ComboBox1.Value = CStr(ComboBox1.List(7, 0))
    MsgBox ComboBox1.ListIndex    '   -1
    Laatst aangepast door snb : 16 oktober 2017 om 19:02
    VBA voor smarties
    VBA is een taal die je moet leren met een grammatica- en een woordenboek.

    http://www.helpmij.nl/forum/showthread.php/635117-Tips-om-de-helpers-in-deze-sectie-van-dienst-te-zijn
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.

  20. #20
    Giga Honourable Senior Member HSV's avatar
    Geregistreerd
    18 juli 2008
    zo werkt het wel.
    Code:
    Private Sub UserForm_Initialize()
    Dim arr(5) As String
    arr(0) = 3
     arr(1) = 4
     arr(2) = 5
     arr(3) = 6
     arr(4) = 7
     arr(5) = 8
       ComboBox1.List = arr
       ComboBox1.Value = 5
       
       MsgBox ComboBox1.Value & ":   " & ComboBox1.ListIndex
       ComboBox1.ListIndex = -1
       ComboBox1.Value = 7
       MsgBox "Combobox1.value=7 :   " & ComboBox1.ListIndex
       ComboBox1.ListIndex = -1
       ComboBox1.Value = "7"
       MsgBox "Combobox1.value=""7"" :   " & ComboBox1.ListIndex
    
    
    End Sub
    ____________
    mvg,
    Harry

    Lag nooit om de keuzes van dien vraauw, bist ter zulf aine van....
    (Grunnegs-Gronings)

Pagina 1 van 2 1 2 LaatsteLaatste

Berichtenregels

  • U mag geen nieuwe vragen starten.
  • U mag niet reageren op berichten.
  • U mag geen bijlagen versturen.
  • U mag uw berichten niet bewerken.
  •  
Helpmij.nl
Helpmij.nl

Helpmij.nl en business

Partners
Sponsoren
Aanbiedingen