Home |
Search |
Today's Posts |
#1
Posted to microsoft.public.excel.programming
|
|||
|
|||
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
Posted to microsoft.public.excel.programming
|
|||
|
|||
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
Posted to microsoft.public.excel.programming
|
|||
|
|||
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
Posted to microsoft.public.excel.programming
|
|||
|
|||
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 |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
Setting a collection in a class | Excel Programming | |||
How find maximum top+height property of a collection of shapes | Excel Programming | |||
Class Collection Add Items keep repeating | Excel Programming | |||
Using a collection as a property | Excel Programming | |||
Clearing all items in a collection | Excel Programming |