Solun ehdollinen lukitus?

Kuka osaisi neuvoa miten saisin excelissä solun lukittua kun käyttäjä syöttää siihen tietyn arvon? Muussa tapauksessa tulisi kehoitus korjata.

Sen verran osaan tehdä, että jos vaikka soluun A1 syöttää jotain, tulee esim. soluun A2 korjauskehoitus tai jos se vastaa syötettä, siihen tulee OK, mutta pitäisi siis se solu A1 saada lukittua ettei enää muuteta jos meni oikein.

Jollain makrolla kai(?), mutta se on meikäläiselle niin vaikeaa...
121645
Äänestä

Muut lukivat myös

Vastaukset 12

Vanhimmat

taulukon moduuliin..
poista lukitus taulukon soluista ja muuta solun nimi, salasana ja haluttu arvo sopivaksi

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("A1")) Is Nothing Then
With ActiveSheet
.Unprotect Password:="Kunde"
If Range("A1") = 1 Then
Target.Locked = True
Else
MsgBox " Anna solun arvoksi 1"
End If
.Protect Password:="Kunde"
End With
End If
End Sub

Äänestä
  • oikea koodi
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error Resume Next
    If Not Intersect(Target, Range("A1")) Is Nothing Then
    With ActiveSheet
    .Unprotect Password:="Kunde"
    If Range("A1") = 1 Then
    Target.Locked = True
    .Protect Password:="Kunde"
    Else
    MsgBox " Anna solun arvoksi 1"
    Range("A1").Select
    End If
    End With
    End If
    End Sub

    Äänestä

  • kunde kirjoitti:

    oikea koodi
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error Resume Next
    If Not Intersect(Target, Range("A1")) Is Nothing Then
    With ActiveSheet
    .Unprotect Password:="Kunde"
    If Range("A1") = 1 Then
    Target.Locked = True
    .Protect Password:="Kunde"
    Else
    MsgBox " Anna solun arvoksi 1"
    Range("A1").Select
    End If
    End With
    End If
    End Sub

    mutta en saa tätäkään toimimaan - ongelmani on kai että miten saan tuon moduulin aktivoitumaan kun käyttäjä menee kyseiseen soluun? Ei tapahdu mitään ja voin kirjoittaa soluun mitä vain eikä tapahdu mitään.
    Makrot olen sallinut. Minulla on Excel 2007.

    Äänestä

  • Tumpelo (siis tosi tumpelo...) kirjoitti:

    mutta en saa tätäkään toimimaan - ongelmani on kai että miten saan tuon moduulin aktivoitumaan kun käyttäjä menee kyseiseen soluun? Ei tapahdu mitään ja voin kirjoittaa soluun mitä vain eikä tapahdu mitään.
    Makrot olen sallinut. Minulla on Excel 2007.

    olet laittanut koodin tavalliseen moduuliin, kun se pitää olla sen taulukon moduulissa, missä haluat lukutksen tapahtuban. Siis TAULUKON MODUULIIN...

    Äänestä

  • kunde kirjoitti:

    olet laittanut koodin tavalliseen moduuliin, kun se pitää olla sen taulukon moduulissa, missä haluat lukutksen tapahtuban. Siis TAULUKON MODUULIIN...

    Siis kun menen Kehitystyökalut / Visual basic / insert / niin mitä sitten - vai onko väärä reitti? Siell on joko inset module tai class module, ei auta.
    Yhtä eksyksiin päädyn jos menen Nauhoita makro-nappulan kautta, sitten pitäisi valita pikanäppäin ja tämän pitäisi siis aktivoitua kun käyttäjä menee tähän taulukkoon.

    Eli minulla ei ole tämä terminologia hallussa :(

    Äänestä

  • se taulukon moduuli? kirjoitti:

    Siis kun menen Kehitystyökalut / Visual basic / insert / niin mitä sitten - vai onko väärä reitti? Siell on joko inset module tai class module, ei auta.
    Yhtä eksyksiin päädyn jos menen Nauhoita makro-nappulan kautta, sitten pitäisi valita pikanäppäin ja tämän pitäisi siis aktivoitua kun käyttäjä menee tähän taulukkoon.

    Eli minulla ei ole tämä terminologia hallussa :(

    tapa 1
    taulukkovalitsimesta klikkaa haluttu taulukko ja hiiren oikealla klikkaat ko taulukon valitsimmessa ja avautuvasta valikosta View Code/Näytä koodi. Avautuvaan moduuliin sitten liität koodin...

    tapa 2
    taulukkopuolella näppäinyhdistelmä CTRL F11 ja vasemmalta Projektinhallinnasta tuplaklikkaat haluamaasi taulukkomoduulia.
    Varmista, että on oikea projekti laajennettuna (- merkki projektin edessä), jos siinä on -merkki niin laajenna projekti klikkaamalla merkkiä. Seuraavaksi pitäisi Microsoft Excel Objects olla näkyvissä ja jos ei ole niin toista ylläoleva. Nyt sieltä löytyy taulukkomoduulit tyyliin Sheet1 (Koe), missä eka on VBA koodissa käytettävä nimi, joka voidaan vaihtaa ominaisuuksista ja suluissa on taulukon nimi, joka näkyy taulukkovalitsimessa.
    No nyt tuplaklikkaat sitten haluamaasi taulukkoa ja liität koodin sinne.
    Kyllä koodin nyt pitäisi toimia...

    Äänestä

  • kunde kirjoitti:

    tapa 1
    taulukkovalitsimesta klikkaa haluttu taulukko ja hiiren oikealla klikkaat ko taulukon valitsimmessa ja avautuvasta valikosta View Code/Näytä koodi. Avautuvaan moduuliin sitten liität koodin...

    tapa 2
    taulukkopuolella näppäinyhdistelmä CTRL F11 ja vasemmalta Projektinhallinnasta tuplaklikkaat haluamaasi taulukkomoduulia.
    Varmista, että on oikea projekti laajennettuna (- merkki projektin edessä), jos siinä on -merkki niin laajenna projekti klikkaamalla merkkiä. Seuraavaksi pitäisi Microsoft Excel Objects olla näkyvissä ja jos ei ole niin toista ylläoleva. Nyt sieltä löytyy taulukkomoduulit tyyliin Sheet1 (Koe), missä eka on VBA koodissa käytettävä nimi, joka voidaan vaihtaa ominaisuuksista ja suluissa on taulukon nimi, joka näkyy taulukkovalitsimessa.
    No nyt tuplaklikkaat sitten haluamaasi taulukkoa ja liität koodin sinne.
    Kyllä koodin nyt pitäisi toimia...

    Kun tietää mitä tekee....

    Taitaapa toimia :=)

    Kiitos kun jaksat meitä Tumpeloita neuvoa. Yliopisto säästäisi pitkän pennin jos järjestäisi henkilökunnalle kunnon excel-kursseja, muttakunei. Opetellaan vaan yhteenlaskua ja talukoiden avaamista.

    Äänestä

  • kunde kirjoitti:

    tapa 1
    taulukkovalitsimesta klikkaa haluttu taulukko ja hiiren oikealla klikkaat ko taulukon valitsimmessa ja avautuvasta valikosta View Code/Näytä koodi. Avautuvaan moduuliin sitten liität koodin...

    tapa 2
    taulukkopuolella näppäinyhdistelmä CTRL F11 ja vasemmalta Projektinhallinnasta tuplaklikkaat haluamaasi taulukkomoduulia.
    Varmista, että on oikea projekti laajennettuna (- merkki projektin edessä), jos siinä on -merkki niin laajenna projekti klikkaamalla merkkiä. Seuraavaksi pitäisi Microsoft Excel Objects olla näkyvissä ja jos ei ole niin toista ylläoleva. Nyt sieltä löytyy taulukkomoduulit tyyliin Sheet1 (Koe), missä eka on VBA koodissa käytettävä nimi, joka voidaan vaihtaa ominaisuuksista ja suluissa on taulukon nimi, joka näkyy taulukkovalitsimessa.
    No nyt tuplaklikkaat sitten haluamaasi taulukkoa ja liität koodin sinne.
    Kyllä koodin nyt pitäisi toimia...

    Kiitos, Kunde kärsivällisistä neuvoista. Vielä on ihmeteltävää - tapahtuu nimittäin eri aisoita riippuen suojaanko taulukon sekä työkirjan rakenteen samalla vai eri salasanalla kuin vba-koodissa:

    Kun nimittäin suojaan taulukon, niin en saa suojattua koodia ja solusuojauksissakin on edelleen ihmeteltävää. Kyseessä on siis taulu, jossa käyttäjä liikku tabuloimalla niissä soluissa joita hänen on tarkoitus muuttaa, muut on lukittu. Yksi solu on sellainen, että se lukittuu kun siihen syötetään haluttu arvo.

    Suojaus eri salasanalla:
    Syöte oikein: taulukko pysyy lukittuna, mutta kyseinen solu ei lukitu kuten piti
    Syöte väärin: kuten edellä
    Suojaus samalla salasanalla:
    Syöte oikein: kaikkien solujen lukitukset poistuvat ja lukittuvat, kyseinen solu mukaan lukien, vasta kun kyseiseen soluun mennään toisen kerran
    Syöte väärin: Kuten edellä
    Kaikissa tapauksissa Näytä koodi –toiminto on käytettävissä koko ajan klikkaamalla hiiren oikealla nappulalla taulukonvalitsinta ja silloin pääsee koodia siis ropeloimaan ilman mitään salasanakyselyjä

    Neuvoista taas kiitollinen :)

    Äänestä

  • Tumpelo kirjoitti:

    Kiitos, Kunde kärsivällisistä neuvoista. Vielä on ihmeteltävää - tapahtuu nimittäin eri aisoita riippuen suojaanko taulukon sekä työkirjan rakenteen samalla vai eri salasanalla kuin vba-koodissa:

    Kun nimittäin suojaan taulukon, niin en saa suojattua koodia ja solusuojauksissakin on edelleen ihmeteltävää. Kyseessä on siis taulu, jossa käyttäjä liikku tabuloimalla niissä soluissa joita hänen on tarkoitus muuttaa, muut on lukittu. Yksi solu on sellainen, että se lukittuu kun siihen syötetään haluttu arvo.

    Suojaus eri salasanalla:
    Syöte oikein: taulukko pysyy lukittuna, mutta kyseinen solu ei lukitu kuten piti
    Syöte väärin: kuten edellä
    Suojaus samalla salasanalla:
    Syöte oikein: kaikkien solujen lukitukset poistuvat ja lukittuvat, kyseinen solu mukaan lukien, vasta kun kyseiseen soluun mennään toisen kerran
    Syöte väärin: Kuten edellä
    Kaikissa tapauksissa Näytä koodi –toiminto on käytettävissä koko ajan klikkaamalla hiiren oikealla nappulalla taulukonvalitsinta ja silloin pääsee koodia siis ropeloimaan ilman mitään salasanakyselyjä

    Neuvoista taas kiitollinen :)

    VBA editorin puolella valitse valikoista
    Tools/VBAProject Properties -avautuu lomake ja siitä klikkaa Protection välilehti ja täppä kohtaa Lock Project for viewing ja salasanan kirjoitat pariin kertaa ja OK. Tallenna työkirja ja avaa uudelleen nyt koodit näkyvät vain salasanalla.

    Muutin koodin solunmuutos tapahtumaan...
    koodissa salasana on oltava sama kuin taulukon suojaus salasana.

    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Not Intersect(Target, Range("A1")) Is Nothing Then
    With ActiveSheet
    .Unprotect Password:="Kunde"
    If Range("A1") = 1 Then
    Target.Locked = True

    Else
    MsgBox " Anna solun arvoksi 1"
    Range("A1").Select
    End If
    .Protect Password:="Kunde"
    End With
    End If
    End Sub

    Äänestä

  • kunde kirjoitti:

    VBA editorin puolella valitse valikoista
    Tools/VBAProject Properties -avautuu lomake ja siitä klikkaa Protection välilehti ja täppä kohtaa Lock Project for viewing ja salasanan kirjoitat pariin kertaa ja OK. Tallenna työkirja ja avaa uudelleen nyt koodit näkyvät vain salasanalla.

    Muutin koodin solunmuutos tapahtumaan...
    koodissa salasana on oltava sama kuin taulukon suojaus salasana.

    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Not Intersect(Target, Range("A1")) Is Nothing Then
    With ActiveSheet
    .Unprotect Password:="Kunde"
    If Range("A1") = 1 Then
    Target.Locked = True

    Else
    MsgBox " Anna solun arvoksi 1"
    Range("A1").Select
    End If
    .Protect Password:="Kunde"
    End With
    End If
    End Sub

    Toimii ja ei toimi. Eli kun tein tuon ensimmäisen kerran niin tuntui ensin että pelasi kuten piti. Mutta sitten aloin "leikkiä" tällä ja havaitsin:
    1. Makro ei aktivoidu kun menee siihen soluun, missä piti näin olla, MUTTA se aktivoituu kun tuhoan siihen pistämäni syötteen
    2. Solu ei lukitu, mutta muut solut, jotka ovat alunperinkin lukittuja, pysyvät lukittuina kuten tarkoitus on

    Vaikuttaako se että tämä on excel 2007? Jotenkin epävarman tuntuisia nämä excelin makrot ja suojaukset.

    Äänestä

  • Tumpelo kirjoitti:

    Toimii ja ei toimi. Eli kun tein tuon ensimmäisen kerran niin tuntui ensin että pelasi kuten piti. Mutta sitten aloin "leikkiä" tällä ja havaitsin:
    1. Makro ei aktivoidu kun menee siihen soluun, missä piti näin olla, MUTTA se aktivoituu kun tuhoan siihen pistämäni syötteen
    2. Solu ei lukitu, mutta muut solut, jotka ovat alunperinkin lukittuja, pysyvät lukittuina kuten tarkoitus on

    Vaikuttaako se että tämä on excel 2007? Jotenkin epävarman tuntuisia nämä excelin makrot ja suojaukset.

    ja liitä tänne semmoinen toimiva versio tosta suojauksesta. Suojauksien säätely on muuttunut vuosien varrella aika paljon ja työni(asiakkaani)johdosta minulla ei ole uudempaa 2007 versiota käytössäni.

    Äänestä

  • kunde kirjoitti:

    ja liitä tänne semmoinen toimiva versio tosta suojauksesta. Suojauksien säätely on muuttunut vuosien varrella aika paljon ja työni(asiakkaani)johdosta minulla ei ole uudempaa 2007 versiota käytössäni.

    Kyllä tämä taitaa jo pelata. Konstikasta on näin tottumattomalle. Aurinkoista kevättä!

    Äänestä

Kommentoi aloitusta


Tumpelo kirjoitti:

Kuka osaisi neuvoa miten saisin excelissä solun lukittua kun käyttäjä syöttää siihen tietyn arvon? Muussa tapauksessa tulisi kehoitus korjata.

Sen verran osaan tehdä, että jos vaikka soluun A1 syöttää jotain, tulee esim. soluun A2 korjauskehoitus tai jos se vastaa syötettä, siihen tulee OK, mutta pitäisi siis se solu A1 saada lukittua ettei enää muuteta jos meni oikein.

Jollain makrolla kai(?), mutta se on meikäläiselle niin vaikeaa...

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