Listboxin valinnan säilyminen

Pasi

Terve,

Minulla on VBA:lla koodattuna ohjelmaa ja eräässä Formissa on Listbox ja kolme OptionButtonia. ListBoxiin tulee näkyviin luonnollisesti lista ja Optionbuttoneilla valitaan "Lisää", "Muokkaa" tai "Poista".

Jos valitsen OptMuokkaa eli "Muokkaa" ja sen jälkeen ListBoxixta muokattavan asian ja tämän jälkeen tulenkin toisiin aatoksiin ja valitsenkin OptPoista eli "Poista", niin miten saan ListBoxissa säilymään sen kohteen valittuna joka oli valittuna kun OptMuokkaa oli valittuna?

Sitten vielä toinenkin kysymys:

Jos täytän Listboxin .AddItem -käskyllä, niin voin poistaa sieltä rivin .RemoveItem -käskyllä taikka tyhjentää koko listan .Clear -käskyllä, mutta jos käytän listan täyttämiseen Excelin nimettyä aluetta ja .RowSource -käskyä, niin kumpikaan .RemoveItem eikä .Clear oikein pure. Millä listan saa tyhjäksi jos se on täytetty RowSource -käskyllä?

-Pasi-

4

506

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Kunde

      ekaan mahdoton vastata tietämättä koodiasi ja jälkimmäinen on helppo
      Listbox1.RowSource=""

      • Pasi

        Olipas tosiaankin helppo homma tuo listan tyhjennys. Tässä hieman koodia (jossa lista on täytetty hiaman vaikeammalla tavalla kuin .RowSource jne.):

        Private Sub UserForm_initialize()
        ' Täytetään ComboBox ja valikot

        OptMuuntaja20_1_Click
        OptMuuntajaLisää_Click
        CboMuuntajaRyhmä.AddItem "Dyn"
        CboMuuntajaRyhmä.AddItem "Yzn"
        End Sub

        Private Sub OptMuuntaja20_1_Click()
        ' Tyhjennetään muuntajalista ja haetaan siihen 20/1 kV muuntajat

        Dim Rivinumero As Integer
        LstMuuntajat.Clear

        Cells.Find(What:="20 / 1 kV muuntajat", After:=Range("B6"), LookIn:=xlValues, LookAt:=xlWhole, _
        SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Activate
        Rivinumero = ActiveCell.Row 2

        While Cells(Rivinumero, 2).Value ""
        LstMuuntajat.AddItem Cells(Rivinumero, 2).Value
        Rivinumero = Rivinumero 1
        Wend
        End Sub

        Private Sub OptMuuntaja1_04_Click()
        ' Tyhjennetään muuntajalista ja haetaan siihen 1/0,4 kV muuntajat

        Dim Rivinumero As Integer
        LstMuuntajat.Clear

        Cells.Find(What:="1 / 0,4 kV muuntajat", After:=Range("B6"), LookIn:=xlValues, LookAt:=xlWhole, _
        SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Activate
        Rivinumero = ActiveCell.Row 2

        While Cells(Rivinumero, 2).Value ""
        LstMuuntajat.AddItem Cells(Rivinumero, 2).Value
        Rivinumero = Rivinumero 1
        Wend
        End Sub

        Private Sub OptMuuntaja20_04_Click()
        ' Tyhjennetään muuntajalista ja haetaan siihen 20/0,4 kV muuntajat

        Dim Rivinumero As Integer
        LstMuuntajat.Clear

        Cells.Find(What:="20 / 0,4 kV muuntajat", After:=Range("B6"), LookIn:=xlValues, LookAt:=xlWhole, _
        SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Activate
        Rivinumero = ActiveCell.Row 2

        While Cells(Rivinumero, 2).Value ""
        LstMuuntajat.AddItem Cells(Rivinumero, 2).Value
        Rivinumero = Rivinumero 1
        Wend
        End Sub

        Private Sub OptMuuntajaLisää_Click()
        ' Aktivoidaan sarakkeita kun toiminnoksi valitaan "Lisää"

        Sub_tyhjennäMuuntajaArvot
        LstMuuntajat.ForeColor = &H80000011
        LstMuuntajat.Enabled = False
        LblMuuntajaHakunimi.Enabled = True
        TxtMuuntajaHakunimi.Enabled = True
        TxtMuuntajaHakunimi.SetFocus
        End Sub

        Private Sub OptMuuntajaMuokkaa_Click()
        ' Aktivoidaan sarakkeita kun toiminnoksi valitaan "Muokkaa"

        Sub_tyhjennäMuuntajaArvot
        LstMuuntajat.ForeColor = &H80000006
        LstMuuntajat.Enabled = True
        LblMuuntajaHakunimi.Enabled = False
        TxtMuuntajaHakunimi.Enabled = False
        LstMuuntajat.SetFocus
        End Sub

        Private Sub OptMuuntajaPoista_Click()
        ' Aktivoidaan sarakkeita kun toiminnoksi valitaan "Poista"

        Sub_tyhjennäMuuntajaArvot
        LstMuuntajat.ForeColor = &H80000006
        LstMuuntajat.Enabled = True
        LblMuuntajaHakunimi.Enabled = False
        TxtMuuntajaHakunimi.Enabled = False
        LstMuuntajat.SetFocus
        End Sub

        Private Sub LstMuuntajat_Change()
        ' Haetaan valitun muuntajan arvot näkyviin

        Dim MuuntajaTyyppi As String, Rivinumero As Integer, EtsittäväMuuntaja ' As String

        If OptMuuntaja20_1 = True Then MuuntajaTyyppi = "20 / 1 kV muuntajat"
        If OptMuuntaja1_04 = True Then MuuntajaTyyppi = "1 / 0,4 kV muuntajat"
        If OptMuuntaja20_04 = True Then MuuntajaTyyppi = "20 / 0,4 kV muuntajat"

        Cells.Find(What:=MuuntajaTyyppi, After:=Range("B6"), LookIn:=xlValues, LookAt:=xlWhole, _
        SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Activate
        Rivinumero = ActiveCell.Row

        EtsittäväMuuntaja = LstMuuntajat.Value

        Cells.Find(What:=EtsittäväMuuntaja, After:=Cells(Rivinumero, 2), LookIn:=xlValues, LookAt:=xlWhole, _
        SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Activate
        Rivinumero = ActiveCell.Row

        CboMuuntajaRyhmä.Value = ""
        TxtMuuntajaHakunimi.Value = Cells(Rivinumero, 2).Value
        TxtMuuntajaSn.Value = Cells(Rivinumero, 3).Value
        TxtMuuntajaP0.Value = Cells(Rivinumero, 4).Value
        TxtMuuntajaPk.Value = Cells(Rivinumero, 5).Value
        TxtMuuntajaZk.Value = Cells(Rivinumero, 6).Value
        TxtMuuntajaRk.Value = Cells(Rivinumero, 7).Value
        TxtMuuntajaXk.Value = Cells(Rivinumero, 8).Value
        TxtMuuntajaZ0.Value = Cells(Rivinumero, 9).Value
        TxtMuuntajaR0.Value = Cells(Rivinumero, 10).Value
        TxtMuuntajaX0.Value = Cells(Rivinumero, 11).Value
        End Sub

        Sub Sub_tyhjennäMuuntajaArvot()
        ' Tyhjennetään muuntajan sähköisten arvojen kentät

        CboMuuntajaRyhmä.Value = Empty
        TxtMuuntajaHakunimi.Value = Empty
        TxtMuuntajaSn.Value = Empty
        TxtMuuntajaP0.Value = Empty
        TxtMuuntajaPk.Value = Empty
        TxtMuuntajaZk.Value = Empty
        TxtMuuntajaRk.Value = Empty
        TxtMuuntajaXk.Value = Empty
        TxtMuuntajaZ0.Value = Empty
        TxtMuuntajaR0.Value = Empty
        TxtMuuntajaX0.Value = Empty
        End Sub

        Formin yhdessä Framessa on siis Optionbuttonit "OptMuuntajaLisää", "OptMuuntajaMuokkaa" ja "OptMuuntajaPoista" sekä Listbox "LstMuuntajat". Samassa Framessa on lisäksi Label "LblMuuntajaHakunimi" sekä TextBox "TxtMuuntajaHakunimi"

        "OptMuuntaja20_1", "OptMuuntaja1_04" ja "OptMuuntaja20_04" ovat toisessa framessa ja "TxtMuuntajaSn" jne ovat kolmannessa framessa.

        Excel-taulukossa on lista muuntajista ja niiden sähköisistä arvoista joita haetaan (ja tarkoitus on muokata).

        Kun valitsen esimerkiksi "Muokkaa" ja sen jälkeen jonkun muuntajan ListBoxista, tulevat muuntajan sähköiset arvot näkyviin. Tämän jälkeen jos valitsenkin "Poista", niin haluaisin että äsken ListBoxixta valittu muuntaja säilyisi valittuna.


      • Pasi

        taikasanasta .ListIndex


      • Kunde
        Pasi kirjoitti:

        taikasanasta .ListIndex

        voisit nimetä muuntajan nimen sisältävän solun esim. "20 / 1 kV muuntajat" ja käyttää seuraavaa koodia sitten
        olettaen että sulla on muuntajan nimet B sarakkeessa ja aina yhtenäisellä alueella muuntajittain ja tyhjä rivi välissä seuraavan muuntajan tietoihin

        Dim rarray As Variant
        rarray = Range("20 / 1 kV muuntajat").CurrentRegion

        With Me.LstMuuntajat
        .List() = rarray
        .ListIndex = 0
        End With
        TxtMuuntajaSn = LstMuuntajat.List(LstMuuntajat.ListIndex, 1)
        TxtMuuntajaP0 = LstMuuntajat.List(LstMuuntajat.ListIndex, 2) jne...

        toi on aika mukava keino ja nopea

        ;-)Kunde


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Suomi on täysin sekaisin

      Jo ties monettako päivää hirveä itku ja poru jostain helvetin nilviäisistä. https://www.is.fi/taloussanomat/art-2000010
      Maailman menoa
      445
      4778
    2. Ensimmäisestä kohtaamisesta saakka

      minulla on ollut hämmentynyt olo. Miten voit tuntua siltä, että olisin tuntenut sinut aina? Sinun kanssasi on yhtä aikaa
      Ikävä
      15
      1702
    3. Aivan täysin tahallinen teko

      Ei mitään puolusteluja, eikä selittelyitä. Kuljettajalle kerrottiin asiasta siinä paikanpäällä, mutta silti hän ajoi ves
      Suomussalmi
      93
      1438
    4. Suomussalmi saatu vihdoin maailmankartalle!

      Nyt kun Suomussalmi on vihdoin viimein saatu ennennäkemättömällä tavalla maailman tietoisuuteen niin voitaisiin järjestä
      Suomussalmi
      53
      1339
    5. Olet saanut minut sekoamaan

      Tunteiden ristiaallokossa vellominen on ollut melkoinen kokemus. Ei kukaan ole saanut minua niin raiteiltaan kuin sinä.
      Ikävä
      22
      1296
    6. Mainehaitta metsäkonefirmalle

      Hukkajoen tapahtumista liikkuu paljon huhuja. Eikö kannattaisi julkaista raakkuja tuhonneen metsäkoneyrityksen nimi, kos
      Suomussalmi
      50
      1171
    7. Oho! Maajussi-Kallelta pakit saanut morsioehdokas Miss Suomi -kisoissa! Tunnistaisitko hänet nyt?

      Hmm, tunnistaisitko?!? Onnea missihulinoihin! Lue lisää ja katso kuvat: https://www.suomi24.fi/viihde/oho-maajussi-
      Suomalaiset julkkikset
      0
      1065
    8. Myönnän sinulle nyt

      Että olen erittäin mustasukkainen sinusta jo nyt. Ikävä on tämä tunne, kun tietämättömyyden solista nousee myrkkyä miele
      Ikävä
      54
      980
    9. Pysytäänkö nainen

      edelleen yhtä viileän tyynenä kun nähdään. Uskotko että tahtoessani saisin murettua tyyneytesi hyvin helposti.
      Ikävä
      57
      865
    10. Olen käyttäytynyt ristiriitaisesti

      eikä minusta varmaankaan ota mitään selvää. Se johtuu siitä, kun järki sanoo ei, ei, ei ja sydän sanoo kyllä, kyllä, kyl
      Ikävä
      60
      839
    Aihe