Excel VBA - Zelländerung ändert Dictionary-Wert

MickH74

Lieutenant
Registriert
Apr. 2009
Beiträge
603
Hallo liebes Forum,

ich brauche bitte mal Hilfe, um folgendes zu verstehen:

Ich lese Werte aus einem Tabellenblatt in ein Dictionary.
Wenn ich nun einen Wert im Tabellenblatt ändere, dann ändert sich auch der Wert im Dictionary.
Ist das normal? Ich dachte, ein Dictionary funktioniert wie ein Array, wo also die Zellwerte in den Speicher kopiert werden.

Code:
If DictDebitoren(oCust.Debitor) <> oCust.Kunde Then  'Falls Kundennamen nicht übereinstimmen
                
'1. Korrektur des Kundennamen im Tabellenblatt (Ursprung für das Dictionary)
Sheets("DebitorRef").Range("TBDebitorRef[Debitor]").Find(what:=oCust.Debitor).Offset(Columnoffset:=1) = oCust.Kunde
                
'2. Zelländerungen in einem anderen Tabellenblatt
Sheets("Quelldaten").Range("TBQuelldaten[Kunde]").Replace DictDebitoren(oCust.Debitor), oCust.Kunde
               
End If

Bei der Ausführung des Codes ändert sich der Wert von DictDebitoren(oCust.Debitor) zu oCust.Kunde.

Wenn ich aber die Zeile unter '1. ausschalte, dann bleibt DictDebitoren(oCust.Debitor) unverändert. Aber in der Zeile unter '1 wird ja nur ein Wert in ein Tabellenblatt geschrieben.

Warum verändert das also den Wert im Dictionary?

Danke und Gruß,
Mick
 
Hi Mick,

sehe ich das richtig? Hochsprachenrogrammierer? Keine Assemblererfahrung? Kein richtiges IT-Studium? Ich meine es nicht bös. Fällt einem nur auf.

Du kopierst eine komplette Zelle mit all ihren Beschreibungen wie z.B. Format. Darin ist der Zellwert als Pointer (ByRef) abgebildet und nicht der Wert an sich (ByVal). Probiers mal bei allen Zellzugriggen mit einem definierten Value.

Code:
Debitoren(oCust.Debitor).value <> oCust.Kunde.value Then  ...


Also alle Referenzen auf Zellen um das Value erweitern.
 
Hi GuruSMI,

danke für die schnelle Hilfe.

Du hast Recht, ich hab kein IT-Studium und kann auch nicht Assembler programmieren. Aber man darf VBA sicher auch einfach nur als Hobby betreiben.
 
Vorab: Ich hab keine Erfahrung mit Dicionarys.
Ich wuerde aber genauso wie du keine Kopplung zur Quelle erwarten.
Nachdem was ich gelesen habe, wird das Dictionary gefuellt und fertig.

Wie wird denn dein Dictionary erstellt?
Wird die Funktion vielleicht irgendwie aufgerufen und es wird einfach nur nach der Aenderung noch einmal erstellt/aktualisiert?
Bist du schon mal Schritt fuer Schritt durchgegangen und kannst es damit definitiv auf Zeile 4 eingrenzen?
 
Aber licher doch, kann man VBA nur als Hobby ausführen. Wie ich bereits schrieb, war das nicht bös gemeint.

Schau Dir mal die Info's zu Excel-DNA genauer an. Da bekommst Du von Excel's Interna recht viel mit.
 
@Scientist: Danke für Deinen Beitrag. GuruSMI hatte die Frage aber ja schon beantwortet.

Weist man dem Dictionary die Zellwerte mit .value zu, dann funktioniert es.

@GuruSMI: Danke für den Tipp. Da werde ich mal reinschauen.
 
Zurück
Oben