05. maj 2003 - 09:34Der 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?
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
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
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
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.
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 :-)
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!
Synes godt om
Ny brugerNybegynder
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.