Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA wenn Zellen sich ändern, dann

VBA wenn Zellen sich ändern, dann
09.02.2016 23:12:33
steffi-gott
Hallo
ich bin auf der Suche nach folgenden VBA Code
wenn in den Zellen K9:K700 eine Veränderung eintritt, es ändert sich der Text, also der Inhalt dann ...
in diesem Fall lege ich ein Backup von der Excel Tabelle an
kann mir da jemand weiterhelfen
Danke BG

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA wenn Zellen sich ändern, dann
09.02.2016 23:33:21
MatthiasG
Hallo Steffi,
ins Modul des Tabellenblattes:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim z As Range
If Not Intersect(Target, Range("K9:K700")) Is Nothing Then
MsgBox "Geändert"
'hier Code oder Prozeduraufruf
End If
End Sub

Gruß Matthias

Anzeige
AW: VBA wenn Zellen sich ändern, dann
09.02.2016 23:55:51
steffi-gott
Hallo Matthias
Danke für die schnelle Antwort,
Funktioniert sehr gut,
aber ein kleines Problem,
wenn ich eine ganze neue Zeile einfüge oder eine löschen wird dieses Makro auch ausgeführt und dadurch auch ein Backup erstellt,
lässt sich dieses abstellen oder so,
Danke BG

Anzeige
AW: VBA wenn Zellen sich ändern, dann
10.02.2016 21:06:09
MatthiasG
Hallo,
wie verändert sich denn der Bereich K9:K700, wenn Zeilen (oder auch Spalten?) eingefügt/entfernt werden?
Gruß,
Matthias

AW: VBA wenn Zellen sich ändern, dann
11.02.2016 05:29:06
steffi-gott
Hallo Mattias,
ich kann dir diese Frage nicht beantworten.
hier noch einmal DEIN Code mit MEINER Erweiterung
If Not Intersect(Target, Range("R9:R700")) Is Nothing Then
UserId = Environ("Username")
BackUpName = "E:mein speicherort" & ThisWorkbook.Name & "_" & _
Date & "_" & Format(Time, "hhmmss") & "_" & UserId & "_" & ".xlsm"
ThisWorkbook.SaveCopyAs Filename:=BackUpName
'Application.ScreenUpdating = True
End If
im Anschluß MEIN Code um neue Zeile einzufügen
Application.ScreenUpdating = False
Dim rngC As Range
Dim LCol As Long
With ActiveSheet
LCol = .Cells(5, Columns.Count).End(xlToLeft).Column
.Rows(4).Hidden = False
.Rows(4).Copy
Selection.Insert Shift:=xlDown
For Each rngC In Intersect(Selection, _
.Columns("A:" & Chr(LCol + 64)))
If Not rngC.HasFormula Then
rngC.ClearContents
End If
Next
.Rows(4).Hidden = True
End With
Application.ScreenUpdating = True
Zeile löschen ganz normal über rechte Maus und dann Kontexmenü
und auch hier werden dann immer Backups angelegt, weil eben eine neue "K-Zelle" hinzu kommt oder gelöscht wird
Danke für deine Hilfe

Anzeige
AW: VBA wenn Zellen sich ändern, dann
11.02.2016 23:10:51
MatthiasG
Hallo Steffi,
Meine Frage ist: wenn eine Zeile eingefügt oder gelöscht wird, muss dann der Bereich angepasst werden (also beim Einfügen dann "K9:K701")?
Es gibt kein Event für Zeilen/Spalten einfügen oder löschen, das zuverlässig abzufragen ist kompliziert und übersteigt meine Fähigkeiten... und lohnt sich auch nicht, oder? Offenbar werden sehr oft Backup-Dateien erzeugt, bei jeder Änderung in Spalte K. Da kommt's doch auf die paar unnötiger zusätzlicher Backups nicht an, oder? :-)
Gruß
Matthias
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Automatisches Backup in Excel mit VBA bei Zellenänderung


Schritt-für-Schritt-Anleitung

Um ein automatisches Backup deiner Excel-Datei zu erstellen, wenn sich der Inhalt einer Zelle ändert, kannst du folgenden VBA-Code verwenden. Dieser wird im Modul des entsprechenden Tabellenblatts eingefügt:

  1. Öffne deine Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Suche im Projekt-Explorer nach dem gewünschten Arbeitsblatt.
  3. Doppelklicke auf das Arbeitsblatt, um den Code-Editor zu öffnen.
  4. Füge den folgenden Code ein:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim z As Range
    If Not Intersect(Target, Range("K9:K700")) Is Nothing Then
        UserId = Environ("Username")
        BackUpName = "E:\mein speicherort\" & ThisWorkbook.Name & "_" & _
                     Date & "_" & Format(Time, "hhmmss") & "_" & UserId & "_" & ".xlsm"
        ThisWorkbook.SaveCopyAs Filename:=BackUpName
    End If
End Sub
  1. Speichere die Änderungen und schließe den VBA-Editor.

Jetzt wird ein Backup erstellt, wenn sich der Wert in einer Zelle im Bereich K9:K700 ändert.


Häufige Fehler und Lösungen

Problem: Bei Einfügen oder Löschen von Zeilen wird das Backup auch erstellt.

Lösung: Um dies zu verhindern, kannst du den Code anpassen, um nur Änderungen an den Zellen zu berücksichtigen. Füge eine Prüfung hinzu, um sicherzustellen, dass die Änderungen keine Strukturänderungen sind:

If Not Intersect(Target, Range("K9:K700")) Is Nothing And Target.Cells.Count = 1 Then
    ' Backup erstellen
End If

Alternative Methoden

Zusätzlich zur Verwendung von VBA kannst du auch Excel-Formeln verwenden, um Änderungen zu verfolgen. Eine einfache Möglichkeit ist die Verwendung der Funktion WENN, um den Zustand einer Zelle zu vergleichen, bevor eine Änderung vorgenommen wird. Allerdings ist dies nicht so robust wie die VBA-Lösung.


Praktische Beispiele

Wenn du beispielsweise den Code für den Bereich R9:R700 anpassen möchtest, kannst du den Code wie folgt ändern:

If Not Intersect(Target, Range("R9:R700")) Is Nothing Then
    ' Backup erstellen für R9:R700
End If

Das ermöglicht dir, bei Änderungen in diesem Bereich ebenfalls ein Backup durchzuführen.


Tipps für Profis

  • Überlege, ob du die Backup-Dateien in einem bestimmten Ordner speichern möchtest, um die Übersicht zu behalten.
  • Nutze Versionskontrolle, indem du Zeitstempel hinzufügst, um ältere Versionen deiner Datei wiederherzustellen.
  • Teste deinen Code in einer Kopie deiner Datei, um sicherzustellen, dass alles wie gewünscht funktioniert.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass ein Backup nur bei tatsächlichen Änderungen erstellt wird?
Füge eine Überprüfung in den Code ein, um sicherzustellen, dass nur Änderungen am Zellinhalt berücksichtigt werden.

2. Was passiert, wenn ich eine Zeile einfüge?
Der aktuelle Code erstellt in diesem Fall ebenfalls ein Backup. Du kannst das Verhalten anpassen, indem du zusätzliche Prüfungen einfügst, wie bereits beschrieben.

3. Funktioniert dieser Code in allen Excel-Versionen?
Der Code sollte in den meisten modernen Excel-Versionen funktionieren, die VBA unterstützen, einschließlich Excel 2010 und später.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige