Aktualisierte Zellinhalte kennzeichnen
#1
Hallo Community,

ich erbitte Eure Hilfe bei folgendem Problem (vereinfacht dargestellt):

In einer Tabelle werden die Werte in den Zellen z.B. der Spalte C durch Verknüpfungen mit anderen Tabellen aktualisiert. Um eine Kontrolle darüber zu haben, welche Werte sich durch den Aktualisierungsvorgang verändert haben, möchte ich die entsprechenden Zellen z.B. durch ein rotes X in der rechts daneben liegenden (leeren) Zelle (Spalte D) markieren lassen.

Bevor ein neuer Aktualisierungsvorgang abläuft, müssen die vorherigen Kennzeichnungen gelöscht werden (ist eigentlich selbstverständlich).

Für Lösungsvorschläge bedanke ich mich im Voraus.
Top
#2
Hallo Hardbopper,

einfachste Lösung wäre eventuell eine Kopie der Werte des Blattes bei einer Berechnung und dabei ein Vergleich. Wenn Du in A1 was einträgst, wird gerechnet. Bei der Berechnung wird geprüft, ob der Wert mit dem auf Tabelle2 an gleicher Stelle übereinstimmt - hier B2. Wenn ja, ist gut. Wenn nein, wir der Stern gesetzt und der neue Wert in die "Hilfstabelle" übertragen.

Arbeitsblatt mit dem Namen 'Tabelle1'
 AB
156

ZelleFormel
B1=A1+1
Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg

Code:
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
If Sheets("Tabelle2").Cells(1, 2).Value <> Cells(1, 2).Value Then
  Cells(2, 2).Value = "*"
  Cells(1, 2).Copy
  Sheets("Tabelle2").Cells(1, 2).PasteSpecial Paste:=xlPasteValues
  Application.CutCopyMode = False
Else
  Cells(2, 2).Value = ""
End If
Application.EnableEvents = True
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#3
Zunächst einmal herzlichen Dank, André,

ich habe mich inzwischen für folgende eigene Lösung entschieden:

Neben der Spalte C mit den aktualisierbaren Daten werde ich [/b]zwei weitere Spalten in Anspruch nehmen, die Spalte D, in die ich per Makro die [b]Werte aus Spalte C hineinkopiere und die Spalte E, in der ich per Formel Differenzen zwischen C und D auslesen lasse. Damit die Ergebnisse in Spalte E nicht dauerhaft Bestand haben, lasse ich vor dem Schließen der Tabelle den Kopiervorgang (siehe oben) erneut ablaufen. Was mich derzeit noch stört: Das Makro wird über eine Befehlsschaltfläche angestoßen, ich hätte aber gern, dass es automatisch vor dem Schließen der Tabelle abläuft, weiß aber nicht, wie das zu bewerkstelligen ist, denn nach meinen laienhaften Vorstellungen wird mit dem Auslösen des Schließen-Vorgangs jede andere Aktivität, damit auch der Ablauf eines VBA-Befehls, unterbunden. Es müsste also das Schließen solange aufgehalten werden, bis das Kopieren stattgefunden hat.

Hast Du eine Idee, wie das möglich ist ?

Gruß Hardbopper
Top
#4
Hallo Hardbopper,
Dazu gibt es in Excel die Ereignismakros. Ich hatte ja auch schon das Calculate-Ereignis. Was meinst Du mit"Tabelle schließen"? Wenn Du die Datei schließt, dann z.B. das Workbook_Bevore_Save oder...Close nehmen. Findest Du unter DieseArbeitsmappe.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#5
Hallo André,

1. Die Arbeitsmappe besteht nur aus dieser einen Tabelle, weil es alle Daten aus einer Vielzahl anderer Tabellen über Verknüpfungen abruft und kein Bedarf an weiteren Tabellen an dieser Stelle besteht.

2. Mit "Tabelle schließen" meine ich das X, mit dem üblicherweise eine Tabelle ( und damit auch die Arbeitsmappe) geschlossen wird.

2. Über Workbook_BeforeClose habe ich es schon versucht, es funktioniert aber nicht, d.h. wenn ich die Tabelle wieder öffne, hat kein Kopieren stattgefunden.

Gruß Hardbopper
Top
#6
Hallo André,

ich schicke Dir mal das ganze Makro, vielleicht findest Du den Fehler. Die Zellbezüge stammen natürlich von der echten Tabelle. Der Kopiervorgang läuft einwandfrei, insofern kann darin kein Fehler liegen.

Gruß Hardbopper

Code:
Sub Worksheet_BeforeClose()
'
' Werte_Kopieren Makro
'
    Range("AF6:AF136").Select
    Selection.Copy
    Range("AF6:AF11").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("AG6").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("AF14:AF90").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("AG14").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveWindow.SmallScroll Down:=62
    Range("AF91:AF93").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("AG91:AG93").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("AF95").Select
    Application.CutCopyMode = False
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("AF97:AF98").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("AG97:AG98").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("AF106").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("AF106:AF116").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("AG106").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveWindow.SmallScroll Down:=10
    Range("AF117:AF118").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("AG117:AG118").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("AF120:AF121").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("AG120:AG121").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("AF126").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("AG126").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("AF128").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("AG128").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("AF129:AF130").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("AG129:AG130").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveWindow.SmallScroll Down:=10
    Range("AF135:AF136").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("AG135:AG136").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Close
End Sub
Top
#7
Hallo,

(19.12.2014, 02:54)Hardbopper schrieb: 2. Über Workbook_BeforeClose habe ich es schon versucht, es funktioniert aber nicht, d.h. wenn ich die Tabelle wieder öffne, hat kein Kopieren stattgefunden.

wenn ich mir dein Makro betrachte, ist es klar das, wenn Du die Tabelle wieder öffnest, das Kopieren 'scheinbar' nicht stattgefunden hast. Du speicherst die Datei nicht. Bei dem Close am Ende deines Codes fehlt meinerachtens noch was.
Gruß Stefan
Win 10 / Office 2016
Top
#8
Hi,

das z.B.

Code:
Private Sub Workbook_BeforeClose(Cancel as Boolean)
    If Me.Saved = False Then Me.Save
End Sub

Gruß
Max
Top
#9
Hallo Ihr beiden,

hab' ich alles schon versucht, das Kopieren gelingt nach wie vor nur "im Handbetrieb", automatisiert findet nichts statt.

Gruß Hardbopper
Top
#10
(19.12.2014, 11:16)Hardbopper schrieb: Hallo Ihr beiden,

hab' ich alles schon versucht, das Kopieren gelingt nach wie vor nur "im Handbetrieb", automatisiert findet nichts statt.

Gruß Hardbopper

Automatisierter Handbetrieb???? :19:

Hast Du die Prüfung ob es gespeichert wurde am Anfang oder am Ende Deiner Prozedur eingefügt?

Gruß
Max
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste