Avatar billede al_pacone Nybegynder
19. oktober 2006 - 15:20 Der er 13 kommentarer

Sætte værdi i en ComboBox

Hvordan sætter jeg værdien i min ComboBox med to kolonner.

Jeg har fyldt comboen med et recordset, med primær nøgle i kolonne 1 og data i kolonne 2.
Jeg viser kun kolonne 2, men vil gerne sætte værdien efter primær nøglen i kolonne 1.

Jeg har prøvet med følgende.
ComboBox1.Value = 2
Og får følgende fejl.
Run-time error '380'
Invalid property value
Avatar billede kabbak Professor
19. oktober 2006 - 15:28 #1
ComboBox1.BoundColumn = 1
Avatar billede al_pacone Nybegynder
19. oktober 2006 - 15:39 #2
Properties i Comboboxen er bundet op på kolonne 1.
Hvis jeg med musen vælger data i comboboxen og aflæser ComboBox.value, får jeg primær nøglen.
Avatar billede kabbak Professor
19. oktober 2006 - 15:50 #3
ok er det ikke den du vil have, hvis du vil have den i kolonne 2 i stedet, skal du bare rette 1 til 2
Avatar billede al_pacone Nybegynder
19. oktober 2006 - 15:55 #4
Jeg vil gerne sætte værdien efter kolonne 1 og vise kolonne 2.
Avatar billede kabbak Professor
19. oktober 2006 - 15:58 #5
Vil du gemme den i en celle
Range("A1") = ComboBox1.column(1)
Avatar billede bak Forsker
19. oktober 2006 - 16:01 #6
for kun at vise kolonne 2 vælger du under ColumnWidth =  0; 40
Dette betyder at kolonne 1 ikke vises

for at sætte en værdi (startværdi) i comboboxen skal du kende det indexnummer.
for at finde dette kan man køre en løkke som denne

v = "7035"
For x = 0 To ComboBox1.ListCount - 1
    If ComboBox1.List(x) = v Then
    ComboBox1.ListIndex = x
    Exit For
    End If
Next
Avatar billede al_pacone Nybegynder
19. oktober 2006 - 16:03 #7
Først loader jeg data ind i comboen fra en database.
Så vil jeg gerne have sat værdien i comboen, så det er data svarende til den værdi jeg sætter der bliver vist.

Eksempel på data i comboen.
Kolonne 1    Kolonne2
1            Hans
2            Birger
3            Ole

Så vil jeg godt sætte værdien af comboen til 2, så der står Birger i comboen.
Avatar billede bak Forsker
19. oktober 2006 - 16:09 #8
Private Sub UserForm_Activate()
v = "2"
For x = 0 To ComboBox1.ListCount - 1
    If ComboBox1.List(x) = v Then
    ComboBox1.ListIndex = x
    Exit For
    End If
Next

End Sub
Avatar billede frank_morley Nybegynder
20. oktober 2006 - 12:53 #9
Du kan afprøve følgende eksmepel:
Opret i ("Ark1") følgende værdier:
A1 = 1 B1 = Hans
A2 = 1 B2 = Birger
A3 = 3 B3 = Ole

Formater din ComboBox1 således:

BoundColumn = 1
ColumnCount = 2
ColumnWidths = 0 pt; 40 pt
MatchRequited = True
RowSource = A1:B3 (Hvis du vil refererer til et andet ark, end det aktive ark skal du indsætte arknavnet før cellereferencen, eksempelvis Ark2!A1:B3

Opret nedenstående kode til din ComboBox1_Change
   
    Private Sub ComboBox1_Change()
    Dim varName As String, varIndex As Long, varFind As Long, varLoop As Long
   
    If IsNumeric(Me.ComboBox1.Text) = False Then Exit Sub
    varIndex = ComboBox1.Text 'første gang vil dette være et tal
    varFind = Sheets("Ark1").Cells(1, 1).Value
    Do Until varFind = varIndex
        varFind = Sheets("Ark1").Cells(1, 1).Offset(varLoop, 0).Value
        varLoop = varLoop + 1
    Loop
    varName = Sheets("Ark1").Cells(1, 1).Offset(varLoop, 1).Value
    ComboBox1.Text = varName
    End Sub
   
Med ovenstående kode kan du nu indtaste et tal i Kombinationsboksen. Det indtastede tal søges der efter i arket med værdier. Når tallet findes i kolonne A, vil den tilhørende tekst i kolonne B blive sat ind i Kombinationsboksen.

Da BoundColumn = 1 og MatchRequired = True vil en tekstindsættelse blive afvist, derfor linjen med If Isnumeric(.......

Håber ovenstående hjælper dig.

Mvh
Frank Morley
Avatar billede al_pacone Nybegynder
20. oktober 2006 - 23:11 #10
Jeg er ikke interesseret i at indtaste 2 i comboboxen, men sætte værdien via kode.

I Access kan man via kode skrive
ComboBox1 = 2

Og så er det hele ordnet for en.
Der må være en mere elegant løsning i Excel, end ovenstående indlæg?
Avatar billede bak Forsker
21. oktober 2006 - 12:14 #11
Jo da. Du kan bare gøre sådan:

ComboBox1.ListIndex = 2

men grunden til at vi giver dig lidt mere kode er jo for at fejlsikre

Kolonne 1    Kolonne2
10            Hans
23            Birger
35            Ole

Her vil combobox1 = 2 i access vise birger og det samme vil gøre sig gældende med excel's Combobox1.ListIndex=2
Avatar billede frank_morley Nybegynder
21. oktober 2006 - 14:32 #12
Hvis din ComboBox1 har BoundColumn = 1 (til håndtering af Index værdien, som jo er et tal) så kan du blot skrive

ComboBox1.Value = 2 (nøjagtig som du selv har erfaret i Access). Du kan ovenikøbet udelade .Value

Sæt ligeledes MatchRequited = True (som tidligere foreslået).

Mvh
Frank Morley
Avatar billede al_pacone Nybegynder
23. oktober 2006 - 15:35 #13
Så fandt jeg fejlen.

Alle data i kolonne 1 havde et mellemrum foran.
Jeg har nu trimmet alle data i kolonne 1 og bruger koden.

ComboBox1 = 2

Og det virker.
Tak for jeres indsats.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester