Anzeige
Archiv - Navigation
1252to1256
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

User-Statistik für verschiedene User

User-Statistik für verschiedene User
Jenny
Hi Ihr,
ich habe (mit Eurer Hilfe) folgenden Code erstellt, der eine Statistik der eingegebenen Suchbegriffe auf Blatt "Policy Search" erstellt, das Basisfeld ist dabei D2 auf diesem Blatt, dass so innerhalb eines anderen Makros definiert ist (...Statistic (Range("D2").Value)...).
Der Code funktioniert super, wenn nur eine Person die Datei nutzt.
Mein Problem ist, dass ich diese Datei auf einem Shared Drive speichern muss, wovon aus sie von verschiedenen Usern (auch zur gleichen Zeit) genutzt werden soll.
Für die enthaltenen Funktionen ist das kein Problem, da die Tabelle nur Suchmöglichkeiten für eine Datenbank enthält (die User müssen dort keine Werte eingeben).
Gibt es hier eine Möglichkeit, die durch den Code erstellte Statistik nach Usern aufzuschlüsseln, um zu verhindern, dass sich ihre Statistik gegenseitig überschreibt - und die Ergebnisse nach Usern getrennt (in der gleichen Datei) abzuspeichern ?
Sub Statistic(Begriff As String)
' Counts entered search criteria and updates search statistics on Statistics tab
Dim Eintrag As Long
Dim FB As Range
Dim firstAddress As String
Eintrag = Worksheets("Statistics").Cells(Rows.Count, 1).End(xlUp).Row
With Worksheets("Statistics").Range("A1:A" & CStr(Eintrag))
Set FB = .Find(Begriff, LookIn:=xlValues)
If Not FB Is Nothing Then
FB.Offset(0, 1).Value = FB.Offset(0, 1).Value + 1
Else
Worksheets("Statistics").Cells(Eintrag + 1, 1).Value = Begriff
Worksheets("Statistics").Cells(Eintrag + 1, 2).Value = 1
End If
End With
End Sub
Bin Euch für jeden Tipp dankbar ! :-)
LG und vielen Dank im Voraus,
Jenny
AW: User-Statistik für verschiedene User
19.03.2012 14:58:36
Frank
Hallo Jenny,
mit folgendem Code kannst Du Windows-Benutzernamen auslesen.
In ein Modul muss folgender Code geschrieben werden:

Declare Function DllRegisterServer Lib "mscal.ocx" () As Long
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long
Public strUserName As String

Mit folgendem Code kannst Du dann den Usernamen auslesen und in einer MsgBox anzeigen lassen. Du musst den Code halt entsprechend abändern, um den Usernamen in die Tabelle eintragen zu lassen:
Sub Register()
DllRegisterServer
End Sub
Sub UserName()
Dim strUserName As String
strUserName = String(100, Chr$(0))
retval = GetUserName(strUserName, 100)
strUserName = Left$(strUserName, InStr(strUserName, Chr$(0)) - 1)
MsgBox strUserName
End Sub

Gruß
Frank
Anzeige
AW: User-Statistik für verschiedene User
19.03.2012 15:04:54
Jenny
Hallo Frank,
vielen Dank für Deine Antwort ! :-)
Es tut mir leid, ich muss bei VBA noch öfter nachfragen, da ich damit noch ganz am Anfang stehe. :-(
Hilft mir Dein Code denn, wenn die Tabelle gleichzeitig von verschiedenen Usern genutzt wird ?
Heißt das, ich muss Deinen Code dann in meinen mit einbinden ?
Kannst Du mir hier evtl. ein bisschen den Hintergrund erklären, damit ich verstehe, was genau passiert ?
LG und nochmals vielen Dank im Voraus,
Jenny
AW: User-Statistik für verschiedene User
19.03.2012 15:15:10
Frank
Hallo Jenny,
wenn Du wirklich gleichzeitig mit mehreren Usern auf das Excel-File zugreifen willst, musst Du sie freigeben. Das allerdings führt dazu, dass sich die Arbeitsmappe aufbläht und unendlich langsam wird, daher würde ich Dir davon abraten.
Mir fiele keine Grund ein, warum der Code bei einer freigegebenen Arbeitsmappe nicht funktionieren sollte, habe das aber nicht getestet.
Der untere Teil des Codes von mir bewirkt, dass in der Variable 'strUserName' der Benutzername des aktuellen Benutzers steht. Du musst ihn also in dein Makro einbinden und kannst dann mit der Variablen weiterarbeiten und den Wert evtl. in eine Zelle schreiben oder so.
Den oberen Teil musst Du in ein Modul einfügen (Projekt markieren - Einfügen - Modul)
Gruß
Frank
Anzeige
AW: User-Statistik für verschiedene User
19.03.2012 15:20:59
Jenny
Hallo Frank,
jetzt habe ich es verstanden - danke ! :-)
Leider muss die Datei gleichzeitig von vielen Usern genutzt werden.
Wäre es eine Möglichkeit, dass statt dem Abspeichern in der Tabelle jeweils eine Art Archivdatei außerhalb angelegt wird (z.B. als einfaches Text- oder Excel-File) ? Könnte man damit evtl. verhindern, dass die Datei langsamer wird ?
Wichtig: Keiner der User muss etwas in der Tabelle eintragen, sie sollen alle nur Leserecht sowie Zugriff auf verschiedene Makros haben, mit denen man eine Datenbank durchsuchen kann.
LG,
Jenny
AW: User-Statistik für verschiedene User
19.03.2012 15:27:57
Frank
Hallo Jenny,
langsamer wird die Datei durch die Freigabe an sich. Wenn Du sie nicht freigibst, dann hat der erste User alle Rechte und jeder weitere würde sie schreibgeschützt öffnen. In diesem Fall bliebe Dir gar nichts anderes übrig, als eine externe Archivdate anzulegen. Bei der hast Du dann allerdings das gleiche Problem - sie kann immer nur von einem User benutzt werden.
Eine externe txt-Datei als Log-File zu benutzen geht bestimmt, da ich das aber noch nicht getan habe, kann ich Dir da nicht weiterhelfen.
Ist es wirklich zwingend notwendig, dass mehrere User gleichzeitig Zugriff haben müssen?
Gruß
Frank
Anzeige
AW: User-Statistik für verschiedene User
19.03.2012 16:07:11
Jenny
Hallo Frank,
vielen Dank nochmal ! :-)
Ja, die Datei muss zwingend von mehreren Usern gleichzeitig genutzt werden können.
Die externe Log-Datei wäre vielleicht eine gute Alternative, da diese Files dann nach User getrennt abgelegt werden könnten.
Ist es denn zur Nutzung von Makros überhaupt nötig, eine Tabelle freizugeben ?
Würden die nicht auch funktionieren, wenn man sie schreibgeschützt öffnet ?
LG,
Jenny
AW: User-Statistik für verschiedene User
19.03.2012 16:55:36
Hajo_Zi
Hallo Jenny,
in freigegebenen Dateien gehen die meisten Makros nicht, schaue auch in die Hilfe.

Anzeige
AW: User-Statistik für verschiedene User
19.03.2012 17:08:03
Sheldon
Hallo,
Makros funktionieren - nur einige Funktionen von Excel nicht. Zum Beispiel das Sortieren.
Gruß
Sheldon
AW: User-Statistik für verschiedene User
19.03.2012 20:05:44
Jenny
Hallo Sheldon,
vielen Dank für Deine Antwort ! :-)
Kannst Du mir sagen, ob ich eine Tabelle überhaupt freigeben muss, wenn mehrere User sie gleichzeitig nutzen sollen oder ob die Makros auch funktionieren, wenn man die Datei schreibgeschützt öffnet ?
Hinweis: Meine Tabelle soll ausschließlich zum Lesen geöffnet werden sowie zur Ausführung der Makros, die jedoch nur Suchfunktionen für eine Datenbank enthalten.
LG und vielen Dank im Voraus,
Jenny
Anzeige
AW: User-Statistik für verschiedene User
19.03.2012 19:55:07
Nepumuk
Hallo,
wenn die User sowieso keine Änderungen vornehmen sollen/dürfen, dann wäre es besser die Datei nur schreibgeschützt zu öffnen. Am einfachsten - Rechtsklick auf die Datei im Explorer - Eigenschaften - ganz unten bei "Schreibgeschützt" ein Häkchen setzen.
Dein Logfile kannst du so schreiben:
Option Explicit

Private Type DATASET
    strUser As String * 50
    strSearchTerm As String * 50
    lngCount As Long
End Type

Private Sub Statistic(ByVal pvstrSearchTerm As String)
    Dim intFileNumber As Integer
    Dim lngDatasetCounter As Long
    Dim strUser As String
    Dim udtDataset As DATASET
    strUser = Environ$("USERNAME")
    Reset
    intFileNumber = FreeFile
    Open ThisWorkbook.Path & "\Statistic.log" For Random _
        Access Read Write As #intFileNumber Len = Len(udtDataset)
    Do
        lngDatasetCounter = lngDatasetCounter + 1
        Get #intFileNumber, lngDatasetCounter, udtDataset
        If EOF(intFileNumber) Then
            udtDataset.strUser = strUser
            udtDataset.strSearchTerm = pvstrSearchTerm
            udtDataset.lngCount = 1
            Exit Do
        End If
        If StrComp(Trim$(udtDataset.strSearchTerm), _
            pvstrSearchTerm, vbTextCompare) = 0 Then
            If StrComp(Trim$(udtDataset.strUser), _
                strUser, vbTextCompare) = 0 Then
                udtDataset.lngCount = udtDataset.lngCount + 1
                Exit Do
            End If
        End If
    Loop
    Put #intFileNumber, lngDatasetCounter, udtDataset
    Close #intFileNumber
End Sub

Public Sub Analysis()
    Dim intFileNumber As Integer
    Dim lngRow As Long
    Dim udtDataset As DATASET
    lngRow = 1
    Reset
    intFileNumber = FreeFile
    With Worksheets("Statistics")
        With .Range("A1:C1")
            .EntireColumn.ClearContents
            .Value2 = Array("Username", "Searchterm", "Count")
            .Font.Bold = True
        End With
        Open ThisWorkbook.Path & "\Statistic.log" For Random Access _
            Read As #intFileNumber Len = Len(udtDataset)
        Do
            Get #intFileNumber, , udtDataset
            If EOF(intFileNumber) Then Exit Do
            lngRow = lngRow + 1
            .Cells(lngRow, 1).Resize(1, 3).Value2 = Array(Trim$(udtDataset.strUser), _
                Trim$(udtDataset.strSearchTerm), udtDataset.lngCount)
        Loop
        Close #intFileNumber
        .Range("A1:C1").EntireColumn.AutoFit
    End With
End Sub

Die Prozedur Analysis diehnt dazu das Logfile in die Tabelle Statistik einzulesen. Irgendwie kommt mir das wie ein Déjà-vu vor. Ein fast identische Makro habe ich erst neulich geschrieben.
Gruß
Nepumuk
Anzeige
AW: User-Statistik für verschiedene User
19.03.2012 20:12:35
Jenny
Hallo Nepumuk,
vielen Dank für Deine Antwort und die viele Mühe, die Du Dir gemacht hast !! :-)
Ich werde es sehr gerne damit ausprobieren und melde mich dann noch einmal zurück.
Bis dahin LG und einen schönen Abend Dir,
Jenny

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige