Suojausongelma

Onko kenelläkään tarjota koodia seuraavanlaiseen suojauspulmaan. Hallinnoin päivittäin täytettävää jaettua tiedostoa, mutta ongelmaksi on tullut se, että taulukkoon aiemmin lisättyjä tietoja on voitu käyttäjän toimesta muuttaa.

Olisi tarve saada automaattisesti (makrolla?) tallennuksen yhteydessä suojattua rivit, joille on jo tehty merkintöjä.
Onnistuukohan?
9735
Äänestä

Muut lukivat myös

Vastaukset 9

Vanhimmat

Moi!
Tutustu excelin jaettu asiakirjan ominaisuuksiin,
sen voi suojata salasanalla ja jäljittää muutokset.

Äänestä
  • Selvennän! Taulukkoa täydennetään eri työpisteissä. Pulmana on mahdollisuus poistaa (tahattomasti!?) edellisten tekemiä merkintöjä. Muutosloki kyllä paljastaa muutokset, mutta se ei estä niitä. Siksi olisi kätevää saada merkinnät suojattua tavallisen tallennuksen yhteydessä.

    Olen kokeillut makroa, joka sen tekee, mutta se edellyttää suojattavan alueen valitsemista ennen makron suorittavan tallennusnappulan painallusta. Se ei siis riitä.

    Äänestä

  • Kyynikko kirjoitti:

    Selvennän! Taulukkoa täydennetään eri työpisteissä. Pulmana on mahdollisuus poistaa (tahattomasti!?) edellisten tekemiä merkintöjä. Muutosloki kyllä paljastaa muutokset, mutta se ei estä niitä. Siksi olisi kätevää saada merkinnät suojattua tavallisen tallennuksen yhteydessä.

    Olen kokeillut makroa, joka sen tekee, mutta se edellyttää suojattavan alueen valitsemista ennen makron suorittavan tallennusnappulan painallusta. Se ei siis riitä.

    Valaise lisää,

    Se mitä päivittäin täydennetään

    Moneenko soluun käyttäjä täydentää ?

    Yksi mahdollisuus on tehdä lomakkeesta mallipohja, ja siitä vban avulla kopioidaan nimetyt solut jotka liitetään "raporttiin". Raportti tallennettuna kansioon johon vain sinulla on poisto-oikeus. Muut pääsevät vain lukemaan sitä muttei muokkaamaan.

    Äänestä

  • miten on ? kirjoitti:

    Valaise lisää,

    Se mitä päivittäin täydennetään

    Moneenko soluun käyttäjä täydentää ?

    Yksi mahdollisuus on tehdä lomakkeesta mallipohja, ja siitä vban avulla kopioidaan nimetyt solut jotka liitetään "raporttiin". Raportti tallennettuna kansioon johon vain sinulla on poisto-oikeus. Muut pääsevät vain lukemaan sitä muttei muokkaamaan.

    Taulukkoa siis täydennetään siten, että työntekijät merkitsevät rivi riviltä päiväyksen ja kymmenkunta tapahtumaa, joista kuukausittain tehdään yhteenveto. Se, että samaa tiedostoa täyttää useampi työntekijä, kasvattaa riskiä virheellisiin toimintoihin, joista katalin on toisen työntekijän tekemien merkintöjen poisto. Siksi olisi hyvä saada täydennetty rivi suojattua tallennuksen yhteydessä.

    Äänestä

  • Kyynikko kirjoitti:

    Taulukkoa siis täydennetään siten, että työntekijät merkitsevät rivi riviltä päiväyksen ja kymmenkunta tapahtumaa, joista kuukausittain tehdään yhteenveto. Se, että samaa tiedostoa täyttää useampi työntekijä, kasvattaa riskiä virheellisiin toimintoihin, joista katalin on toisen työntekijän tekemien merkintöjen poisto. Siksi olisi hyvä saada täydennetty rivi suojattua tallennuksen yhteydessä.

    poista ensiksi taulukosta (nyt Sheet1) kaikkien solujen lukitus ja suojaa VBA projekti salasanalla. Tallenna sitten työkirja normaalisti ja siinäpä se...

    oletuksena, että A sarakkeeseen tulee aina tieto, muuta sopivaksi

    ThisWorkbook moduuliin...

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim vika As Integer
    On Error Resume Next
    Sheets("Sheet1").Unprotect Password:="Kunde"
    vika = Range("A65536").End(xlUp).Row
    Range("A1:A" & vika).EntireRow.Locked = True
    Sheets("Sheet1").Protect Password:="Kunde"
    End Sub

    Äänestä

  • Kyynikko kirjoitti:

    Taulukkoa siis täydennetään siten, että työntekijät merkitsevät rivi riviltä päiväyksen ja kymmenkunta tapahtumaa, joista kuukausittain tehdään yhteenveto. Se, että samaa tiedostoa täyttää useampi työntekijä, kasvattaa riskiä virheellisiin toimintoihin, joista katalin on toisen työntekijän tekemien merkintöjen poisto. Siksi olisi hyvä saada täydennetty rivi suojattua tallennuksen yhteydessä.

    No koitetaan pidemmän kaavan kautta.

    1. luo sellaiselle verkkoasemalle kansio, johon kaikilla käyttäjillä pääsy.
    2. anna kansion nimeksi vaikka DATA.
    3. muokkaa kansion ominaisuuksista security kohdasta, siten että itselläsi ja pääkäyttäjällä täydet oikeudet. Poista everyone käyttäjä ja luo uusi everyone, jolle täpät ruuduissa; READ&EXECUTE, LIST FOLDER CONTENTS, READ.
    4. luo xls. tiedosto esim. RAPORTTI. ja tallenna se äsken luomaasi DATA kansioon.
    5. luo template (mallipohja) muotoinen tiedosto, joka tulee olemaan se jota kaikki täyttävät. Eli eivät näe mitä aikaisemmin täytetty vaan täydentävät ainostaan omat tietonsa.
    6. seuraava pätkä vban moduuliin tohon luomaasi template tiedostoon.
    Sub luoraportti()

    Range("A1").Select
    ActiveCell.FormulaR1C1 = "=TODAY()"

    Range("A1").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False

    Dim Nimi As String
    Dim Mitä As String
    Dim Missä As String
    Dim Milloin As String
    Dim Koska As String
    Dim Päiväys As Date
    Dim Oletuskansio As String

    Nimi = Range("A3")
    Mitä = Range("B3")
    Missä = Range(”C3”)
    Milloin = Range("D3")
    Koska = Range("E3")
    Päiväys = ActiveCell.Value
    Oletuskansio = "F:\?????\Data"

    If Nimi = "" Then

    MsgBox "Syötä nimi soluun B3"

    Else

    ChDir Oletuskansio
    Workbooks.Open Filename:=Oletuskansio & "\Raportti.xls"
    Range("A2").Select
    Selection.EntireRow.Insert

    Range("A2").Select
    ActiveCell.FormulaR1C1 = Nimi & "_" & Mitä & "_" & Missä & "_" & Milloin & "_" & koska & "_" & Päiväys

    Range("A1").Select
    Application.CutCopyMode = False

    MsgBox "Lisätty rivi 2, solu A2 = " & Nimi & "_" & Mitä & "_" & Missä & "_" & Milloin & "_" & Koska & "_" & Päiväys

    ActiveWorkbook.Save
    ActiveWorkbook.Close
    Range("A1").Select

    End If

    End Sub

    7. MUOKKAA EDELLISTÄ, oletuskansio kohtaan jossa edellä F:\ laita oikea polku.
    kuka, mitä miksi jne. voit itse lisätä siten että riittävät sulle.
    8. Luo painike template tiedostoon, jolla käyttäjä suorittaa makron.

    9. ja sitä mallipohjaa et tallenna samaan kansioon, siis se minkä oikeudet olet muokannut.

    - Kaino -

    Äänestä

  • kunde kirjoitti:

    poista ensiksi taulukosta (nyt Sheet1) kaikkien solujen lukitus ja suojaa VBA projekti salasanalla. Tallenna sitten työkirja normaalisti ja siinäpä se...

    oletuksena, että A sarakkeeseen tulee aina tieto, muuta sopivaksi

    ThisWorkbook moduuliin...

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim vika As Integer
    On Error Resume Next
    Sheets("Sheet1").Unprotect Password:="Kunde"
    vika = Range("A65536").End(xlUp).Row
    Range("A1:A" & vika).EntireRow.Locked = True
    Sheets("Sheet1").Protect Password:="Kunde"
    End Sub

    Ilmeisesti olen ilmaissut itseäni huonosti, sillä valitettavasti antamasi koodi ei vastannut tarvettani. Siitä voi silti olla hyötyä jossain muuussa tapauksessa, ja sain ainakin lisäoppia koodin sijoittamisesta.

    Kerron taulukostani, joka on siis jaettuna yhteisellä resurssilla. Taulukon solut A1:R5 ja sarakkeet B, O ja P ovat sellaisia, joihin ei ole muilla asiaa, ja ne olen suojannut salasanalla. Riviltä kuusi alkaen taulukkoa täydennetään rivin ollessa yksi tietue. Tietueiden määrää ei ole rajoitettu, mutta olen varautunut tuhanteen riviin värittämällä alueen A6:R1006.

    Taulukko tuntuu toimivan muuten hyvin, mutta se on altis vahingoittumaan, sillä aikaisemmin täydennetyt rivit jäävät ilman suojaa.

    Siksi haluaisin, että jokainen täytetty rivi tulisi suojattua (salasanalla) tallennuksen yhteydessä. Tuon tarjoamasi koodin perusteella olettaisin, että se voisi olla jopa mahdollista.

    Oma VBA-taitoni rajoittuu toistaiseksi vielä nauhoitettujen ja muiden tekemien koodien modifiointiin. Tämän palstan ansiosta siitäkin on ollut jo paljon iloa :)

    Kansioiden oikeuksiin minulla ei ole puuttumista, joten haluan pysyä yksinkertaisemmassa ratkaisussa.

    Äänestä

  • Kyynikko kirjoitti:

    Ilmeisesti olen ilmaissut itseäni huonosti, sillä valitettavasti antamasi koodi ei vastannut tarvettani. Siitä voi silti olla hyötyä jossain muuussa tapauksessa, ja sain ainakin lisäoppia koodin sijoittamisesta.

    Kerron taulukostani, joka on siis jaettuna yhteisellä resurssilla. Taulukon solut A1:R5 ja sarakkeet B, O ja P ovat sellaisia, joihin ei ole muilla asiaa, ja ne olen suojannut salasanalla. Riviltä kuusi alkaen taulukkoa täydennetään rivin ollessa yksi tietue. Tietueiden määrää ei ole rajoitettu, mutta olen varautunut tuhanteen riviin värittämällä alueen A6:R1006.

    Taulukko tuntuu toimivan muuten hyvin, mutta se on altis vahingoittumaan, sillä aikaisemmin täydennetyt rivit jäävät ilman suojaa.

    Siksi haluaisin, että jokainen täytetty rivi tulisi suojattua (salasanalla) tallennuksen yhteydessä. Tuon tarjoamasi koodin perusteella olettaisin, että se voisi olla jopa mahdollista.

    Oma VBA-taitoni rajoittuu toistaiseksi vielä nauhoitettujen ja muiden tekemien koodien modifiointiin. Tämän palstan ansiosta siitäkin on ollut jo paljon iloa :)

    Kansioiden oikeuksiin minulla ei ole puuttumista, joten haluan pysyä yksinkertaisemmassa ratkaisussa.

    samat ohjeet edelleen...
    eli poista taulukosta kaikkien solujen lukitukset ja tallenna työkirja. Muista suojata VBA koodi myös salasanalla.

    lisätty sarakkeet suojaukseen ja lukitusrivin alku nyt riviltä 6. Helppo lisätä tohon uusia lukittavia soluja

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim vika As Integer
    On Error Resume Next
    Sheets("Sheet1").Unprotect Password:="Kunde"

    Range("A1:R5").Locked = True
    Columns("B:B").Locked = True
    Columns("O:O").Locked = True
    Columns("P:P").Locked = True
    vika = Range("A65536").End(xlUp).Row
    If vika > 5 Then
    Range("A6:A" & vika).EntireRow.Locked = True
    End If
    Sheets("Sheet1").Protect Password:="Kunde"
    End Sub

    Äänestä

  • kunde kirjoitti:

    samat ohjeet edelleen...
    eli poista taulukosta kaikkien solujen lukitukset ja tallenna työkirja. Muista suojata VBA koodi myös salasanalla.

    lisätty sarakkeet suojaukseen ja lukitusrivin alku nyt riviltä 6. Helppo lisätä tohon uusia lukittavia soluja

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim vika As Integer
    On Error Resume Next
    Sheets("Sheet1").Unprotect Password:="Kunde"

    Range("A1:R5").Locked = True
    Columns("B:B").Locked = True
    Columns("O:O").Locked = True
    Columns("P:P").Locked = True
    vika = Range("A65536").End(xlUp).Row
    If vika > 5 Then
    Range("A6:A" & vika).EntireRow.Locked = True
    End If
    Sheets("Sheet1").Protect Password:="Kunde"
    End Sub

    Tuo homma toimi hienosti, kunnes jaoin tiedoston. Ilmeisesti pitäisi poistaa jako tallennuksen ajaksi, mutta siitä tullee ilmoituksia käyttäjälle. Se ei käy päinsä. Kokeilin jaon poistamista ja palauttamista nauhoitetulla koodilla, mutta siitä tuli vain ongelmia.

    Äänestä

Kommentoi aloitusta


Kyynikko kirjoitti:

Onko kenelläkään tarjota koodia seuraavanlaiseen suojauspulmaan. Hallinnoin päivittäin täytettävää jaettua tiedostoa, mutta ongelmaksi on tullut se, että taulukkoon aiemmin lisättyjä tietoja on voitu käyttäjän toimesta muuttaa.

Olisi tarve saada automaattisesti (makrolla?) tallennuksen yhteydessä suojattua rivit, joille on jo tehty merkintöjä.
Onnistuukohan?

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