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

Werte einfrieren

Werte einfrieren
04.07.2017 11:20:51
Michael
Hallo zusammen,
ich habe folgendes Problem.
Ich möchte gerne in meiner Excel-Datei den maximalen Wert einer Veränderung (Spalte H im Verhältnis zu Spalte L) auslesen und diesen Wert in Spalte V einfrieren. Das Problem hierbei ist, das sich die Daten über einen Datenfeed dauernd im Hintergrund ändern.
Folgenden Code hatte ich hier mal vor Jahren bekommen:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim R%
If Not Intersect(Target, Range("A:M")) Is Nothing Then
R = Target.Row
If Abs(Cells(R, 8) - Cells(R, 12) > Cells(R, 22)) Then
Cells(R, 22) = Cells(R, 8) - Cells(R, 12)
ElseIf (Cells(R, 12) - Cells(R, 8) > Cells(R, 22)) Then
Cells(R, 22) = Cells(R, 12) - Cells(R, 8)
End If
End If
End Sub

Leider funktioniert dieser Code nur wenn ich die Daten per Hand ändere, da die Daten aber über einen Feed andauernd geändert werden können, bekomme ich keine Werte ausgelesen. Hat jemand eine Idee ?
Vielen Dank im voraus
Michael

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

Betreff
Datum
Anwender
Anzeige
AW: Werte einfrieren
04.07.2017 18:17:56
fcs
Hallo Michael,
grundsätzlich sehe ich 2Möglichkeiten:
1. Ereignis Worksheet_Calculate auswerten
Dazu müsse die Feeddaten im Tabellenblatt eine Berechnung auslösen.
ggf. in einer beliebigen Zelle die Formel =SUMME(H:H)+SUMME(L:L) einfügen.
Private Sub Worksheet_Calculate()
Dim R As Long, Zeile_L As Long
Application.EnableEvents = False
'letzte Zeile mit Inhalt in Spalten H bzw. L
Zeile_L = Application.WorksheetFunction.Max(Cells(Rows.Count, 8).End(xlUp).Row, _
Cells(Rows.Count, 12).End(xlUp).Row)
For R = 2 To Zeile_L
If Abs(Cells(R, 8) - Cells(R, 12) > Cells(R, 22)) Then
Cells(R, 22) = Cells(R, 8) - Cells(R, 12)
ElseIf (Cells(R, 12) - Cells(R, 8) > Cells(R, 22)) Then
Cells(R, 22) = Cells(R, 12) - Cells(R, 8)
End If
Next
Application.EnableEvents = True
End Sub

2. OnTime-Ereignis
Per OnTime-Makro werden in regeläßigen Abständen (>=1 Sekunde)
Die Werte in Spalten H und L überprüft und ggf. Spalte V geändert.
Dies ist aber wesentlich komplizierter in der Umsetzung, da
das Makro irgendwan gestartet werden muss (zum Beispiel beim Öffnen der Datei)
das Makro vor dem Schliessen der Datei beendet werden muss.
das Makro in einem allgemeinen Modul der Datei plaziert werden muss
die Referenzen zu dem Tabellenblatt/Zellen alle genau gesetzt werden müssen.
Gruß
Franz
Anzeige
AW: Werte einfrieren
05.07.2017 15:42:50
Michael
Hallo Franz,
vielen Dank für deinen Lösungsansatz.
Ich habe heute morgen den Code in mein Excel Sheet kopiert und damit den alten "Change Code" überschrieben.
Das Sheet hat genau das gemacht was es sollte, allerdings habe ich danach nochmal ein bisschen im Code gespielt, und jetzt funktioniert er leider nicht mehr, auch dann nicht wenn ich deinen Code neu in mein Excel kopiere. Hast Du hierzu noch eine Idee ?
VG
Michael
AW: Werte einfrieren
05.07.2017 16:36:26
Hajo_Zi
Hallo Michael,
nur wenige schauen auf Deinen Rechner und sehen die Datei.
Ich möchte gerne den Fehler im Original sehen.
Ich baue keine Datei nach. Die Zeit hat schon jemand investiert.
Ein Nachbau sieht meist anders aus als das Original. Darum sollte das Original verlinkt werden.
Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, kannst du diese Daten anonymisieren bzw. pseudonymisieren.

Anzeige
AW: Werte einfrieren
05.07.2017 18:53:39
fcs
Hallo Michael,
wahrscheinlich hast du versehentlich oder bei Makro-Abbruch die Ereignis-Makros deaktiviert bzw. nicht wieder aktiviert.
Entweder Excel neu starten oder mit einem der beiden folgenden Makros die Ereignismakros gezielt deaktivieren bzw. aktiveren.
Deaktivieren ist hilfreich wenn man die Ausführung zeitweise (z.B. bei größeren Änderungen an den Daten) unterbinden möchte.
Die Makros kopierst du am Besten in ein allgemeines Modul deiner perönlichen Makroarbeitsmappe. Dann hast du sie immer verfügbar.
Gruß
Franz
Sub Anw_Events_Ein()
'Ereignismakros aktivieren
Application.EnableEvents = True
End Sub
Sub Anw_Events_Aus()
'Ereignismakros deaktivieren
Application.EnableEvents = False
End Sub

Anzeige
AW: Werte einfrieren
05.07.2017 20:38:54
Michael
Hallo Franz,
jetzt hat es funktioniert, tausend Dank, ich bin jetzt super happy.
Tatsächlich hatten sich wohl die Makros verabschiedet, ich habe einiges gelernt.
VG
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige