2016-06-01 5 views
0

Ich versuche, ein Wörterbuch zu erstellen, in dem die R1C1-Formel der Schlüssel ist und die Zelle das Element ist, aber Probleme beim Umwandeln des Elements haben, wenn es aus dem Wörterbuch abgerufen wird. Bisher habe ich den folgenden Code, um das Wörterbuch zu erstellen scheint ganz gut:Wörterbuch der Zellen

Dim dict As Scripting.Dictionary 
Dim c As Range 

Set dict = New Scripting.Dictionary 

For Each c In ActiveSheet.UsedRange.Cells 
    If Not dict.Exists(c.FormulaR1C1) Then dict.Item(c.FormulaR1C1) = c 
Next c 

Das Problem, das ich habe ist, wenn man versucht, die Elemente im Wörterbuch zugreifen zu können, kann ich nicht scheinen, um herauszufinden, wie man Wirf den Gegenstand als Bereich/Zelle. Ich habe versucht, die folgenden aber einen Laufzeitfehler ‚424‘ erhält: Objekt erforderlich

Dim r As Range 
Dim k As Variant 

For Each k In dict.Keys 
    Set r = dict.Item(k) 
Next k 

auch versucht, die Behandlung nur das Einzelteil als Bereich und Dinge .Formula Eigenschaft Aufruf:

Range("A1").value = "'" & dict.Item(k).Formula 

Versucht es zu der Einstellung, "Objekt" wie folgt:

Set r = dict.Item(k).Object 

Keine von denen funktioniert. Was ist der richtige Weg, ein Wörterbuch zu verwenden, in dem das Objekt ein Objekt und nicht nur eine Zeichenkette ist (oder ist das nicht möglich)?

Danke!

Antwort

0

Ein paar Punkte:

  1. Wenn Sie ein Range Objekt in das Wörterbuch Element hinzufügen möchten, müssen Sie das Set Schlüsselwort verwenden, wenn Sie es dem Wörterbuch sind das Hinzufügen, nicht, wenn Sie‘ wieder abrufen.

  2. Die FormulaR1C1 der Zelle kann nicht der beste Schlüssel sein, zu verwenden. Der Grund ist, dass der Schlüssel nur einmal hinzugefügt wird, vorausgesetzt, Sie haben die gleiche Formel in einer Reihe von Zellen. Dies kann das Verhalten sein, das Sie wünschen, und wenn dies der Fall ist, ignorieren Sie diesen Punkt. Wenn nicht, müssen Sie möglicherweise einen anderen Schlüssel in Betracht ziehen.

Siehe unten stehenden Code. Um zu demonstrieren, dass ich eine Zelle aus dem Wörterbuch abrufe, habe ich einfach die Zelle eingefärbt. Ändern Sie das natürlich nach Ihren Bedürfnissen.

Sub AddRangesTdictionary() 
    Dim dict As Object 
    Dim c As Range 

    Set dict = CreateObject("Scripting.Dictionary") 

    For Each c In Range("B1:B4") 
     If Not dict.Exists(c.FormulaR1C1) Then 
      Set dict.Item(c.FormulaR1C1) = c 
     End If 
    Next c 

    For Each k In dict.Keys 
     dict.Item(k).Interior.ColorIndex = 36 
    Next k 
End Sub 
+0

Das ist perfekt! Das 'Set dict.Item (k) = c' hat es geschafft! Warum ist es immer so offensichtlich? Für # 2 verwende ich die 'FormulaR1C1' speziell, um doppelte Einträge für" wie "Formeln zu vermeiden. Für die Analyse, die ich mache, wenn Sie auf B2 von C2 oder F44 von G44 verweisen, sind sie das "selbe". Ich bin nur interessiert, wenn Sie plötzlich auf A6 von C6 statt von B6 verweisen. Wie Sie bereits erwähnt haben, hilft es, Fälle zu erkennen, in denen dem Mix eine andere Formel hinzugefügt wurde. Vielen Dank für die Hilfe! – Agathron

Verwandte Themen