06.08.2024, 15:56
Hallo wertes Forum,
ich habe da ein Problem beim Feststellen, ob es in einer Spalte mehr als einen Wert gibt.
Ich habe zur Veranschaulichung eine Beispieldatei mit dem folgenden Code angehängt:
Mein erster Gedanke war, dass ich mir ein Dictionary nehme, das mit dem fraglichen Wert als Key befülle und am Ende prüfe, wieviele Keys ich habe. (Sicherlich gibt es auch andere Wege...).
Das funktioniert auch. Wenn mehr als ein verschiedener Wert in der Spalte steht, wird das Makro über die MsgBox beendet.
Jetzt habe ich festgestellt, dass ich aber diesen einen Key später nochmal brauche.
Ich habe versucht, die Varibale lngShipToParty, die ich zum Einlesen des Dictionaries nutze, zu verwenden, aber die ist "0".
Sowohl das Item als auch der Key des Dictionariies ist leer.
Natürlich habe ich in snb's Almanach über Dictionaries studiert, komme aber nicht weiter (dictShipToParty.Items()(1) gibt einen Fehler Laufzeitfehler 9: Index außerhalb des gültigen Bereichs).
Was mache ich verkehrt? Warum funktioniert die Abfrage am Ende aber ich bekomme den Wert mnicht raus?
Vielen Dank für Eure Hilfe,
Lutz
Beispiel Dictionary.xlsm (Größe: 17,63 KB / Downloads: 10)
ich habe da ein Problem beim Feststellen, ob es in einer Spalte mehr als einen Wert gibt.
Ich habe zur Veranschaulichung eine Beispieldatei mit dem folgenden Code angehängt:
Code:
Sub DictTest()
Dim wksShippedOrders As Worksheet
Dim dictShipToParty As Object
Dim lngZeileDaten As Long, lngLetzteZeileDaten As Long, lngSpalteQty As Long, lngSpalteShipToParty As Long
Dim lngShipToParty As Long
Set wksShippedOrders = ThisWorkbook.Worksheets("Sheet1")
Set dictShipToParty = CreateObject("scripting.dictionary")
lngSpalteShipToParty = 4
lngSpalteQty = 11
With wksShippedOrders
lngLetzteZeileDaten = .UsedRange.SpecialCells(xlCellTypeLastCell).Row
For lngZeileDaten = 2 To lngLetzteZeileDaten
If .Cells(lngZeileDaten, lngSpalteQty).Value > 0 Then
lngShipToParty = dictShipToParty.Item(CLng(.Cells(lngZeileDaten, lngSpalteShipToParty).Value))
Debug.Print CLng(.Cells(lngZeileDaten, lngSpalteShipToParty).Value), dictShipToParty.Item(dictShipToParty.keys()(0)), dictShipToParty.Items()(0), "Test"
' Hier steht noch mehr Code....
End If
Next lngZeileDaten
End With
If dictShipToParty.Count > 1 Then
MsgBox "Die Aufträge gehören zu mehr als einem Kunden." & vbNewLine & _
"Das Program wird beendet.", vbCritical + vbSystemModal, Left(ActiveWorkbook.Name, InStrRev(ActiveWorkbook.Name, ".") - 1)
End
End If
End Sub
Mein erster Gedanke war, dass ich mir ein Dictionary nehme, das mit dem fraglichen Wert als Key befülle und am Ende prüfe, wieviele Keys ich habe. (Sicherlich gibt es auch andere Wege...).
Das funktioniert auch. Wenn mehr als ein verschiedener Wert in der Spalte steht, wird das Makro über die MsgBox beendet.
Jetzt habe ich festgestellt, dass ich aber diesen einen Key später nochmal brauche.
Ich habe versucht, die Varibale lngShipToParty, die ich zum Einlesen des Dictionaries nutze, zu verwenden, aber die ist "0".
Sowohl das Item als auch der Key des Dictionariies ist leer.
Natürlich habe ich in snb's Almanach über Dictionaries studiert, komme aber nicht weiter (dictShipToParty.Items()(1) gibt einen Fehler Laufzeitfehler 9: Index außerhalb des gültigen Bereichs).
Was mache ich verkehrt? Warum funktioniert die Abfrage am Ende aber ich bekomme den Wert mnicht raus?
Vielen Dank für Eure Hilfe,
Lutz
Beispiel Dictionary.xlsm (Größe: 17,63 KB / Downloads: 10)