Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 101
Default Call to a property is setting all items in collection, not one

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

  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1,588
Default Call to a property is setting all items in collection, not one

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 Streger" wrote in message
...
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



  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 101
Default Call to a property is setting all items in collection, not one

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



"Tim Williams" wrote:

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 Streger" wrote in message
...
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




  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1,588
Default Call to a property is setting all items in collection, not one

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)






"J Streger" wrote in message
...
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



"Tim Williams" wrote:

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 Streger" wrote in message
...
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






Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Setting a collection in a class J Streger Excel Programming 3 May 8th 07 09:13 PM
How find maximum top+height property of a collection of shapes Chet Excel Programming 2 February 20th 07 04:52 PM
Class Collection Add Items keep repeating Kevin Vaughn Excel Programming 3 April 18th 06 10:50 PM
Using a collection as a property GregR Excel Programming 4 August 10th 05 06:02 PM
Clearing all items in a collection Todd Huttenstine Excel Programming 5 August 13th 04 09:45 PM


All times are GMT +1. The time now is 05:05 PM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"