Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1116to1120
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

Änderungsprotokoll! Aber NICHT für alle Blätter?

Änderungsprotokoll! Aber NICHT für alle Blätter?
Gero
Hallo liebe Profis,
kurze Frage:
Ich will Änderungen meiner Arbeitsmappe / Tabellenblätter protokollieren.
Die tue ich durch:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim rng As Range
For Each rng In Target
watchChanges Sh.Name, rng.Address(0, 0), rng.Value
Next
End Sub

Sub watchChanges(sSheet As String, sCell As String, vValue As Variant)
Dim strFile As String, strUser As String, strDateTime As String
Dim strMsg As String, strSep As String
strUser = Application.UserName
strDateTime = Format(Now, "dd.MM.yy - hh:mm:ss")
strSep = ";"
strFile = "C:\test.txt"
strMsg = strDateTime & strSep & strUser & NeuerBearbeiter & strSep & sSheet & _
strSep & sCell & strSep & CStr(vValue)
Open strFile For Append Shared As #1
Print #1, strMsg
Close #1
End Sub
Jezt meine Frage: Gibt es die Möglichkeit, Tabellenblätter von diesem Protokoll auszunehmen ?
Oder sogar nur ein Tabellenblatt mit dieser Methode zu protokollieren ?
Vielen Dank schon einmal !
LG
Gero
AW: Änderungsprotokoll! Aber NICHT für alle Blätter?
18.11.2009 11:10:43
Oberschlumpf
Hi Gero
Versuch mal (ungetestet):
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim rng As Range, lShBlatt As Sheets
For Each lShBlatt In ThisWorkbook
If lShBlatt.Name = "Name1" Or lShBlatt.Name = "Name2" Or lShBlatt.Name = "Name3" Or  _
lShBlatt.Name = "usw" Then
For Each rng In Target
watchChanges Sh.Name, rng.Address(0, 0), rng.Value
Next
End If
Next
End Sub
So wird die Protokollierung nur für die Tabellenblätter mit den Namen Name1, Name2, Name3, usw. gestartet.
Wenn nur für eine Tabelle, dann löschst du in der If-Zeile alle anderen Namen.
Hilfts?
Ciao
Thorsten
Anzeige
Makro nicht für alle Blätter
18.11.2009 11:16:40
Erich
Hi Gero,
was ist die Variable "NeuerBearbeiter"?
Probier mal die Varianten:

Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim rng As Range
If Sh.Name = "BlattA" Then
'   If Sh.Name  "BlattA" Then
'   If Sh.Name = "BlattA" Or Sh.Name = "Blatt X" Then
For Each rng In Target
watchChanges Sh.Name, rng.Address(0, 0), rng.Value
Next
End If
End Sub
' ODER:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim rng As Range
Select Case Sh.Name           ' nur die Blätter "BlattA", "Blatt X", "Blatt xyz"
Case "BlattA", "Blatt X"
Case "Blatt xyz"
Case Else                  ' sonst keine
Exit Sub
End Select
For Each rng In Target
watchChanges Sh.Name, rng.Address(0, 0), rng.Value
Next
End Sub
Sub watchChanges(sSheet As String, sCell As String, vValue As Variant)
Dim strFile As String, strUser As String, strDateTime As String
Dim strMsg As String, strSep As String
Dim NeuerBearbeiter As String '?
strUser = Application.UserName
strDateTime = Format(Now, "dd.MM.yy - hh:mm:ss")
strSep = ";"
strFile = "C:\test.txt"
strMsg = strDateTime & strSep & strUser & NeuerBearbeiter & strSep & sSheet & _
strSep & sCell & strSep & CStr(vValue)
Open strFile For Append Shared As #1
Print #1, strMsg
Close #1
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Makro nicht für alle Blätter
20.11.2009 14:10:31
Gero
Wenni ch diese Variante benutze, wie kann ich es ermöglichen das nur alle Tabellenbläter welche mit jahreszahlen anfangen berücksichtigt werden.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim rng As Range
Select Case Sh.Name
Case "2009*"
Case "2010*"
Case "2011*"
Case Else
Exit Sub
End Select
For Each rng In Target
watchChanges Sh.Name, rng.Address(0, 0), rng.Value
Next
End Sub
So hab ich gedacht würde es funktionieren... tut es aber nicht.
Einer eine Idee ?
LG
Gero
Makro nicht für alle Blätter
20.11.2009 18:46:45
Erich
Hi Gero,
vielleicht so:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim rng As Range
Select Case Left(Sh.Name, 4)
Case "2009"
Case "2010"
Case "2011"
Case Else
Exit Sub
End Select
For Each rng In Target
watchChanges Sh.Name, rng.Address(0, 0), rng.Value
Next
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Änderungsprotokoll! Aber NICHT für alle Blätter?
18.11.2009 11:17:19
IngGi
Hallo Gero,
entweder so, wie es Thorsten beschrieben hat, oder du nimmst statt des Workbook_SheetChange-Ereignisses das Worksheet_Change-Ereignis. Dafür musst du den Code in das Modul des zu protokollierenden Tabellenblattes verschieben und die Kopfzeile ändern:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
For Each rng In Target
  watchChanges Sh.Name, rng.Address(0, 0), rng.Value
Next
End Sub
Code eingefügt mit VBA in HTML 2.0.0.3size>
Gruß Ingolf
Anzeige
AW: Änderungsprotokoll! Aber NICHT für alle Blätter?
19.11.2009 11:35:26
Gero
Hi Ingolf,
ich denke deine Version ist die Praktischste. Ich habe nun aber ein Problem:
Sobald ich die WorkSheet_Change aFunktion in meine Tabelle ingefügt habe funktionieren
sämtliche anderen Aufforderungen nicht mehr, welche ich in anderen Blättern/Workbook auf dieses Blatt bezogen eingegeben hab.
Template ist das Blatt
zB.
Sheets("Template").Visible = True
Sheets("Template").Copy after:=Sheets("Start")
Sheets("Template").Visible = False
woran liegt das ?
LG
AW: Änderungsprotokoll! Aber NICHT für alle Blätter?
19.11.2009 14:37:44
IngGi
Hallo Gero,
ich denke mal das Problem ist, das du bei den Bezügen auf das Tabellenblatt die Datei nicht explizit angibst. Solange der Code im Modul der Arbeitsmappe steht (Modul "DieseArbeitsmappe") zielt der Bezug in diesem Fall auf diejenige Arbeitsmappe, in dessen Modul sich der Code befindet. Steht der Code dagegen in einem allgemeinen Modul oder im Modul eines Tabellenblattes, zielt der Bezug auf die gerade aktive Datei. Und das wird dann wohl die falsche sein, so dass er das Tabellenblatt Template nicht findet. Abhilfe kannst du schaffen, indem du die Datei im Bezug explizit angibst:
With Workbooks("Dateiname.xls").Sheets("Template")
  .Visible = True
  .Copy after:=Sheets("Start")
  .Visible = False
End With
Code eingefügt mit VBA in HTML 2.0.0.3size>
Gruß Ingolf
Anzeige
AW: Änderungsprotokoll! Aber NICHT für alle Blätter?
19.11.2009 17:26:10
Gero
hmmm ich weiss nicht.
Es funktionierte ja alles bis zu dem zeitpunkt wo ich den worksheet_change eintrag in das Microsoft Excel Objekt des tabellenblatts "Template" eingefügt habe. Seitdem funktioniert nichts mehr....
AW: Änderungsprotokoll! Aber NICHT für alle Blätter?
18.11.2009 11:17:39
Rudi
Hallo,
du hast doch die Variable Sh.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim rng As Range
select Case Sh.Name
Case "Tabelle1","Tabelle2"  'nur die beiden werden überwacht
For Each rng In Target
watchChanges Sh.Name, rng.Address(0, 0), rng.Value
Next
End Select
End Sub

Gruß
Rudi
Anzeige
jep, so is noch einfacher...owT
18.11.2009 11:22:17
Oberschlumpf

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige