Dictionary und leere Zelle
14.08.2019 23:50:28
Zwenn
zwar habe ich mein Problem gelöst, aber auf eine andere Art und Weise als ich wollte. Deshalb habe ich ein Defizit im Wissen über Dictionaries. Eine Beispieldatei gibt es nicht, weil es Auftragsarbeit ist und dem entsprechend dem Kunden gehört. Es ist also ein "Kopf-Thema". Aber ich beschreibe es im Folgenden.
Hast Du kein Bock drauf, kann ich das verstehen, aber spare Dir bitte einen Kommentar ala "ohne abgespeckte Beispieldatei kann ich das nicht". Gibt es nicht, da das Projekt sehr aufwändig ist und ich schlicht und ergreifend den Zeitaufwand scheue, das Problem zu isolieren. Auch dazu bitte keine Kommentare. Sollten doch welche kommen ignoriere ich sie. Ja, es ist das Amazon Projekt. (Was für eine beknackte Seite, wenn man an Infos will.)
Kommen wir zur Frage:
Ich lese vor der nächsten Ausleserunde alle Zellwerte einer Spalte in ein Dictionry ein. Darunter auch leere Zellen. Zum Abschluss der Ausleserunde lese ich in einer Schleife jeden zu vergleichenden Wert der entsprechenden Zeile ein, der auch leer sein kann, also zeilenweise in einer Schleife. Der Vergleich beider Werte (alt in der Zeile zu neu in der Zeile) ergibt offenbar False. Nach meinem Verständnis sollte ein leerer String zu einem leeren String aber gleich sein. Es klappt aber mit einem Dictionary nicht so, wie erartet. (Zeilenumbrüche im folgenden Code sind der Forensoftware geschuldet)
Code-Ausschnitt, der nicht funktioniert:
'Verkäufer Länderübersicht Tabelle Länderliste auf Änderungen prüfen und pro Seller einfärben
'Neue Länderliste eintragen und Kommentar-Historie pflegen
'Amazon ausnehmen (hat kein Versandland und keine SellerId)
If Len(sellerID) > 0 Then
'Vergleichswerte der aktuellen SellerID bereit stellen
laenderListe = Sheets(sellerLaenderUebersichtTabelle).Cells(zeileSellerLand, _
sellerLaenderUebersichtTabelleAusLandSpalte).Value
'Für Ersteinträge einen leeren String generieren
If alteVersandAusLaenderlisten.Exists(sellerID) Then
laenderListeAlt = alteVersandAusLaenderlisten(sellerID)
Else
laenderListeAlt = ""
End If
'Je nach Vergleich der alten und neuen Länderliste muss entschieden werden,
'welcher Zeitstempel verwendet wird und ob der Kommentar erweitert wird
If laenderListe laenderListeAlt Then
'Nur wenn der Zellwert sich geändert hat
'Sorgt dafür, dass der Kommentar nicht erweitert wird und
'das die Zelle ihre vorgewählte Farbe Orange oder Sand behält
If Len(laenderListe) > 0 Then
'Zelle hat einen Eintrag und wird auf Einfärbung für den neuen Zellwert geprüft
'Zeitstempel aus aktueller Zeile auslesen
zeitStempel = CDate(Sheets(sellerLaenderUebersichtTabelle).Cells(zeileSellerLand, _
sellerLaenderUebersichtTabelleAusleseDatumSpalte).Value) & _
" " & CDate(Sheets(sellerLaenderUebersichtTabelle).Cells(zeileSellerLand, _
_
sellerLaenderUebersichtTabelleAusleseUhrzeitSpalte).Value)
'Zellabgleich und neue Einfärbung
zellWertGeaendert = ZellWerteAbgleichenUndEinfaerben(sellerLaenderUebersichtTabelle, _
zeileSellerLand, sellerLaenderUebersichtTabelleAusLandSpalte, _
zeitStempel, laenderListe, laenderListeAlt, eintragGeloescht, True, , _
_
False)
Else
'Gibt es keinen Zellwert, wurde keine neue Länderliste eingetragen
'Aktuellen Zeitstempel generieren, da der in der Tabelle eingetragene
'Zeitstempel vom letzten gelungenen Auslesevorgang stammt
zeitStempel = CDate(Int(Now())) & " " & CDate(Now() - Int(Now()))
'Es wird nur der Kommentar mit dem entsprechenden Vermerk versehen
keinAusLandMehrKommentar = zeitStempel & " - " & eintragGeloescht
Call ZeitStempelKommentar(sellerLaenderUebersichtTabelle, zeileSellerLand, _
sellerLaenderUebersichtTabelleAusLandSpalte, keinAusLandMehrKommentar, 1)
End If
Else
'Keine Änderung des Zellwertes
'Prüfen, ob etwas in der Zelle steht
If Len(laenderListe) > 0 Then
'Wenn ja, prüfen ob Zellfarbe Orange ist
If Sheets(sellerLaenderUebersichtTabelle).Cells(zeileSellerLand, _
sellerLaenderUebersichtTabelleAusLandSpalte).Interior.Color = ownOrange Then
'Wenn ja, Zelle entfärben
Sheets(sellerLaenderUebersichtTabelle).Cells(zeileSellerLand, _
sellerLaenderUebersichtTabelleAusLandSpalte).Interior.ColorIndex = xlNone
End If
End If
End If
End If
Aktuelle Lösung (Prüfung auf Zellfartbe Sand. Damit markiere ich Werte, die sich in der Vargangenheit geändert haben, aber nicht im letzten Abgleich. Deshalb ist die Zelle in jedem Fall zum zweiten Mal leer:
'Verkäufer Länderübersicht Tabelle Länderliste auf Änderungen prüfen und pro Seller einfärben
'Neue Länderliste eintragen und Kommentar-Historie pflegen
'Amazon ausnehmen (hat kein Versandland und keine SellerId)
If Len(sellerID) > 0 Then
'Vergleichswerte der aktuellen SellerID bereit stellen
laenderListe = Sheets(sellerLaenderUebersichtTabelle).Cells(zeileSellerLand, _
sellerLaenderUebersichtTabelleAusLandSpalte).Value
'Für Ersteinträge einen leeren String generieren
If alteVersandAusLaenderlisten.Exists(sellerID) Then
laenderListeAlt = alteVersandAusLaenderlisten(sellerID)
Else
laenderListeAlt = ""
End If
'Je nach Vergleich der alten und neuen Länderliste muss entschieden werden,
'welcher Zeitstempel verwendet wird und ob der Kommentar erweitert wird
If laenderListe laenderListeAlt Then
'Nur wenn der Zellwert sich geändert hat
'Sorgt dafür, dass der Kommentar nicht erweitert wird und
'das die Zelle ihre vorgewählte Farbe Orange oder Sand behält
If Len(laenderListe) > 0 Then
'Zelle hat einen Eintrag und wird auf Einfärbung für den neuen Zellwert geprüft
'Zeitstempel aus aktueller Zeile auslesen
zeitStempel = CDate(Sheets(sellerLaenderUebersichtTabelle).Cells(zeileSellerLand, _
sellerLaenderUebersichtTabelleAusleseDatumSpalte).Value) & _
" " & CDate(Sheets(sellerLaenderUebersichtTabelle).Cells(zeileSellerLand, _
_
sellerLaenderUebersichtTabelleAusleseUhrzeitSpalte).Value)
'Zellabgleich und neue Einfärbung
zellWertGeaendert = ZellWerteAbgleichenUndEinfaerben(sellerLaenderUebersichtTabelle, _
zeileSellerLand, sellerLaenderUebersichtTabelleAusLandSpalte, _
zeitStempel, laenderListe, laenderListeAlt, eintragGeloescht, True, , _
_
False)
Else
'Nur wenn Zellfarbe nicht Sand
If Sheets(sellerLaenderUebersichtTabelle).Cells(zeileSellerLand, _
sellerLaenderUebersichtTabelleAusLandSpalte).Interior.Color ownSand Then
'Gibt es keinen Zellwert, wurde keine neue Länderliste eingetragen
'Aktuellen Zeitstempel generieren, da der in der Tabelle eingetragene
'Zeitstempel vom letzten gelungenen Auslesevorgang stammt
zeitStempel = CDate(Int(Now())) & " " & CDate(Now() - Int(Now()))
'Es wird nur der Kommentar mit dem entsprechenden Vermerk versehen
keinAusLandMehrKommentar = zeitStempel & " - " & eintragGeloescht
Call ZeitStempelKommentar(sellerLaenderUebersichtTabelle, zeileSellerLand, _
sellerLaenderUebersichtTabelleAusLandSpalte, keinAusLandMehrKommentar, 1)
End If
End If
Else
'Keine Änderung des Zellwertes
'Prüfen, ob etwas in der Zelle steht
If Len(laenderListe) > 0 Then
'Wenn ja, prüfen ob Zellfarbe Orange ist
If Sheets(sellerLaenderUebersichtTabelle).Cells(zeileSellerLand, _
sellerLaenderUebersichtTabelleAusLandSpalte).Interior.Color = ownOrange Then
'Wenn ja, Zelle entfärben
Sheets(sellerLaenderUebersichtTabelle).Cells(zeileSellerLand, _
sellerLaenderUebersichtTabelleAusLandSpalte).Interior.ColorIndex = xlNone
End If
End If
End If
End If
Kann mir jemand sagen, was ein Dictionary als Wert speichert, wenn eine Zelle leer ist? Also, was zum Henker muss ich Prüfen?
Viele Grüße,
Zwenn