Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1804to1808
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

Frage Changeereigniss

Frage Changeereigniss
12.01.2021 19:17:29
Ellen
Hallo, vielleicht kann mir jemand helfen. Ich habe eine meiner Dateien um eine Änderungsfunktion erweitert.
Diese schreibt in eine von mir definierte Zelle jeweils Datum und Name.
Aussehen tut das ganze so:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Range("B4:B100"), Target) Is Nothing Then
If Target.Cells.Count > 1 Then Application.EnableEvents = True: Exit Sub
Target.Offset(0, 2).NumberFormat = "dd.mm.yyyy hh:mm:ss"
Target.Offset(0, 6) = Now
Target.Offset(0, 7) = Environ("UserName")
End If
Application.EnableEvents = True
End Sub

Das läuft auch soweit.
Allerdings möchte ich das noch erweitern um ein 2 Ereignis, das quasi dasselbe nochmal macht nur eben in anderen Zellen.
  • Ich möchte dann z.B. Spalte K4:I100 überwachen und in Spalte L und M Datum und Uhrzeit eintragen lassen.
    Ich bekomme es aber nicht hin da ich scheinbar nur 1 Changeereigniss auf dem Tabellenblatt realisieren kann.

  • Desweiteren möchte ich gern, das die Zellen Datum+Uhrzeit sich wieder löschen sofern in der Ursprungszelle der Eintrag wieder gelöscht wird. So bleibt er nämlich stehen

  • Und die Frage, wie ich es am besten anstelle, dass das auf mehreren -nicht allen- Tabellenblättern der Mappe funktioniert OHNE das ich den Code in das jeweilige Blatt schreibe. Also evt ins Workbook mit einzelnen Sheets?!?

  • Als letzte Frage: Ich nutze mit Username den Anmeldenamen. Kann ich auch den Namen, der in Office hinterlegt wird nutzen?

  • Wäre super, wenn mir da jemand helfen und den Code dahingehend erweitern könnte.
    Dankeschön

    6
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Frage Changeereigniss
    12.01.2021 19:34:04
    Oberschlumpf
    Hi Ellen(Bogen),
    zeig doch bitte mal per Upload eine Bsp-Datei mit genügend Bsp-Daten und genügend Tabellenblättern und natürlich deinem schon vorhandenem VBA-Code.
    Was genau meinst du mit: "Kann ich auch den Namen, der in Office hinterlegt wird nutzen?" ?
    Meinst du damit die Office-Online-Variante (Office365), bei der eine Anmeldung mit MS-Konto erforderlich ist?
    Wenn JA, kann ich dir diese Frage leider nicht beantworten, da ich Office nur offline nutze.
    Aber mit der von dir gezeigten Bsp-Datei könnt ich dir deine anderen Fragen beantworten.
    Ciao
    Thorsten
    AW: Frage Changeereigniss
    12.01.2021 19:36:39
    Hajo_Zi
    Target.Offset(0, 7) = Environ("UserName")
    elseif Not Intersect(Range("K4:I100"), Target) Is Nothing Then
    ' Dein Code

    Anzeige
    AW: Frage Changeereigniss
    12.01.2021 19:51:03
    Daniel
    Hi
    verwende kein EXTIT SUB, sondern eine saubere vollständige IF-Struktur.
    diese lässt sich dann problemlos erweitern und ergänzen.
    desweitern sollte man die Events immer da Ein- und Ausschalten wo es notwendig ist und nicht irgendwo im Code.
    das was du da hast, ist Quick'n'Dirty, besser so:
    hier kannst du weitere Abfragen für andere Zellbereiche einfach am Ende ergänzen;
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Range("B4:B100"), Target) Is Nothing Then
    If Target.Cells.Count = 1 Then
    Application.EnableEvents = False
    Target.Offset(0, 2).NumberFormat = "dd.mm.yyyy hh:mm:ss"
    Target.Offset(0, 6) = Now
    Target.Offset(0, 7) = Environ("UserName")
    Application.EnableEvents = True
    End If
    End If
    End Sub
    
    fürs löschen brauchst du eine weitere Abfrage:
    if Target.Formula = "" then
    Target.offset(…).ClearContents
    Else
    Traget.offst(…).Value = Now
    end if
    

    wenn du das für mehrere Blätter brauchst, muss der Code ins entsprechende Eventmakro im Modul "DieseArbeitsmappe" ins Makro
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    End Sub
    

    dann gilt der Code für alle Blätter der Datei, ohne dass du ihn wiederholen musst.
    Um bestimmte Blätter wieder auszuschließen, stellt dir Das Makro die Variable SH bereit mit dem aktuellen Worksheet, die kannst du auswerten und festlegen, für welche Blätter das Makro ausgeführt werden soll.
    Auch hier gilt: kein Exit Sub, sondern vollständige Strukturen, diese lassen sich einfacher erweitern.
    Select Case SH.Name
    Case "Tabelle1", "Tabelle3", "Tabelle5"
    hier der Code der auf Tabelle1, -3 und -5 ausgeführt werden soll
    Case "Tabelle2"
    hier der Code der auf Tabelle2 ausgeführt werden soll
    Case Else
    hier der Code der auf allen anderen Tabellenblättern ausgeführt werden soll
    End Select
    

    Neben ENVIRON("UserName") gibt's noch APPLICATION.UserName, das ist der Name den du suchst.
    Gruß Daniel
    Anzeige
    AW: Frage Changeereigniss
    12.01.2021 19:54:43
    Werner
    Hallo,
    also ehrlich gesagt habe ich keine Ahnung, wo deine "Change-Daten" hin sollen. Bei Eintrag in Spalte I,J,K ist das klar - dann in L und M.
    Aber was ist bei einem Eintrag in Spalte B?
    Du formatierst dann Spalte D (Offset(, 2) schreibst dann das Datum aber in Spalte H (Offset(, 6) und Datum in Spalte I (Offset(, 7).
    Spalte I willst du doch aber auch auf Eingabe überwachen?
    Ich hab dir das jetzt mal nicht mit Target und offset geschrieben, sondern mit Cells(Target.Row und der entsprechenden Spalte.
    Code ins Codemodul von "DieseArbeitsmappe".
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Select Case Sh.Name
    Case "Tabelle1", "Tabelle3", "Tabelle5"
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Range("B4:B100,I4:K100"), Target) Is Nothing Then
    Select Case Target.Column
    Case 2
    Cells(Target.Row, "C") = IIf(Target  "", Now, "")
    Cells(Target.Row, "D") = IIf(Target  "", Application.UserName, "")
    Case 9, 10, 11
    Cells(Target.Row, "L") = IIf(Target  "", Now, "")
    Cells(Target.Row, "M") = IIf(Target  "", Application.UserName, "")
    Case Else
    End Select
    End If
    Case Else
    End Select
    End Sub
    
    Gruß Werner
    Anzeige
    AW: Frage Changeereigniss
    12.01.2021 21:10:44
    Ellen
    Hallo an alle und WOW !
    Soviel Hilfe in so kurzer Zeit. Danke.
    Schlussendlich habt ihr mir alle sehr geholfen, der Code von Werner ist genau das, was ich suchte.
    Und natürlich Werner; du hast vollkommen recht: In meinem Ursprungspost musste es heißen K4:K100. Mit I war das natürlich Blödsinn. Habe mich da vertippt.
    Grad alles ausprobiert - läuft wunderbar
    Gerne u. Danke für die Rückmeldung. o.w.T.
    12.01.2021 22:44:02
    Werner

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige