Hej
Har suttit och sökt google nu för att hitta kod hur man lägger till objekt i en listbox med hjälp av VBA kod.. Går ju lägga till texten i listboxen men jag vill också ha ett värdet kopplat till varje alternativ i boxen??
Mvh
4 svar · 754 visningar · startad av eddy1
Hej
Har suttit och sökt google nu för att hitta kod hur man lägger till objekt i en listbox med hjälp av VBA kod.. Går ju lägga till texten i listboxen men jag vill också ha ett värdet kopplat till varje alternativ i boxen??
Mvh
En variant är ju att använda verifieringen (bara för att koden är så enkel)
With ActiveSheet.Range("A1").Validation
.Delete
.Add Type:=xlValidateList, Formula1:="Gul,Röd,Blå"
.InCellDropdown = True
.ShowInput = False
.ShowError = False
End With
hur man lägger till objekt i en listbox
Du har redan listboxen?
Är det en "formulärlistruta" eller en "active-x listruta"? Dvs har du infogat den med hjälp av
Visa->verktygsfält->formulär
eller
Visa->verktygsfält->Kontroller
De beter sig ganska olika.
Här är ett exempel för en "formulärruta"
Set ListRuta = ActiveSheet.Shapes("List Box 9").ControlFormat
ListRuta.RemoveAllItems
ListRuta.List = Array("Etta", "Tvåa", "Trea", "Fyra")
ListRuta.LinkedCell = "A1"
Och här är ett exempel för ActiveX varianten
Dim ListRuta
Set ListRuta = ActiveSheet.ListBox1
ListRuta.Clear
ListRuta.List = Array("Etta", "Tvåa", "Trea", "Fyra")
If Not ListRuta.LinkedCell <> "" Then
ListRuta.LinkedCell = "A2"
End If
******Tilläg*********
Dahhh, linkedcell går åt skogen om det redan är angivet. Vette tusan hur du fixar det.
jag förstår inte riktigt, det är activeX...
Jag är med att du lägger till olika rader i listboxen. "Array("Etta", "Tvåa", "Trea", "Fyra")" men det ska ju vara ett värde för varje rad i listboxen ??
Grejen är att jag har ett sökmakro. där har jag ett fält där jag skriver sökmvärdet. Sen vill jag välja i en listbox vilket fält som det ska sökas i, ett fält heter t.ex "orsak" och värdet för det ska kanske vara "5".
Går det få till det så??
eddy1 skrev:
jag förstår inte riktigt, det är activeX...
.....
men det ska ju vara ett värde för varje rad i listboxen ??
Om du använder en "formulärlistruta" så returnerar den en siffra till den länkade cellen (beroende på ordningen i arrayen).
ActiveX-kontrollen returnerar istället din "klartext"
Huromhelst, det går naturligtvis att returnera indexet från en aciveX m du vill använda det som en variabel, typ Me.ComboBox1.ListIndex.
Index kommer att räknas från 0 (-1 för ingenting valt)
Men, jag får en känsla av att du vill ange det returnerade värdet helt själv? Då är nog det enklaste att helt enkelt använda indexet och hämta värdet i en annan array.
Det här är ett exempel med en "ComboBox1" som ligger i ett blad:
Private Sub Worksheet_Activate()
Set ListRuta = ActiveSheet.ComboBox1
ListRuta.Clear
ListRuta.List = Array("Lisa", "Anna", "Pirko", "Delila", "Orsak")
End Sub
Private Sub ComboBox1_Change()
If Me.ComboBox1.Value = -1 Then Exit Sub
MinReturvärdesArray = Array("Kalle", "Mustapha", "Bertil","Pekka", "Sture")
MsgBox ("Det valda värdet är: " & Me.ComboBox1.Value & Chr(10) & _
"Indexvärdet är:= " & Me.ComboBox1.ListIndex & Chr(10) & _
"Och Paret är:= " & MinReturvärdesArray(Me.ComboBox1.ListIndex))
End Sub
Ja, hoppas du blir klok på det hela. Det finns säkert en ännu enklare lösning som jag missar. Har för mig att det du efterlyser går att fixa direkt i formulärkontroller till någon av databashanterarna. Eller är det något jag drömt?
Tackar..
nu rullar det på igen.. Gör så att jag kör en case satts och sätter specifika värden till variablerna beroende valt värde i listboxen..