Consulting

Results 1 to 3 of 3

Thread: Objects and invalid use of property

  1. #1

    Objects and invalid use of property

    I have several objects, one is Crew class that keeps track of a company that does a service, the other one is Service class. Service class keeps track of bigger picture, so I need to be able to add multiple Crew objects to the same Service object. The problem is that I keep getting "invalid use of property" error.
    This is the line that creates the error: Service.Crews Crew and below is full code.
    Sub test()
        Dim cell As Range, techs As Single, multiTech As Boolean
        Dim Crew As cCrew, Service As cService, Equipment As cEquipment
        
        multiTech = False
        Set Crews = New Collection
        Set Crew = New cCrew
        Set Cleanway = New cCleanway
        Set Service = New cService
        
        ' create a crew for each line item
        For Each cell In Range("Labor_Info")
            If IsEmpty(cell) Then Exit For
            Set Crew = New cCrew
            With Crew
                .Code = cell
                .ServiceStart = cell.Offset(0, 2)
                .ServiceEnd = cell.Offset(0, 3)
                .InitialRate = cell.Offset(0, 8)
                .AdditionalRate = cell.Offset(0, 9)
                .TechCount = cell.Offset(0, 1)
            End With
            Service.Crews Crew
            
            ' update sheet values
            cell.Offset(0, 4) = Crew.CalculateHours
            cell.Offset(0, 5) = Crew.TotalServiceTime
        Next cell
        MsgBox "ok"
    End Sub
    Crew Class
    Option Explicit
    
    Private mCode As String
    Private mTechCount As Single
    Private mServiceStart As Date
    Private mServiceEnd As Date
    Private mInitialRate As Double
    Private mAdditionalRate As Double
    Private mTripCharge As Double
    Private mBonus As Double
    Private mNewService As Boolean
    
    ' get / set new or continuous service flag
    Public Property Let NewService(value As Boolean)
        mNewService = value
    End Property
    Public Property Get NewService() As Boolean
        NewService = mNewService
    End Property
    
    ' get / set crew code
    Public Property Let Code(value As String)
        mCode = value
    End Property
    Public Property Get Code() As String
        Code = mCode
    End Property
    
    ' get / set number of techs
    Public Property Let TechCount(value As Single)
        mTechCount = value
    End Property
    Public Property Get TechCount() As Single
        TechCount = mTechCount
    End Property
    
    ' get set service start
    Public Property Let ServiceStart(value As Date)
        mServiceStart = value
    End Property
    Public Property Get ServiceStart() As Date
        ServiceStart = mServiceStart
    End Property
    
    ' get set service end
    Public Property Let ServiceEnd(value As Date)
        mServiceEnd = value
    End Property
    Public Property Get ServiceEnd() As Date
        ServiceEnd = mServiceEnd
    End Property
    
    ' get / set first hour / 2 hours crew rate
    Public Property Let InitialRate(value As Double)
        mInitialRate = value
    End Property
    Public Property Get InitialRate() As Double
        InitialRate = mInitialRate
    End Property
    
    ' get / set additional rate charges
    Public Property Let AdditionalRate(value As Double)
        mAdditionalRate = value
    End Property
    Public Property Get AdditionalRate() As Double
        AdditionalRate = mAdditionalRate
    End Property
    
    'get / set trip crew charge
    Public Property Let TripCharge(value As Double)
        mTripCharge = value
    End Property
    Public Property Get TripCharge() As Double
        TripCharge = mTripCharge
    End Property
    
    ' get / set money bonus
    Public Property Let Bonus(value As Double)
        mBonus = value
    End Property
    Public Property Get Bonus() As Double
        Bonus = mBonus
    End Property
    
    ' calculate hours spent doing the service and round it to the nearest quarter
    Public Property Get CalculateHours() As Double
        Dim rawTime As Single, result As Single, roundedTime As Single
        Dim base As Single, remainder As Single
        
        'calculate service time
        rawTime = DateDiff("n", mServiceStart, mServiceEnd)
        result = Round(rawTime / 60, 2)
        base = WorksheetFunction.Floor(result, 1)
        remainder = result - base
        
        'round to the nearest quarter
        Select Case (remainder)
            Case 0 To 0.12
                roundedTime = base
            Case 0.12 To 0.37
                roundedTime = base + 0.25
            Case 0.38 To 0.62
                roundedTime = base + 0.5
            Case 0.63 To 0.86
                roundedTime = base + 0.75
            Case Else
                roundedTime = base + 1
        End Select
        
        CalculateHours = roundedTime
    End Property
    
    ' calculate total time on site
    Public Property Get TotalServiceTime() As Integer
        TotalServiceTime = CalculateHours * mTechCount
    End Property
    Service class:
    Option Explicit
    
    Private mDescription As String
    Private oCrews As New Collection
    
    ' get / set service description
    Public Property Let Description(value As String)
        mDescription = value
    End Property
    Public Property Get Description() As String
        Description = mDescription
    End Property
    
    'get / set service crew
    Public Property Set Crews(value As cCrew)
        Dim Crew As New cCrew
        Set Crew = value
        oCrews.Add Crew
    End Property
    Public Property Get Crews() As Collection
        Set Crews = oCrews
    End Property
    
    Public Property Get FullServiceTime() As Single
        FullServiceTime = Range("Total_Hours").value
    End Property
    Thank you.

  2. #2
    Distinguished Lord of VBAX VBAX Grand Master Bob Phillips's Avatar
    Joined
    Apr 2005
    Posts
    25,453
    Location
    Bin the Set Crews property and add a function Add to cService

    Public Function Add(ByRef crew As cCrew)
        oCrews.Add crew, crew.Code
    End Function
    Then add the crew with

            Service.Add crew
    ____________________________________________
    Nihil simul inventum est et perfectum

    Abusus non tollit usum

    Last night I dreamed of a small consolation enjoyed only by the blind: Nobody knows the trouble I've not seen!
    James Thurber

  3. #3
    Works great, thank you!

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •