Registriert seit: 17.12.2014
Version(en): 365
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.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
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' | | A | B | 1 | 5 | 6 |
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)
Registriert seit: 17.12.2014
Version(en): 365
19.12.2014, 01:51
(Dieser Beitrag wurde zuletzt bearbeitet: 19.12.2014, 01:52 von Hardbopper.)
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
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
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)
Registriert seit: 17.12.2014
Version(en): 365
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
Registriert seit: 17.12.2014
Version(en): 365
19.12.2014, 03:10
(Dieser Beitrag wurde zuletzt bearbeitet: 19.12.2014, 23:42 von schauan.)
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
Registriert seit: 11.04.2014
Version(en): Office 2007
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
Registriert seit: 01.11.2014
Version(en): 2007, 2010
Hi, das z.B. Code: Private Sub Workbook_BeforeClose(Cancel as Boolean) If Me.Saved = False Then Me.Save End Sub
Gruß Max
Registriert seit: 17.12.2014
Version(en): 365
Hallo Ihr beiden,
hab' ich alles schon versucht, das Kopieren gelingt nach wie vor nur "im Handbetrieb", automatisiert findet nichts statt.
Gruß Hardbopper
Registriert seit: 01.11.2014
Version(en): 2007, 2010
19.12.2014, 11:21
(Dieser Beitrag wurde zuletzt bearbeitet: 19.12.2014, 11:22 von Max.)
(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
|