Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Excel Luetteloruutu/Yhdistelmäruutu

Sivun loppuun

Apua kaipaava [05.05.2009 11:52:07]

#

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?

groovyb [05.05.2009 17:18:36]

#

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

Apua kaipaava [06.05.2009 09:44:07]

#

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?

Antti Laaksonen [06.05.2009 11:57:10]

#

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

groovyb [06.05.2009 12:01:26]

#

kappas, miksiköhän en huomannut että monivalintaa kysyttiin?
sokeus tulee varhain.

Apua kaipaava [06.05.2009 12:22:30]

#

Nyt sain toimimaan, kiitos paljon avusta.

Apua kaipaava [07.05.2009 08:25:02]

#

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

Antti Laaksonen [07.05.2009 12:15:18]

#

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.

neau33 [10.05.2009 01:30:23]

#

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

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta