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

Bei Änderungen Frabenwechsel....

Bei Änderungen Frabenwechsel....
09.02.2009 23:22:00
Gordon
Moin,
ich habe hier ein Blatt mit verschiedensten Daten. Ich möchte nun, dass wenn ich irgendeine Zelle ändere, dass diese Zelle dann gelb makiert wird. Wenn Urspungswert der Zelle wieder hergestekkt wird, soll die Zelle wieder ihre Ursprungsfarbe (weiß) erhalten.
Hat da jemand 'ne Idee, wie man das umsetzen könnte?
Gruß
Gordon

25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Idee: Ereignisprozedur! Gruß owT
09.02.2009 23:49:26
Luc:-?
:-?
AW: Idee: Ereignisprozedur! Gruß owT
09.02.2009 23:50:00
Gordon
Sagt mir nun so gerade nichts....
siehe VBE-Hilfe u.Archiv! Gruß owT
09.02.2009 23:57:00
Luc:-?
:-?
AW: siehe VBE-Hilfe u.Archiv! Gruß owT
10.02.2009 00:09:17
Gordon
Finde der Hilfe nichts.....und hier im Archiv auch nichts....was wohl eher daran liegt, dass ich zu doof bin etwas zu dem Thema zu finden. Wenn man keine Ahung zum Thema "Ereignisprozedur" hat, dann fällt es einem auch recht schwer etwas zu suchen/finden, weil man ja nicht weiß, wie dieses im Grunde geht. :(
VB-Editor-Hilfe: Im VBE, den wirst du ja...
10.02.2009 00:53:00
Luc:-?
...auch mit bescheidenen VBA-Kenntnissen kennen, Gordon,
auf das Fragezeichen klicken und dann Ereignis eingeben. Da wdn dir dann alle möglichen Ereignisse angezeigt, zu denen z.T. bereits Prozedurrahmen - auch zum TabBlatt - vorbereitet sind. Lies die Beschreibungen und such dir die Passende heraus. Falls es Probleme geben sollte, kannst du dich noch mal hier melden. Ansonsten sind auch noch jede Menge fertige Ereignisprozeduren im Herber-Archiv enthalten (weißes Feld links oben mit Default-Eintrag Google Custom Search neben grauem Klick-Feld Archiv). Aber bitte Vorsicht, damit du keine Endlosschleifen produzierst.
Etwas eigenes Bemühen kann doch von jedem erwartet wdn - oder...?
Gruß Luc :-?
Besser informiert sein!
Anzeige
AW: VB-Editor-Hilfe: Im VBE, den wirst du ja...
10.02.2009 01:13:48
Gordon
Sicherlich kenne ich die VB-Editor-Hilfe, Luc:-?!
Aber leider wußte ich mit meinen bescheidenen Kenntnissen nicht das es keinen Unterschied zwischen Ereignis und Ereignisprozedur gibt. Denn sonst hätte ich sicherlich nicht gesagt, dass ich nichts in der Hilfe finde.
Ich weiß ja nicht ob du das mit Absicht machst, aber du kommst hier leicht genervt rüber. Wenn dem so ist, solltest du dann in Zukunft nicht antworten. Da nehme ich lieber keine Antwort entgegen und suche mir ein anderes Forum, wo ich mir Hilfe bekommen könnte. Wenn ich mich mit dem "genervt sein" (oder ähnlichem negativen Unterton) irre, will ich nichts gesagt haben. Aber förderllich ist es nicht, für einen der kaum eine Ahnung hat, wie er daran gehen soll. So, das zum einen.
Zum anderen danke ich dir dennoch für deine letzteren Ratschläge....
Beste Grüße
Gordon
Anzeige
AW: VB-Editor-Hilfe: Im VBE, den wirst du ja...
10.02.2009 06:23:00
hary
Moin Gordon
Warum nimmst Du nicht die bedingte Formatierung? ist doch am einfachsten. In VBA wirds schwieriger da Du VBA ja sagen musst was alter Wert, was neuer Wert.
Hier mal eine Mappe in der leere Zellen ohne Farbe und Zellen mit Werte gelb dargestellt werden. Ist hier auf einen Bereich beschraenkt. A4bis F33
https://www.herber.de/bbs/user/59286.xls
Gruss Hary
AW: VB-Editor-Hilfe: Im VBE, den wirst du ja...
10.02.2009 07:56:07
Gordon
Danke dir,
war ja auch auch mein erster Gedanke, aber das ja nicht ganz das was ich will. Auf dem Blatt sind ja schon Werte. Wenn genau diese Werte verändert werden, soll es gelb makiert werden. Schreibt man in die Zelle den Wert wieder zurück, den so als erstes hatte, soll es wieder weiß werden.
Verstehst was ich meine?
Gruß
Gordon
Anzeige
AW: bed Format
10.02.2009 08:06:37
hary
Hallo Gordon
Ich verstehe schon was Du willst. Ich sehe aber das Prob. VBA muss sich aus jeder Zelle den vorhandenen Wert merken Bei 1 bis 10 OK aber bei 200, wat dann?
Deshalb bedingtes Format da kannst Du sagen zb. wenn wert =1(also alt)dann weiss/wenn wert 1 dann gelb.
Sonst wuesste ich auch nix
Gruss Hary
Frage offen
Eigentlich unlösbar,... und trotzdem...
10.02.2009 10:40:00
Ramses
Hallo
hier mal eine Variante.
Ist zwar komplex, sollte aber tun.
Die Protokollierung wird nur begonnen, wenn in der geänderten Zelle bereits ein Wert steht.
Ist die Zelle leer und es erfolgt ein Eintrag, dann erfolgt keine Protokollierung.
Wird das Makro einmal unterbrochen, dann funktioniert nix mehr .-)
Das gehört in ein Modul deiner Mappe
Option Explicit

Public oldRngAdd As Range
Public oldContent As Variant
Public wksProtBol As Boolean

Das gehört in das Klassenmodul der Tabelle wo die Protokollierung funktionieren soll
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim wks As Worksheet
    Dim protSheet As Worksheet, wksProtName As String
    Dim chkOldRng As Range, lastRow As Long
    'Prüfen ob Protocolldatei vorhanden
    wksProtName = "chkProtocol"
    If wksProtBol <> True Then
        For Each wks In ThisWorkbook.Worksheets
            If wks.Name = wksProtName Then
                wksProtBol = True
                Exit For
            End If
        Next
        If wksProtBol = False Then
            Application.ScreenUpdating = False
            Worksheets.Add
            With ActiveSheet
                .Name = wksProtName
                .Cells(1, 1) = "Adresse"
                .Cells(1, 2) = "Alter Wert"
                .Cells(1, 3) = "Alter Farbwert"
                .Cells(1, 4) = "Geändert durch User"
                .Visible = xlVeryHidden
            End With
            Application.ScreenUpdating = True
        End If
    End If
    Set protSheet = Worksheets(wksProtName)
    If Not oldRngAdd Is Nothing Then
        'Es ist ein Protkolleintrag vorhanden
        On Error Resume Next
        With protSheet
            'Suchen ob bereits ein Eintrag im Protokoll vorhanden ist
            Debug.Print Target.Address
            Set chkOldRng = .Columns(1).Find(Target.Address)
            Debug.Print chkOldRng.Offset(0, 1)
            Debug.Print chkOldRng.Row
            If Not chkOldRng Is Nothing Then
                'Keine Änderung
                If Target.Value = oldContent Then Exit Sub
                If chkOldRng.Offset(0, 1) = Target.Value Then
                    'Eintrag vorhanden und gleicher Wert wie in Target
                    'Farbe zurücksetzen und Protokolleintrag löschen
                    Target.Interior.ColorIndex = .Cells(chkOldRng.Row, 3)
                    protSheet.Rows(chkOldRng.Row).EntireRow.Delete
                Else
                    'Wert wurde geändert
                    'zelle markieren mit Roter Farbe
                    Target.Interior.ColorIndex = 3
                End If
            Else
                With protSheet
                    lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                    .Cells(lastRow, 1) = Target.Address
                    .Cells(lastRow, 2) = Target.Value
                    .Cells(lastRow, 3) = Target.Interior.ColorIndex
                    .Cells(lastRow, 4) = Environ("Username")
                End With
                Target.Interior.ColorIndex = 3
            End If
        End With
    Else
        'Es muss ein neuer Protokolleintrag erstellt werden
        'aber nur wenn ein wert in der Zelle steht
        If IsEmpty(Target) Then Exit Sub
        With protSheet
            lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
            .Cells(lastRow, 1) = Target.Address
            .Cells(lastRow, 2) = Target.Value
            .Cells(lastRow, 3) = Target.Interior.ColorIndex
            .Cells(lastRow, 4) = Environ("Username")
        End With
    End If
    
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    'bestehende Werte speichern
    If Not IsEmpty(Target) Then
        'Variable enthält Werte
        'Im Change Ereignis wird gespeichert/protokolliert
        Set oldRngAdd = Target
        oldContent = Target.Value
    Else
        'Variable = Nothing
        'Im change Ereignis wird nichts gespeichert/protokolliert
        Set oldRngAdd = Nothing
    End If
End Sub

Viel Sapss beim probieren.
Am besten in einer leeren Mappe mit einer leeren Tabelle beginnen
Gruss Rainer
Anzeige
AW: Bei Änderungen Frabenwechsel....
10.02.2009 10:25:19
RS
Hi Gordon,
1. Erstelle eine Kopie deines 'Original'-Arbeitsblattes in der gleichen Mappe:
Rechtsklick Tabellenreiter , Verschieben/Kopieren, Kopie erstellen.
2. Füge in der 'Original'-Tabelle diesen Code ein:
Rechtsklick Tabellenreiter, Code einfügen

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value = Worksheets(ActiveSheet.Name & " (2)") _
.Cells(Target.Row, Target.Column).Value Then
Target.Interior.ColorIndex = -4142
Else
Target.Interior.ColorIndex = 6
End If
End Sub


Grüsse RS

Anzeige
Blatt verstecken.... vergessen
10.02.2009 10:27:49
RS
Hi Gordon,
Zur Sicherheit, dass die Kopie nicht verändert wird.
Nach dem Kopieren des Arbeitsblattes: Menu - Format Blatt - Ausblenden
Grüsse RS
AW: Blatt verstecken.... vergessen
10.02.2009 18:16:00
Gordon
Danke,
das klappt wunderbar. So ähnlich hatte ich es mir auch vorgestellt, also mit einer Kopie zu arbeiten, aber leider fehlte mir das KnowHow was den Code angeht.
Danke vielmals....
Gruß
Gordon
Verbesserung Farbwechsel
10.02.2009 10:46:31
RS
Damit es auch bei Änderungen ganzer Bereiche funktioniert:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rC As Range
For Each rC In Target
If rC.Value = Worksheets(ActiveSheet.Name & " (2)") _
.Cells(rC.Row, rC.Column).Value Then
rC.Interior.ColorIndex = -4142
Else
rC.Interior.ColorIndex = 6
End If
Next rC
End Sub


Grüsse RS

Anzeige
AW: Bei Änderungen Frabenwechsel....
11.02.2009 23:20:00
Gordon
Moin,
hab jetzt doch nochmal eine Frage bzw. zwei Probleme:
Problem A:
Es funktioniert wunderbar, nur wenn ich etwas nicht eingebe, sondern irgendeine Formel in andere Zellen ziehe, gibt es eine Fehlermeldung. Kann man da etwas noch machen?
Problem B:
Durch das Makro, was ja ständig läuft, kann man anscheinend seine Eingaben nicht mehr rückgängig machen. Ich denke mal, dass das nun mal so ist und man nichts ändern kann, aber ich frage lieber mal vorher nach.
Gruß
Gordo
AW: Bei Änderungen Frabenwechsel....
12.02.2009 08:35:00
Renee
Hi Gordon,
Wie Ramses schon schrieb: Eigentliche unmöglich...
Probier mal seine Version.
Zu Problem A: Versuch meinen verbesserten Code zu benutzen.
Das Makro testet keine Formeln, sondern nur Werte.
Zu Problem B: Ja das ist so. Entweder das Eine oder das Andere, aber nicht Beides!
GreetZ Renée
Anzeige
AW: Bei Änderungen Frabenwechsel....
12.02.2009 09:02:00
Gordon
Zu A:
Bin ich gerade etwas neben der Spur?(ist ja noch früh im Büro)
Du, Renée, schreibst von deinem verbesserten Code.....wo sehe ich den denn? Oder hab ich das falsch verstanden?
Beste Grüße
Gordon
Unter:Verbesserung Farbwechsel! (owT)
12.02.2009 09:08:00
Renee

AW: Unter:Verbesserung Farbwechsel! (owT)
12.02.2009 09:24:00
Gordon
Ok,
es ist wirklich noch zu früh....*mal an der Cola nippe*
Danke dir aber....
Gruß
Gordon
AW: Unter:Verbesserung Farbwechsel! (owT)
12.02.2009 10:15:00
Gordon
Ok,
muss dann doch nochmal eine Frage stellen:
Also der Code funktioniert nun wunderbar. Nur gibt es eine kleine Nebenwirkung und ich wollte mal fragen, ob man die Umgehen kann. Und zwar sieht der Code ja so aus:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rC As Range
For Each rC In Target
If rC.Value = Worksheets(ActiveSheet.Name & " (2)") _
.Cells(rC.Row, rC.Column).Value Then
rC.Interior.ColorIndex = -4142
Else
rC.Interior.ColorIndex = 6
End If
Next rC
End Sub


Wenn sich eine Zelle ändert wird sie farblich makiert....alles supi. Nur wenn ich jetzt z.B. eine ganze Spalte markiere und dann auf "Inhalt löschen" gehe, dauert es recht lange, bis Excel wieder verwendbar ist. Liegt wohl daran, dass jede Zelle nun in Spalte A angefasst und vom Makro überprüft wird. Gibt es 'ne Möglichkeit bei einem Makro es so zu hinterlegen, dass Befehle wie "Inhalt löschen" nicht berücksichtigt werden? Oder gehört das leider zu den unmöglichen Fällen?
Gruß
Gordon

Anzeige
umögliche Fälle, gibt's wenig, aber
12.02.2009 10:25:00
Renee
dann musst du alle Ausnahmen beschreiben, bei denen du keine Protokollierung vornehmen willst, Gordon.
Du könntest ein eigenes Makro schreiben:

'Code gehört in ein Modul:
Sub EinAusEvents()
Application.EnableEvents = Not (Application.EnableEvents)
Application.StatusBar = "Events sind " & _
IIf(Application.EnableEvents, " eingeschaltet!", " ausgeschaltet!")
End Sub


Das schaltet das Eventhandling um, so dass das Change_Ereignis entweder ausgeführt wird (eingeschaltet) oder eben nicht (ausgeschaltet)! Wenn ausgeschaltet, dann deine Aktionen die nicht protokolliert werden sollen durchführen.
GreetZ Renée

Anzeige
AW: umögliche Fälle, gibt's wenig, aber
12.02.2009 10:33:00
Gordon
Ach,
hab's gerade getestet...geht doch nicht so einfach... ;-)
Super Angabe, was soll ich damit ? (owT)
12.02.2009 10:39:00
Renee

AW: Super Angabe, was soll ich damit ? (owT)
12.02.2009 10:43:00
Gordon
Wollte nur damit sagen, dass ich bei dem Beitrag davor (Application.EnableEvents = Fale/True) Mist geschrieben habe....sorry, wenn ich dich verwirrt und damit verstimmt haben sollte.
Probiere es mal aus, wie du es vorher beschrieben hattest, wenn ich Zeit finde. Danke dennoch für deine Mühe.
und Schluss (owT)
15.02.2009 19:05:00
Renee

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige