View Single Post
  #2   Report Post  
Posted to microsoft.public.excel.programming
thorgan thorgan is offline
external usenet poster
 
Posts: 3
Default dictionary count is greater than number of keys?

On Aug 18, 11:36*am, thorgan wrote:
Dear Group,

I am completely stumped by this. I am filling a dictionary and then
looping over an array made from its keys later. However, if I loop to
the count size of the dictionary I will hit an error. The reason seems
to be that the array that is made via the keys method, is one element
shorter than the dictionary count?

Sample code below:
Option Explicit

'''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''
'' *INPUTS HERE ''
Public Const distance As Single = 26.1
Public lrods As Dictionary
Public lrods_1 As Dictionary
Public lrods_9 As Dictionary
Public worst As Integer
'''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''

Sub Identify_lrods()
Dim ws As Worksheet
Dim i As Integer
Set lrods = New Dictionary
Set lrods_1 = New Dictionary
Set lrods_9 = New Dictionary

'look at sheet 3
Set ws = ThisWorkbook.Worksheets("3")
'loop through cells till empty
i = 0

Do While IsEmpty(ws.Range("J" & 3 + i)) < True

* * If ws.Range("P" & 3 + i) (distance / 1000) And ws.Range("B" & 3
+ i) = 1 Then _
* * * * lrods_1.Add ws.Range("J" & CStr(3 + i)), ws.Range("P" & CStr(3
+ i))

* * If ws.Range("P" & 3 + i) (distance / 1000) And ws.Range("B" & 3
+ i) = 9 Then _
* * * * lrods_9.Add ws.Range("J" & CStr(3 + i)), ws.Range("P" & CStr(3
+ i))

* * i = i + 2 'skip every second
Loop

Debug.Print "after filling dictionaries - the i value was", i - 2
Debug.Print "dictionary info", lrods_9.Count, UBound(lrods_9.Keys)

End Sub

Many thanks,
Tim


UPDATE:

A colleague figured this out - the arrays created from dictionaries
seem to start their index at zero. However, something odd came of
that. Later the .keys array was assigned to an array dimensioned as (1
to dictionary.count). No errors occurred, but it seems that the array
was shifted - i.e. filled with, say, 15 keys, but array(15) would
return an error. Odd.

Any thoughts?

Tim