Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1360to1364
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

Änderungsverlauf mit Hilfe eines Makros

Änderungsverlauf mit Hilfe eines Makros
21.05.2014 14:50:55
Sabine
Guten Tag,
ich beschäftige mich gerade damit eine Projektübersicht zu gestalten und komme gerade an einen Punkt wo ich ohne VBA nicht mehr weiter weiß. Da meine VBA Kenntnisse im Anfangsstadium sind, benötige ich eure Hilfe.
Ich nutze das Office 2010.
Ich versuche mein Vorhaben in Worte zu fassen:
„Aufbau Projektübersicht“ auf Tabellenblatt 1
Spalte A;
sind untereinander die jeweiligen Projekte hinterlegt (A1= Projekt 1; A2= Projekt 2; A3= Projekt 3)
Spalten B-F;
befinden sich Angaben zu den jeweiligen Projekten
.
.
.
Spalte G;
hier soll die letzte Bearbeitung/Änderung dokumentiert werden zu den jeweiligen Projekt (G1 zu Projekt1; G2 zu Projekt2, G3 zu Projekt3, usw.)
Die Tabelle soll von mehreren Nutzern bearbeitet werden. Um dies vor Manipulation zu schützen und um nachzuvollziehen wer, wann, was eingetragen/geändert hat, habe ich an dieser Stelle ein Makro laufen welches mir auf Tabellenblatt 2 einen Änderungsverlauf hinterlegt.
Nach längerem testen habe ich mich gegen das Excel-Tool „Änderungen nachverfolgen“ entschieden.
Der vom Makro erstellte Änderungsverlauf sieht wie Folgt aus
„Aufbau Änderungsverlauf“ auf Tabellenblatt 2
(Spalte A) DATUM
(Spalte B) gelöschte Werte
(Spalte C) hinzugefügt Werte
(Spalte D) Bezug der geänderten Zelle, z.B. E5 → „MIT DEM ZAHLENWERT KÖNNTE MAN DIE ZELLE ZUWEISUNG FÜR DEN ÄNDERUNGSVERMERK d. entsprechendes Projekt"
(Spalte E) Geändert von [Benutzter]
Jetzt komme ich zu meinem eigentlichen Problem. Ich benötige ein Makro, welches einen auffordert vor dem Speichern ein Änderungsvermerk zu pflegen (Tabellenblatt1 / Änderungsvermerk“ in Spalte G).
Falls es kein all zu großer Aufwand macht, würde ich dies gerne mit einer „Text Box“ realisieren.
ODER
Alternativ soll eine „Message Box“ einen Auffordern den Änderungsvermerk in die entsprechende Zelle (Blatt1 / Änderungsvermerk“ in Spalte G) einzutragen. Falls in der Zelle schon eine Änderung vermerkt wurde, soll diese überschrieben werden (ist nicht schlimm, da der Verlauf auf Tabellenblatt2 mit Hilfe des Makros“ Änderungen nachverfolgen“ kopiert wird).
Es soll je Projekt und je Änderung ein Änderungsvermerk gepflegt werden. D.h. falls auf einmal mehrere Datensätze gepflegt werden, soll/muss dies auch entsprechend dokumentiert werden.
Anbei ein (Makro-)Ablauf:
Ablauf bei Änderung/Bearbeitung eines Projekts
Öffnen der Datei → Tabelle bearbeiten → zeitglich wird Änderungen auf Tabellenblatt2 protokolliert → Datei speichern klicken → vor dem speichern soll die Aufforderung kommen „z.B. Bitte Änderung beschreiben“ → Datei speichern zulassen
Ablauf bei Änderung/ Bearbeitung mehrerer Zellen
Öffnen der Datei → Tabelle bearbeiten → zeitglich wird Änderungen auf Tabellenblatt2 protokolliert → Datei speichern klicken → vor dem speichern soll für jedes bearbeitete Projekt die Aufforderung kommen „z.B. Bitte Änderung beschreiben“ in der entsprechenden Zelle (Projekt 3 A3/G3 usw. „Zellenbezug über die AUSGABE durch MAKRO, siehe „Aufbau Änderungsverlauf“ auf Tabellenblatt 2„) → Datei speichern zulassen
Ablauf ohne Bearbeitung der Tabelle (nur lesen)
Öffnen der Datei → Tabelle einsehen → Datei schließen (ohne der Aufforderung „z.B. Bitte Änderung beschreiben“)
Ich hoffe ich konnte euch näherungsweise mein Vorhaben nahebringen und freue mich schon auf Eure Mithilfe
Liebe Grüße Biene

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
keine Lösung...
21.05.2014 15:12:26
Oberschlumpf
...nur ein Hinweis
Hi Sabine,
die automatisierte Protokollierung von "(Spalte E) Geändert von [Benutzter] " könnte zu einer Kollision mit dem geltenden Datenschutzrecht führen.
Ciao
Thorsten

AW: keine Lösung...
21.05.2014 15:27:46
Sabine
Hallo Thorsten, darauf habe ich auch meinen Vorgesetzten hingewiesen.
Dieser klärt dieses Thema mit unserem Betriebsrat und Rechtsabteilung.
Es sieht aber so aus, als ob ein Schrieb mit dem Protokollierungshinweis und die Zustimmung der jeweiligen Mitarbeiter ausreichen dürfte (wie gesagt, ist noch in Klärung).
Trotzdem Danke für den Hinweis
Gruß Sabine

Anzeige
mit Musterdatei ...
21.05.2014 16:03:15
Klaus
... wäre das sicher einfacher lösbar, Sabine. Schön dass du dich für das Makro "Änderungen nachverfolgen" entschieden hast :-) Wenn du das Makro (oder die Quelle) auch noch postest oder in die Musterdatei einfügst, wird es nochmal einfacher.
Ich stelle dir den Thread hiermit wieder auf offen. Du hast ihn mit deiner Antwort an Thorsten versehentlich auf "geschlossen" gesetzt.
Grüße,
Klaus M.vdT.

AW: Änderungsverlauf mit Hilfe eines Makros
21.05.2014 17:15:27
Sabine
Das ist das besagte Makro welches mir die Änderungen auf einem separaten Tabellenblatt kopiert.
Wie schon oben erwähnt sollte die Aufforderung vor dem Speichern kommen, dass man die Änderung beschreiben soll.
Ganz wichtig ist, falls man zwischen öffnen und speichern mehrere Daten in unterschiedlichen Projekten einträgt, soll auch für jedes Projekt die Anforderung erscheinen.
Vielen Dank schon mal im Voraus
Eure Biene
Option Explicit
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Dim Username As String
Private Sub Workbook_Open()
Dim Buffer As String * 100, BuffLen As Long
BuffLen = 100
GetUserName Buffer, BuffLen
Username = Left(Buffer, BuffLen)
Username = Left(Username, InStr(Username, vbNullChar) - 1)
If Trim$(Username) = "" Then Username = Application.Username
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Areas.Count > 1 Then
MsgBox "Auswahl nicht zulässig.", 48, "Hinweis"
Application.EnableEvents = False
Range(Target.Address).Cells(1, 1).Select
Application.EnableEvents = True
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim intSpalte As Integer, lngZeile As Long, strBuchstabe1 As String, strBuchstabe2 As  _
String
Dim varArray_neu As Variant, varArray_alt As Variant, intArrayspalte As Integer, strAdresse  _
As String
Dim lngArrayzeile As Long, lngLetzteZeile As Long, varAlt As Variant, varNeu As Variant
If Target.Count > 1 Then varArray_neu = Range(Target.Address) Else varNeu = Target
strAdresse = Selection.Address
With Application
.ScreenUpdating = False
.EnableEvents = False
.Undo
End With
If Target.Count > 1 Then
varArray_alt = Range(Target.Address)
Application.Undo
With Worksheets("Protokoll")
For intSpalte = Target.Column To Target.Column + Target.Columns.Count - 1
intArrayspalte = intArrayspalte + 1
lngArrayzeile = 0
For lngZeile = Target.Row To Target.Row + Target.Rows.Count - 1
lngArrayzeile = lngArrayzeile + 1
If varArray_alt(lngArrayzeile, intArrayspalte)  varArray_neu(lngArrayzeile,  _
intArrayspalte) Then
lngLetzteZeile = .Cells(65536, 1).End(xlUp).Row + 1
If lngLetzteZeile = 65536 Then
lngLetzteZeile = 2
.Range("A2:E65536").ClearContents
End If
.Cells(lngLetzteZeile, 1) = Now
.Cells(lngLetzteZeile, 2) = varArray_alt(lngArrayzeile, intArrayspalte)
.Cells(lngLetzteZeile, 3) = varArray_neu(lngArrayzeile, intArrayspalte)
.Cells(lngLetzteZeile, 4) = Cells(lngZeile, intSpalte).Address(0, 0)
.Cells(lngLetzteZeile, 5) = ActiveSheet.Name
.Cells(lngLetzteZeile, 6) = VBA.Environ("Username")
End If
Next
Next
End With
Else
varAlt = Range(Target.Address)
Application.Undo
With Worksheets("Protokoll")
lngLetzteZeile = .Cells(65536, 1).End(xlUp).Row + 1
If lngLetzteZeile = 65536 Then
lngLetzteZeile = 2
.Range("A2:E65536").ClearContents
End If
.Cells(lngLetzteZeile, 1) = Now
.Cells(lngLetzteZeile, 2) = varAlt
.Cells(lngLetzteZeile, 3) = varNeu
.Cells(lngLetzteZeile, 4) = Target.Address(False, False)
.Cells(lngLetzteZeile, 5) = ActiveSheet.Name
.Cells(lngLetzteZeile, 6) = VBA.Environ("Username")
End With
End If
Range(strAdresse).Select
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub

Anzeige
AW: Änderungsverlauf mit Hilfe eines Makros
21.05.2014 18:05:17
Oberschlumpf
...und in welche Datei soll dieses Makro?
Sabine, mach es dir nicht zu einfach + uns nicht zu schwer.
Was du dir wünschst, grenzt eh an Auftragsprogrammierung, da ja bisher von dir nur die Idee aber keinerlei Vorarbeit kommt.
Zumindest ich hab keine Lust, deine Datei nachzubauen, weil ich in allen Details gar nicht weiß, wie sie aufgebaut ist.
Und wieso auch Datei nachbauen? Ist gar nicht erforderlich - du hast sie doch schon - musst sie uns nur zur Verfügung stellen.
Deinem vllt möglichen Hinweis: "Kann die Datei nicht uploaden, weil nicht alle Daten allen gezeigt werden dürfen"
...kann ich entgegnen mit: Dann lösch alle Realdaten + ersetz sie durch Bsp-Daten.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige