Avatar billede jensen363 Forsker
30. oktober 2007 - 14:31 Der er 16 kommentarer og
1 løsning

Skjul arkfane for brugere

Et regneark består af xx arkfaner, hver repræsenterende et medarbejdernavn ( fornavn og efternavn )

På baggrng af windows-logon, ( Environ("username") ), vil jeg gerne have at regnearket udelukkende  åbnes med kun den aktuelle brugers arkfane synlig.

Jeg har en arkfane kaldet UserID, indeholdende login, navn og rolle ( xxx, Lasse Jensen, User )

Jeg kan ikke lige få syntaxen til at virke i Lookup() i Workbook_Open() ... så den kun åbner den ene arkfane
Avatar billede supertekst Ekspert
30. oktober 2007 - 14:54 #1
Denne Sub skjuler alle ark - med undtagelse af det aktuelle medarbejdernavn
Hvis det kan være en hjælp:

Private Sub skjulArk(MedarbejderNavn)
    For ark = 1 To ActiveWorkbook.Sheets.Count
        If LCase(ActiveWorkbook.Sheets(ark).Name) <> MedarbejderNavn Then
            ActiveWorkbook.Sheets(ark).Visible = False
        End If
    Next ark
End Sub
Avatar billede jensen363 Forsker
30. oktober 2007 - 16:10 #2
Hvorfra får jeg medarbejdernavn ???

Medarbejderens login er ikke det samme som arkfanenavnet
Avatar billede supertekst Ekspert
30. oktober 2007 - 16:27 #3
Jeg forestillede mig, at du havde et ark med medarbejdernavnene - UserId hvorfra du kunne finde den pågældende medarbejder via Username..
Avatar billede jensen363 Forsker
30. oktober 2007 - 17:58 #4
Det har jeg også :-)

Jeg kunne bare ikke lige gennemskue f din kode, hvor Environ("username") kom ind i billedet.
Avatar billede supertekst Ekspert
30. oktober 2007 - 18:05 #5
Dim userID
Private Sub workbook_open()
    userID = Application.UserName
   
    usernavn = findUserNavn(userID)
    If usernavn <> "" Then
        skjulArk usernavn
    Else
        ActiveWorkbook.Close
    End If
End Sub
Private Function findUserNavn(uID)
    ActiveWorkbook.Sheets("UserId").Visible = True
   
    ActiveWorkbook.Sheets("UserID").Activate
    With ActiveSheet
        For ræk = 2 To 65000
            If .Cells(1, 1) = "" Then
                Exit For
            End If
           
            If LCase(.Cells(ræk, 1)) = LCase(userID) Then
                findUserNavn = .Cells(ræk, 2)
                Exit Function
            End If
        Next ræk
    End With
    findUserNavn = ""
   
End Function
Private Sub skjulArk(MedarbejderNavn)
Dim fundet As Boolean
    For ark = 1 To ActiveWorkbook.Sheets.Count
        ActiveWorkbook.Sheets(ark).Visible = True
    Next ark
   
    fundet = False
   
    For ark = 1 To ActiveWorkbook.Sheets.Count
        If LCase(ActiveWorkbook.Sheets(ark).Name) <> LCase(MedarbejderNavn) Then
            ActiveWorkbook.Sheets(ark).Visible = False
        Else
            ActiveWorkbook.Sheets(ark).Visible = True
            fundet = True
        End If
    Next ark
   
    If fundet = False Then
        ActiveWorkbook.Close
    End If
End Sub
Avatar billede jensen363 Forsker
31. oktober 2007 - 10:59 #6
Supertekst > super som vanligt ... men ...

... jeg har også behov for at een af brugerne i UserID har superbrugeradgang til alle arkfaner. Dette angives i kolonne 3 ( rolle ) ... er kan man være identificeret som User eller Supervisor ... Supervisor har ret til at se/arbejde med alle ark
Avatar billede supertekst Ekspert
31. oktober 2007 - 11:41 #7
Dim userID
Private Sub workbook_open()
Dim rolle
    userID = Application.UserName
   
    usernavn = findUserNavn(userID, rolle)
    If usernavn <> "" Then
        If LCase(rolle) <> "supervisor" Then
            skjulArk usernavn
        Else
            visAlleArk
        End If
    Else
        ActiveWorkbook.Close
    End If
End Sub
Private Function findUserNavn(uID, rolle)
    ActiveWorkbook.Sheets("UserId").Visible = True
   
    ActiveWorkbook.Sheets("UserID").Activate
    With ActiveSheet
        For ræk = 2 To 65000
            If .Cells(1, 1) = "" Then
                Exit For
            End If
           
            If LCase(.Cells(ræk, 1)) = LCase(userID) Then
                findUserNavn = .Cells(ræk, 2)
                rolle = .Cells(ræk, 3)
                Exit Function
            End If
        Next ræk
    End With
    findUserNavn = ""
   
End Function
Private Sub skjulArk(MedarbejderNavn)
Dim fundet As Boolean
    For ark = 1 To ActiveWorkbook.Sheets.Count
        ActiveWorkbook.Sheets(ark).Visible = True
    Next ark
   
    fundet = False
   
    For ark = 1 To ActiveWorkbook.Sheets.Count
        If LCase(ActiveWorkbook.Sheets(ark).Name) <> LCase(MedarbejderNavn) Then
            ActiveWorkbook.Sheets(ark).Visible = False
        Else
            ActiveWorkbook.Sheets(ark).Visible = True
            fundet = True
        End If
    Next ark
   
    If fundet = False Then
        ActiveWorkbook.Close
    End If
End Sub
Private Sub visAlleArk()
    For ark = 1 To ActiveWorkbook.Sheets.Count
        ActiveWorkbook.Sheets(ark).Visible = True
    Next ark
End Sub
Avatar billede jensen363 Forsker
31. oktober 2007 - 13:19 #8
Smukt ... det virker

Tillæg :

Hvis denne virker til at vise alle arkfaner :

Private Sub visAlleArk()
    For ark = 1 To ActiveWorkbook.Sheets.Count
        ActiveWorkbook.Sheets(ark).Visible = True
    Next ark

End Sub

Hvorfor virker denne så ikke ????

Private Sub SkjulAlleArk()
    For ark = 1 To ActiveWorkbook.Sheets.Count
        ActiveWorkbook.Sheets(ark).Visible = False
    Next ark

End Sub
Avatar billede supertekst Ekspert
31. oktober 2007 - 13:42 #9
Fordi der altid skal være mindst et ark synligt...
Avatar billede komputerdk Mester
01. november 2007 - 11:31 #10
dumt spørgsmål - men hvis åbner og deaktivere Makroer.. kan man vel se fanen med ark > vis ???

bør de skjulte ark ikke som standard være veryhidden ? (og gemme alle ark -1 som very hidden når filen lukkes)...
Avatar billede jensen363 Forsker
01. november 2007 - 12:17 #11
komputerdk > absolut relevant spørgsmål ...

Regnearket / modellen jeg arbejder med, er en flex-tids skabelon, som skal benyttes afdelingsvis, dvs. flere medarbejdere i eet og samme regneark (i hver sin arkfane).

Er der nogen smart måde hvormed man kan opnå denne "veryhidden" funktionalitet ... og er der kan man i det hele taget forhindre brugere i at deaktivere makro ved åbning af regnearket ????
Avatar billede supertekst Ekspert
01. november 2007 - 12:31 #12
Lås VBA-projektet via password
Avatar billede jensen363 Forsker
01. november 2007 - 15:44 #13
Nu har jeg efterhånden fået det til at virke :-)

ActiveWorkbook.Unprotect / ActiveWorkbook.Protect .... kan man ikke tilknytte password i vba koden ???
Avatar billede supertekst Ekspert
01. november 2007 - 15:48 #14
Eks.:

Private Sub Beskyttelse(bMode)
    If bMode = False Then
        ActiveWorkbook.Sheets(Ark).Unprotect Password:="PassWord"
    Else
        ActiveWorkbook.Sheets(Ark).Protect Password:="PassWord"
    End If
End Sub
Avatar billede jensen363 Forsker
01. november 2007 - 16:13 #15
Ok ... takker

Det blev lidt snørklet ... men det virker :-)
Avatar billede supertekst Ekspert
02. november 2007 - 09:19 #16
Så kan vi vel afslutte denne runde?
Avatar billede jensen363 Forsker
02. november 2007 - 09:27 #17
Ja .... tak for dit input :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester