Call to a property is setting all items in collection, not one

J

J Streger

I have a class module that has a collection of another class module (MONTH)
that has a collection of a third class module (WBSID) with a property of
ACWP. It seems that in some scenarios, if I call this line in the top level
class:

Me.Month(1).WBSID("ABC123").ACWP = 50

All WBSID with the name property of "ABC123", regardless of which month they
are in, chance to 50, even though I specifically call one month. And I just
want to set the single month's value, not any other month. Below is the code
that refers to this in my classes (sorry for lack of comments, haven't gotten
around to it). Thanks for any help as this is driving me nuts.

Top Level Class:

Private pMonth As New Collection

Property Set Months(S As Collection)
Set pMonth = S
End Property
Property Get Months() As Collection
Set Months = pMonth
End Property
Public Function Month(index As Integer) As clsMonth

If index > pMonth.Count Or index < 1 Then
Err.Raise 9
Else
Set Month = pMonth(index)
End If

End Function

Month class:

Private pWBSID As New Collection

Property Set WBSIDs(S As Collection)
Set pWBSID = S
End Property
Property Get WBSIDs() As Collection
Set WBSIDs = pWBSID
End Property
Public Function WBSID(index As Variant) As clsWBSID
If IsNumeric(index) Then
If index > pWBSID.Count Or index < 1 Then
Err.Raise 9
Else
Set WBSID = pWBSID(index)
End If
Else

Dim WP As clsWBSID

For Each WP In pWBSID
If UCase(WP.ChargeCode) = UCase(index) Then
Set WBSID = WP
Exit For
End If
Next

End If
End Function

WBSID Class:

Private pACWP As Double
Private pChargeCode As String

Public Property Let ChargeCode(S As String)
pChargeCode = S
End Property
Public Property Get ChargeCode() As String
ChargeCode = pChargeCode
End Property
Public Property Let ACWP(S As Double)
pACWP = Round(S, 1)
End Property
Public Property Get ACWP() As Double
ACWP = pACWP
End Property
--
*********************
J Streger
MS Office Master 2000 ed.
MS Project White Belt 2003

User of MS Office 2003
 
T

Tim Williams

Have you tried explicitly specifying "Item()"

Public Function Month(index As Integer) As clsMonth

If index > pMonth.Count Or index < 1 Then
Err.Raise 9
Else
Set Month = pMonth.Item(index)
End If


End Function


I think I already made this suggestion some time ago. Did it not work ?
Item works for indexes as well as string keys.

Tim
 
J

J Streger

I just tried it and no change. I was always under the impression that:

myCollection.item(index) is equivalent to myCollection(index)

Also I cannot use .item for the call to the WBSID as the value I will index
is a property of the class. I guess I can try and put the value as the key
rather than the property, but that would be a bit of work.
--
*********************
J Streger
MS Office Master 2000 ed.
MS Project White Belt 2003

User of MS Office 2003
 
T

Tim Williams

You mention that this occurs "in some scenarios": can you reproduce these
cases reliably?
I could take a look if you can put a sample workbook together.

Tim
tim j williams
at gmail dot com
(no spaces, and the obvious stuff)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top