Moikka
Olen todella aloittelija näissä jutuissa ja nyt loppui itseltä taidot kesken joten kokeilen löytyisikö täältä apua. Minun täytyisi saada excelissä tehtyä luettelo (ComboBox)- tai yhdistelmäruutu (ListBox), josta voidaan valinta useampi vaihtoehto samaan aikaan. Lisäksi nuo kaikki valitut vaihtoehdot haluaisin näkymään tietyssä solussa (linkitetty solu), onko kellään ideoita kuinka tuon saisi toteutettua tai muita vaihtoehtoisia toteutustapoja?
vedä listbox tauluusi
sitten avaa visual basic ja lisää
Taul1 on sama kuin Sheet1 jos käytössäsi on englanninkielinen excel, korvaa vaan Taul1 Sheet1:llä jos on näin.
thisworkbookin alle:
'tässä lisätään kamat listboxiin kun taulu latautuu Sub Form_Load() Taul1.ListBox1.AddItem ("eka") Taul1.ListBox1.AddItem ("Toka") Taul1.ListBox1.AddItem ("kolmas") End Sub
seuraavat Taul1 (tai sheet1:n alle)
Private Sub ListBox1_Click() Taul1.Cells(10, 1) = ListBox1.Text 'jossa nuo numerot merkkaavat riviä ja kolumnia, tässä tapauksessa valinta siirtyy kolumnissa 1 rivillä 10 olevaan soluun End Sub
Kiitos neuvosta. En kuitenkaan saa tuota toimimaan täysin haluamallani tavalla. Sain ListBoxin tehtyä ja valinta siirtyy haluamaani soluun. Haluaisin kuitenkin saada valittua tuosta ListBoxista useamman vaihtoehdon samaan aikaan ja kaikki valinnat haluaisin näkymään samaan soluun. Onkohan tuollainen edes mahdollista?
Muuta ensin Properties-listasta ListBoxin MultiSelect-ominaisuuden arvoksi 2, jolloin listasta pystyy valitsemaan monta kohtaa pitämällä Control-näppäin pohjassa.
Kirjoita sitten seuraava koodi:
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Dim i As Integer Dim tulos As String ' käydään läpi kaikki listan kohdat For i = 0 To ListBox1.ListCount - 1 ' onko listan kohta valittu? If ListBox1.Selected(i) Then If tulos = "" Then ' ensimmäinen valittu kohta tulos = ListBox1.List(i) Else ' seuraava valittu kohta tulos = tulos & ", " & ListBox1.List(i) End If End If Next ' näytetään valinnat solussa A1 Cells(1, 1) = tulos End Sub
kappas, miksiköhän en huomannut että monivalintaa kysyttiin?
sokeus tulee varhain.
Nyt sain toimimaan, kiitos paljon avusta.
Sellainen kysymys vielä, että millä saan toimimaan ListBoxin niin, että kun excel tiedosto avataan niin nuo ListBoxin arvot latautuvat "automaattisesti"? Nyt joudun manuaalisesti suorittamaan makron, jonka jälkeen arvot latautuvat ListBoxiin.
Pystyykö ListBox asetuksia muuttamaan niin, että valittavat arvot näkyvät useammassa rivissä? Esimerkiksi:
Eka Toka Kolmas
Neljäs Viides Kuudes
Apua kaipaava kirjoitti:
Sellainen kysymys vielä, että millä saan toimimaan ListBoxin niin, että kun excel tiedosto avataan niin nuo ListBoxin arvot latautuvat "automaattisesti"?
Kirjoita listan täyttävä koodi kohtaan WorkBook_Open:
' tämä koodi suoritetaan, kun tiedosto avataan Private Sub Workbook_Open() Sheet1.ListBox1.AddItem "Rivi 1" Sheet1.ListBox1.AddItem "Rivi 2" Sheet1.ListBox1.AddItem "Rivi 3" End Sub
Apua kaipaava kirjoitti:
Pystyykö ListBox asetuksia muuttamaan niin, että valittavat arvot näkyvät useammassa rivissä?
Tämä ei ole minun tietääkseni mahdollista.
Heippa!
Apua kaipaava kirjoitti:
Pystyykö ListBox asetuksia muuttamaan niin, että valittavat arvot näkyvät useammassa rivissä? Esimerkiksi:
Eka Toka Kolmas
Neljäs Viides Kuudes
annetun esimerkin pohjalta syntyi käsitys, että kysyjä tarkoitti multi column ominaisuutta, mikäli näin niin tässä yksi tapa leikkiä combobox'lla
Module1:
Global cboList(1, 2) Sub auto_open() cboList(0, 0) = "Eka" cboList(0, 1) = "Toka" cboList(0, 2) = "Kolmas" cboList(1, 0) = "Neljäs" cboList(1, 1) = "Viides" cboList(1, 2) = "Kuudes" With Sheets(1).ComboBox1 .Width = 220 .Height = 20 .ColumnCount = 3 .BoundColumn = 0 .ColumnWidths = 75 .List = cboList End With End Sub
Taul1:
Dim mx As Single Private Sub ComboBox1_Change() If ComboBox1.Value > -1 Then Dim lstcnt As Integer lstcnt = ComboBox1.Value ComboBox1.TopIndex = -1 If mx > 0 And mx < 75 Then ComboBox1.Text = _ ComboBox1.List(lstcnt, 0) ComboBox1.TextColumn = 3 ElseIf mx > 75 And mx < 150 Then ComboBox1.Text = _ ComboBox1.List(lstcnt, 1) ElseIf mx > 150 And mx < 225 Then ComboBox1.Text = _ ComboBox1.List(lstcnt, 2) ComboBox1.TextColumn = 1 End If End If End Sub Private Sub ComboBox1_MouseMove(ByVal Button As Integer, _ ByVal Shift As Integer, ByVal x As Single, ByVal Y As Single) mx = x End Sub
sensijaan jos kysyjä tarkoitti listboxin multi select ominaisuutta niin, että kerätään tietyt arvot Excle-taulun tietyille riveille niin tässä toinen tapa leikkiä...
Module1:
Sub auto_open() With Sheets(1).ListBox1 .Clear .MultiSelect = 1 .AddItem "Eka" .AddItem "Toka" .AddItem "Kolmas" .AddItem "Neljäs" .AddItem "Viides" .AddItem "Kuudes" End With End Sub
Taul1:
Private Sub ListBox1_MouseUp(ByVal Button As Integer, _ ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) ReDim lstArray(0) For i = 0 To ListBox1.ListCount - 1 If i > 0 And i Mod 3 = 0 Then ReDim Preserve lstArray(UBound(lstArray) + 1) End If If ListBox1.Selected(i) Then lstArray(UBound(lstArray)) = _ lstArray(UBound(lstArray)) + _ ListBox1.List(i) + " " End If Next i For i = 0 To UBound(lstArray) If Replace(lstArray(i), " ", "") <> "" Then Cells(i + 1, 1).Value = Trim(lstArray(i)) Else Cells(i + 1, 1).Value = "" End If Next i End Sub
Aihe on jo aika vanha, joten et voi enää vastata siihen.