Avatar billede janvogt Praktikant
05. maj 2003 - 09:34 Der er 8 kommentarer og
1 løsning

Excel 97 VBA Funktion laves om til alm. kode

Jeg har noget kode, som danner en log-fil, som logger hvilket tidspunkt og hvor lang tid brugerne benytter en bestemt Excel-fil.

Derudover har jeg en funktion, som henter brugernavnet.
Denne funktion er lidt "langhåret" fordi den gør brug af API-call.
Denne funktion kunne jeg godt tænke mig integreret i log-filen, så også brugernavnet bliver logget.

Er der mon nogen, som kan "skille" denne funktion ad og aflevere brugernavnet i en variabel i log-filen?
Avatar billede janvogt Praktikant
05. maj 2003 - 09:36 #1
Jeg vedlægger lige kodestykkerne:

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


Public OpenTime As Date

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ' Skriver log-data til en tekstfil.
    ' Nye logs bliver tilføjet i bundet af filen.
    ' Hvis filen ikke eksisterer vil den blive oprettet.
    Dim iFileNumber      As Integer
    Dim msg              As String
    Dim strFileName      As String
    Dim Slut As Date
    Dim Period As Date
       
    iFileNumber = FreeFile
    Slut = Now()
    Periode = Slut - OpenTime
    msg = Format(OpenTime, "dd-mm-yyyy hh:mm:ss") & " " & Format(Periode, "hh:mm:ss")
    strFileName = "C:\test.log"
    Open strFileName For Append Shared As #iFileNumber
    Print #iFileNumber, msg
    Close #iFileNumber
End Sub

Private Sub Workbook_Open()
    OpenTime = Now()
End Sub
Avatar billede janvogt Praktikant
05. maj 2003 - 09:38 #2
Avatar billede bak Seniormester
05. maj 2003 - 10:00 #3
Sub test()
    ' Skriver log-data til en tekstfil.
    ' Nye logs bliver tilføjet i bundet af filen.
    ' Hvis filen ikke eksisterer vil den blive oprettet.
    Dim iFileNumber      As Integer
    Dim msg              As String
    Dim strFileName      As String
    Dim Slut As Date
    Dim Period As Date
    Dim brugernavn As String
 
    iFileNumber = FreeFile
    Slut = Now()
    brugernavn = fOSUserName()
    Periode = Slut - opentime
    msg = Format(opentime, "dd-mm-yyyy hh:mm:ss") & " " & Format(Periode, "hh:mm:ss") & " " & brugernavn
    strFileName = "C:\test.log"
    Open strFileName For Append Shared As #iFileNumber
    Print #iFileNumber, msg
    Close #iFileNumber
End Sub
Avatar billede bak Seniormester
05. maj 2003 - 10:27 #4
En variation uden API
Sub test()
    ' Skriver log-data til en tekstfil.
    ' Nye logs bliver tilføjet i bundet af filen.
    ' Hvis filen ikke eksisterer vil den blive oprettet.
    Dim iFileNumber      As Integer
    Dim msg              As String
    Dim strFileName      As String
    Dim Slut As Date
    Dim Periode As Date
    Dim brugernavn As String
    Dim objWSH As Object
    Set objWSH = CreateObject("WScript.Network")
   
    iFileNumber = FreeFile
    Slut = Now()
    brugernavn = objWSH.UserName
    Periode = Slut - opentime
    msg = Format(opentime, "dd-mm-yyyy hh:mm:ss") & " " & Format(Periode, "hh:mm:ss") & " " & brugernavn
    strFileName = "C:\test.log"
    Open strFileName For Append Shared As #iFileNumber
    Print #iFileNumber, msg
    Close #iFileNumber
End Sub

Private Sub Workbook_Open()
    OpenTime = Now()
End Sub
Avatar billede janvogt Praktikant
05. maj 2003 - 11:08 #5
Tak Tommy, jeg sad netop og prøvede at samle de to kodestykker i én.
Troede ikke det kunne lade sig gøre uden API.
Smider du lige et svar ....
Avatar billede janvogt Praktikant
05. maj 2003 - 11:20 #6
Sad lige og legede lidt med Application.UserName
Ved du, hvor den henter det?
Troede først det måske var den "Author" som stod under "File-Properties", men det er det ikke.
Avatar billede bak Seniormester
05. maj 2003 - 11:24 #7
Den bliver hentet fra det navn der er indskrevet i Excel under Tools-Options-general - "Username" og der kan man jo skrive hvad som helst.
Hos står der standard firmanavnet og så bliver det jo svært at logge :-)
Avatar billede bak Seniormester
05. maj 2003 - 11:25 #8
Svar :-)
Avatar billede janvogt Praktikant
05. maj 2003 - 11:30 #9
Ja, det gør der også her .... "Employee of XXX" :-)
Jeg tænkte også bare på hvis man havde en model på en stand-alone PC, men hvis det udelukkende er en stand-alone er der jo ingen grund til at logge brugernavn ....

Tak for den glimrende hjælp!
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

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