Makro-User
#1
Hallo Leute,
brauch mal eure Hilfe, finde nichts passendes....
Ich habe eine Exceltabelle, welche auf einem NAS gespeichert ist und Lese-und Schreibgeschützt ist.
Nun möchte ich, dass ich sehe, wer einen Eintrag hinzufügt.
Es gibt aktuell im pronzip 4 Spalten.
A=Nummerireung Fortaufend,
B=Eingabefeld
C=Eingabe durch
D=EingabeDatum+Zeit (wird per Marko breits automatisch aufgefüllt

da die Spalte C leider fast immer leer bleibt, hätte ich gerne, dass Excel, sobald eine Engabe in B gemacht wird, automatisch den Namen des aktuellen Nutzers (musst ja jeder beim ersten öffnen von MSO eingeben) reinschreibt.

ist sowas möglich?
wenn ja, wie??

vielen Dank
Top
#2
Hi,
ich unterstelle mal das diese Datei in einer Firma genutzt wiird, dann also Mitarbeiterrechte zu beachten sind, da hier eine denkbare unzulässige Kontrolle ausgeübt wird, falls es keine Zustimmung seitens eines Betriebs oder Personalrates gibt. Solche Logdateien sind sicher kein Problem, aber geh doch einfach einen anderen Weg:
Speichern nur wenn ein Eintrag erfolgt ist, dabei besteht dann natürlich die Gefahr, das Falscheinträge möglich sind. Könnte man aber auch abfangen, wenn es eben nur den möglichen Eintrag für diesen User gibt, den man auswählen kann. Und der wird eben mit Öffnen der Datei ermittelt und an geeigneter Stelle hinterlegt.
Mit freundlichen Grüßen  :)
Michael
Top
#3
Hallo,
bezüglich "Rechte/Datenschutz" oder wie auch immer, so ist das schon oke =)
Unsere Personen sind einfach nur "zu Faul ;)"
Die Datei soll eine art "Ticket-System" werden. Somit ist ein Name fast unumgänglich. Und wer nicht reinschreiben will, bekommt keine "Hilfe"

Drum wäre mit der Code sehr recht. Habe schon eine Funktion was mir ein Popup auf dem Feld erzeugt um die Daten zu speichern, überscihtstechnisch ist uns aber lieber alles schöne geordner nebeneinander darzustellen.

Danke für die Hilfe.

LG Tom
Top
#4
Hi Tom,

mal als Beispiel:


Code:
Sub UserName()
Range("A1") = Environ("UserName")
End Sub


Das ganze eben angepaßt auf den Ort und das Ereignis, das die Eintragung anstößt, z.B. Workbook_Open oder Close, Save oder eben das was paßt.

Zu deinem So ist das schon Recht und die sind nur zu faul: Hebelt keine Mitarbeiterrechte aus, also kann mächtig Ärger geben, wenn das nicht erkennbar wird durch den Mitarbeiter, da es ja eine Kontrolle darstellt. Wichtig zu wissen, ob du das trotzdem machst ist ja dein Risiko.
Mit freundlichen Grüßen  :)
Michael
Top
#5
(30.06.2015, 12:48)Zwergel schrieb: Das ganze eben angepaßt auf den Ort und das Ereignis, das die Eintragung anstößt, z.B. Workbook_Open oder Close, Save oder eben das was paßt.

Zu deinem So ist das schon Recht und die sind nur zu faul: Hebelt keine Mitarbeiterrechte aus, also kann mächtig Ärger geben, wenn das nicht erkennbar wird durch den Mitarbeiter, da es ja eine Kontrolle darstellt. Wichtig zu wissen, ob du das trotzdem machst ist ja dein Risiko.

Hallo. Bin irgendwie zu Doof (oder zu Newbee aufm Thema) habe folgenden Code:
Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rowUp As Integer, rowDown As Integer, colValue As Integer, colDate As Integer, rngValue As Range

    'Nummer der obersten zu überwachende Zeile
rowUp = 2
    'Nummer der untersten zu überwachende Zeile >>> grosszügig, darf vorläufig tausende von Leerzeilen enthalten
rowDown = 10000
        'Spaltennummern als A=1, B=2, C=3 usw
    'Spaltennummer der zu überwachenden Werte > hier A
colValue = 2
    'Spaltennummer mit dem Aenderungsdatum > hier B
colDate = 5

Set rngValue = Range(Cells(rowUp, colValue), Cells(rowDown, colValue))
If Not Intersect(Target, rngValue) Is Nothing Then Cells(Target.Row, colDate) = Now

End Sub




Private Sub Worksheet_Username(ByVal Target As Range)

Dim rowUp As Integer, rowDown As Integer, colValue As Integer, colDate As Integer, colUn As Integer, rngValue As Range

    'Nummer der obersten zu überwachende Zeile
rowUp = 2
    'Nummer der untersten zu überwachende Zeile >>> grosszügig, darf vorläufig tausende von Leerzeilen enthalten
rowDown = 10000
        'Spaltennummern als A=1, B=2, C=3 usw
    'Spaltennummer der zu überwachenden Werte > hier A
colValue = 2
    'Spaltennummer mit dem Aenderungsdatum > hier B
colUn = 4

Set rngValue = Range(Cells(rowUp, colValue), Cells(rowDown, colValue))
If Not Intersect(Target, rngValue) Is Nothing Then Cells(Target.Row, colUn) = Environ("UserName")

End Sub
Wie muss der Ausschauen dass in der Spalte C (also 3) der User kommt? Dankeeee
Lg Tom
Top
#6
kleiner Nachtrag zum obrigen Beitrag,
mein Code schaut nun so aus:


Code:
Option Explicit

Private Sub Worksheet_change(ByVal Target As Range)

Dim rowUp As Integer, rowDown As Integer, colValue As Integer, colDate As Integer, colUser As Integer, rngValue As Range

   'Nummer der obersten zu überwachende Zeile
rowUp = 2
   'Nummer der untersten zu überwachende Zeile >>> grosszügig, darf vorläufig tausende von Leerzeilen enthalten
rowDown = 10000
       'Spaltennummern als A=1, B=2, C=3 usw
   'Spaltennummer der zu überwachenden Werte > hier B
colValue = 2
   'Spaltennummer mit dem Aenderungsdatum > hier E
colDate = 5
   ' Spaltenummer mit Username > hier D
colUser = 4

Set rngValue = Range(Cells(rowUp, colValue), Cells(rowDown, colValue))
If Not Intersect(Target, rngValue) Is Nothing Then Cells(Target.Row, colDate) = Now & Environ("Username")
End Sub
nun kommt mir in der Spalte E Datum, Uhrzeit UND User. Den User möchte ich aber in Spalte D haben, da gibts sicher nur einen Beistrich denn ich nicht finde....
dankeeeee

Lg Tom
Top
#7
Hi Tom,

versuchs mal so


Code:
If Not Intersect(Target, rngValue) Is Nothing Then Cells(Target.Row, colDate) = Now:   Cells(Target.Row, 3) = Environ("Username")
Mit freundlichen Grüßen  :)
Michael
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste