Zuletzt geänderte Zelle erkennen
#1
Moin leute :43:

ich empfange mit excel sich ständig verändernde Daten aus 2 externen webanfragen. diese importierten zahlen werden auf excel weiter verarbeitet. aus den 2 datenquellen bekomme ich daten, auf mein excel dokument, nun muss excel den zuletzt aktualisierten (hh : mm : ss) Wert der beiden externen quellen (zb in spalten A und B) erkennen und in Spalte C den sich jeweils zuletzt aktualisierten Wert anzeigen.
bisher hab ichs mit diesem code probiert:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rowUp As Integer, rowDown As Integer, colValue As Integer, colDate As Integer, rngValue As Range

    'Nummer der obersten zu überwachende Zeile
rowUp = 1
    'Nummer der untersten zu überwachende Zeile >>> grosszügig, darf vorläufig tausende von Leerzeilen enthalten
rowDown = 20
        'Spaltennummern als A=1, B=2, C=3 usw
    'Spaltennummer der zu überwachenden Werte > hier A
colValue = 1
    'Spaltennummer mit dem Aenderungsdatum > hier B
colDate = 2

Set rngValue = Range(Cells(rowUp, colValue), Cells(rowDown, colValue))
If Not Intersect(Target, rngValue) Is Nothing Then Cells(Target.Row, colDate) = Now

End Sub

Das problem nur ist, dieser code erkennt nur manuell, also 'per hand' veränderte zellen und gibt das aktuelle datum richtig wieder. Ändern sich die Zielzellen aufgrund automatischer Änderungen der Zelle, da Die Spalten Zellen A und B jeweils formel haben und von den quelldaten der externen datenquelle abhängen, wird das aktuelle datum nicht angezeigt; der code erkennt es nicht.

ich hoffe ihr könnt mir weiterhelfen :19:
Top
#2
Hallöchen,
Eventuell kannst Du auch das calculate-Ereignis nehmen.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#3
hallo

wenn ich Worksheet_Change mit Worksheet_Calculate ersetze, steht dort: Fehler beim Kompilieren


Oder anders gefragt. Wie kann ich es erreichen, dass excel zwischen 2 Zahlen (A1, B1) unterscheidet, nachdem welche zuletzt aktualisiert wurde, und die zuletzt aktualisierte in C1 wiedergibt?
Top
#4
Hallöchen,
Nicht einfach nur ersetzen... Calculate hat keine Parameter.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#5
nur wie genau mache ich das und wie müsste der passende code aussehen?
Top
#6
Hallöchen,
Das, was nach ...Change in Klammern steht, muss raus.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#7
(15.07.2016, 07:27)schauan schrieb: Hallöchen,
Das, was nach ...Change in Klammern steht, muss raus.

Option Explicit

Private Sub Worksheet_Calculate()

Dim rowUp As Integer, rowDown As Integer, colValue As Integer, colDate As Integer, rngValue As Range

    'Nummer der obersten zu überwachende Zeile
rowUp = 1
    'Nummer der untersten zu überwachende Zeile >>> grosszügig, darf vorläufig tausende von Leerzeilen enthalten
rowDown = 20
        'Spaltennummern als A=1, B=2, C=3 usw
    'Spaltennummer der zu überwachenden Werte > hier A
colValue = 1
    'Spaltennummer mit dem Aenderungsdatum > hier B
colDate = 2

Set rngValue = Range(Cells(rowUp, colValue), Cells(rowDown, colValue))
If Not Intersect(Target, rngValue) Is Nothing Then Cells(Target.Row, colDate) = Now

End Sub
.........................

fehler: variable (Target) ist nicht definiert.
Top
#8
Hallo sarkami,

teste mal das:
Private Sub Worksheet_Calculate()
 Dim lngZeile As Long
 Dim rngUeberwachung As Range
 Dim varAktuell As Variant
 Static varVorher As Variant
 
 Set rngUeberwachung = Range("A1:B20")
 
 If Not IsArray(varVorher) Then
   varVorher = rngUeberwachung.Value
 Else
   varAktuell = rngUeberwachung.Value
   For lngZeile = 1 To UBound(varAktuell)
     If varAktuell(lngZeile, 1) <> varVorher(lngZeile, 1) Then
       varVorher(lngZeile, 1) = varAktuell(lngZeile, 1)
       rngUeberwachung.Cells(lngZeile, 3).Value = varAktuell(lngZeile, 1)
       Exit For
     ElseIf varAktuell(lngZeile, 2) <> varVorher(lngZeile, 2) Then
       varVorher(lngZeile, 2) = varAktuell(lngZeile, 2)
       rngUeberwachung.Cells(lngZeile, 3).Value = varAktuell(lngZeile, 2)
       Exit For
     End If
   Next lngZeile
 End If
End Sub
Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • sarkami
Top
#9
das sieht doch mal auf den ersten blick hervorragend aus! 
dank dir Kuwer Thumps_up
Top
#10
ein kleines problem gibts es noch,


bei der formel von kuwer wird immer wenn der aktualisierungsvorgang (alt+F5) startet (beziehe externe daten ausm web), immer nur der erste gefundene neue Wert in Spalte 3 wiedergebeben. solange sich in den Zellen A1:B20 nur ein Wert per Aktualisierung verändert, stimmt auch alles, ändern sich hingegen bei der aktualisierung mehrere Werte gleichzeitig, ZB A1 und A10 und A12, steht nur in C1 der neue Wert (A1). C10 und C12 hingegen bleiben leider unverändert; anscheinend sucht die formel den ersten veränderten Wert und ignoriert dann alle weiteren. Da sich pro rechenvorgang (alt+F5) meist mehrere werte ändern, führt die formel dazu, dass meist C1 (neuester Wert aus A1 oder B1) bis C3 (neuester Wert aus A3 oder B3) regelmässig aktualisisiert sind, die unteren C Werte ab C5 hingegen gar nicht.

Wie müsste ich die Formel anpassen damit alle zeitgleich angepasst werden?
Top


Gehe zu:


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