Listboxin valinnan säilyminen

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-
4590
Äänestä

Muut lukivat myös

Vastaukset 4

Vanhimmat

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

Äänestä
  • 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.

    Äänestä

  • taikasanasta .ListIndex

    Äänestä

  • 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

    Äänestä

Kommentoi aloitusta


Pasi kirjoitti:

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-

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu