Avatar billede kef Nybegynder
07. oktober 2003 - 19:03 Der er 15 kommentarer og
1 løsning

Registrerings log i Excel

Problemstilling:
Er det muligt at lave en log fil til et Excel ark således at man kan følge med i hvem der har været inde i et bestemt regneark og hvornår. Loggen skal genereres automatisk.
Det skal fungerer i en koncern hvor alle brugere er kendt ved login.

Hvis det er muligt kan man da programmerer Excel arket således at man ikke kan komme ud af arket uden at opdaterer/udfylde bestemte felter i arket.
Avatar billede jkrons Professor
07. oktober 2003 - 19:22 #2
Denne kode skriver bruger navn og tidspunkt for åbning ned i en logfil. Denne skal nok ligge på serveren,på et share, som alle har adgang til og skriverettigheder til.

Private Sub Workbook_Open()
  Bruger = Environ("username")
  Open "c:\log.txt" For Append As #1   
  Write #1, bruger; Now() 
  Close #1
End Sub
Avatar billede kef Nybegynder
07. oktober 2003 - 21:10 #3
Hej jkrons jeg har problemer med at få din løsning til at virke, kan du eventuelt give et lille hint om hvad der går galt. Jeg har lavet en fil som hedder log.txt vha. notepad men brugernavnet bliver kun overført som "" men resten af de data jeg ønsker bliver overført.
Avatar billede kabbak Professor
07. oktober 2003 - 21:12 #4
Private Sub Workbook_Open()
Dim wshNetwork
Set wshNetwork = CreateObject("WScript.Network")
Bruger =  = wshNetwork.UserName
Open "c:\log.txt" For Append As #1   
  Write #1, bruger; Now() 
  Close #1
End Sub

prøv at rette til dette
Avatar billede kabbak Professor
07. oktober 2003 - 21:14 #5
hov skal være

  Bruger = wshNetwork.UserName
Avatar billede jkrons Professor
07. oktober 2003 - 21:35 #6
Min kode virker hos mig, men prøv evt med

Private Sub Workbook_Open()
  bruger = Application.UserName
  Open "c:\log.txt" For Append As #1
  Write #1, bruger; Now()
  Close #1
End Sub

Det kan være et spørgsmål om versionsforskelle.
Avatar billede bak Forsker
08. oktober 2003 - 19:23 #7
uden at skulle blande mig ret meget :-)
Kabbak's version tager brugernavnet til netværkslogin, hvor jkrons tager excels brugernavn.
excels brugernavn findes i "Funktioner-Indstillinger-Standard(generel)-Brugernavn
Hos os står der desværre tit firmanavn eller det er bare blank og så kan det desværre ikke bruges.
Avatar billede jkrons Professor
08. oktober 2003 - 22:51 #8
bak->  Nwej det er selvfølgelig nødvendigt, at man har et userid specificeret.

Men Environ("username") burde virke. Lige bortset fra, at jeg ikke kan hukse hvilken versinm der kom med i.
Før den blev introduceret, brugte jeg denne funktion til at henter brugernavnet, og den virker stadig, men er noget mere besværlig :-)

Private Declare Function apiGetUserName Lib "advapi32.dll" Alias _
    "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Function fOSUserName() As String
' Returns the network login name
Dim lngLen As Long, lngX As Long
Dim strUserName As String
    strUserName = String$(254, 0)
    lngLen = 255
    lngX = apiGetUserName(strUserName, lngLen)
    If (lngX > 0) Then
        fOSUserName = Left$(strUserName, lngLen - 1)
    Else
        fOSUserName = vbNullString
    End If
End Function

Funktionen kunne så kaldes fra Workbook_Open
Avatar billede bak Forsker
09. oktober 2003 - 08:00 #9
Environ("username")  virker fint på win2000/xl2000
Den havde jeg ikke set før.. :-)
Avatar billede jkrons Professor
09. oktober 2003 - 08:07 #10
Men det virker jo desværre tilsyneladende ikke hos kef :-(
Avatar billede kef Nybegynder
09. oktober 2003 - 09:03 #11
Hej Så er jeg tilbage. Der er ikke fordi jeg ikke vil svare men er afhængig af om det kan godkendes. Det virker fint som jeg ønsker det lige nu. Er ved at undersøge om vi skal have mulighed for at checke på hvem det er som kommer ind i arket for så at kunne logge i en bestemt logfil for den enkelte bruger samt hvilken fil han besøgte. Sagt med andre ord, skal det være muligt hvis jeg kommer ind i en fil at logge informationerne i min egen logfil med username, dato, tid, samt hvilken fil jeg besøgte. Dette skal gælde for alle brugere. Hvis jeg besøger en anden fil skal disse informationer logges i den samme logfil. således kan jeg ved audit se en komplet log over en bestemt person i et kvalitetssystem.
Avatar billede jkrons Professor
09. oktober 2003 - 09:14 #12
Sidstnævnte er er ikke noget problem. Så skal koden bare lægges i alle de pågældende ark. For at give hver bruger sin egen log-fil, kan du ændre koden som følger. Jeg har taget udgangspunkt i kabbak's, da din version tilsyneladende ikke genkender Environ() funktionen:

Private Sub Workbook_Open()
    Dim wshNetwork
    Dim Bruger As String
    Dim Filnavn As String
   
    Set wshNetwork = CreateObject("WScript.Network")
    Bruger = wshNetwork.UserName
    Filnavn = "c:\" & Bruger & ".txt"
    Open Filnavn For Append As #1
        Write #1, Bruger; Now()
        Close #1
    Set wshNetwork = Nothing
End Sub
Avatar billede jkrons Professor
09. oktober 2003 - 09:18 #13
Sorry, det var den forkerte version, her er den rigtige - der også skriver navnet på den åbnede fil ned i loggen.

Private Sub Workbook_Open()
    Dim wshNetwork
    Dim Bruger As String
    Dim Filnavn As String
    Dim Brugtnavn As String
   
    Brugtnavn = ActiveWorkbook.FullName
   
    Set wshNetwork = CreateObject("WScript.Network")
    Bruger = wshNetwork.UserName
    Filnavn = "c:\" & Bruger & ".txt"
    Open Filnavn For Append As #1
        Write #1, Bruger; Brugtnavn; Now();
        Close #1
    Set wshNetwork = Nothing
End Sub
Avatar billede jkrons Professor
09. oktober 2003 - 09:33 #14
Og så glemte jeg helt dit sidste spørgsmål i det første indlæg.

Du kan godt styre, at en fil ikke kan lukkes, før bestemte felter er ændret/udfyldt.

I eksemplet testes på, om indholdet af A1 har ændrer sig mellem åbning og lukning, hvis ikke anulleres lukningen, og der vises en meddelelsesboks.

Det kræver at du definerer en Private Variabel (i mit tilfælde CellAd), som kan rumme celleindholdet. Den skla erklæres i den generelle sektion. I WorkBook_Open tildeler du den så en værdi, der svarer til indholdet af den celle, der skal testet på. Jeg har erklæret den som Variant, da jeg jo ikke kendet indholdet af den celle, du vil teste på, men du bør selv erklære den med en relevant datatype.

I Workbook_BeforeClose, tester du så, om den pågældende celle stadig har samme værdi, som variablen. Hvis det er tilfældet, annulleres luukningen og der vises en meddelelsesboks.

Hvis der er flere celler, du vil teste på, skal du erklære ebn variabel til hver af dem, tildele alle variabler en værdi i WorkBook_Open, og teste på den alle i Workbook_BeforeClose.

Denm samlede kode for log, og ændringskontrol ser så sådan ud. Den første erklæring står i den generelle sektion.

Private CellAd As Variant



Private Sub Workbook_BeforeClose(Cancel As Boolean)
If CellAd = Range("a1").Value Then
MsgBox "Du har ikke opdateret værdien i celle A1" & vbCrLf & _
"og kan derfor ikke lukke", _
vbOKOnly + vbExclamation, "Opdateringsfejl"

Cancel = True
End If
End Sub

Private Sub Workbook_Open()
    Dim wshNetwork
    Dim Bruger As String
    Dim Filnavn As String
    Dim Brugtnavn As String
   
    CellAd = Range("a1").Value
   
    Brugtnavn = ActiveWorkbook.FullName
   
    Set wshNetwork = CreateObject("WScript.Network")
    Bruger = wshNetwork.UserName
    Filnavn = "c:\" & Bruger & ".txt"
    Open Filnavn For Append As #1
        Write #1, Bruger; Brugtnavn; Now();
        Close #1
    Set wshNetwork = Nothing
End Sub
Avatar billede kef Nybegynder
09. oktober 2003 - 09:36 #15
Lille problem. Den lister ikke data for hver gang man kommer til en fil under hinanden. De står i forlængelse af hinanden i logfilen.
Avatar billede jkrons Professor
09. oktober 2003 - 09:44 #16
Min fejl. I Mine sidste forsalg har jeg fået et semikolon for meget med i Write sætningen. Den skal hedde:

Write #1, Bruger; Brugtnavn; Now()

ikke

Write #1, Bruger; Brugtnavn; Now();
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