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

Dictionary und leere Zelle

Dictionary und leere Zelle
14.08.2019 23:50:28
Zwenn
Hallo zusammen,
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

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dictionary und leere Zelle
15.08.2019 16:26:11
mmat
Hallo Zwenn,
was ist denn ein Dictionary? Irgendwie muss ich mal dumm fragen, wahrscheinlich muss irgendein Verweis aktiviert werden, wie im Standard scheints den Daten-Typ nicht zu geben. Aber ich bin neugierig
Allgemein: Wenn ein Vergleich zweier Variablen schiefgeht und der Inhalt beider Variablen auf leeren Zellen basiert, dann würde ich vermuten, das der Variableninhalt NULL (=undefiniert) ist. Also keine leere Zeichenfolge oder sowas. Der Einsatz von NULL in irgendwelchen Operationen ist im allgemeinen unzulässig.
vg, MM
AW: Dictionary und leere Zelle
15.08.2019 17:20:26
onur
Und wie genau "fütterst" du die Dict?
In diesem Codeabschnitt sehe ich nix von ".Add".
Anzeige
AW: Dictionary und leere Zelle
15.08.2019 17:38:48
Daniel
Wenn du uns schon keine Beispieldatei zur Verfügung stellen magst, dann erstlle dir doch selber eine mit ein paar wenigen Daten und experimentiere ein bisschen damit rum.
dann kannst du ja selber ausprobieren, was in den einzlnen Dictionary-Einträgen drin steht.
gruß Daniel
AW: vbNullString
15.08.2019 21:58:56
Fennek
Hallo Zwenn,
in einem kleinen Test scheint es so zu sein, dass eine leere Zelle die Key vbNullString ergibt.
mfg

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige