Class 在vba中合并类?

Class 在vba中合并类?,class,vba,Class,Vba,我在寻找我的程序的正确结构时遇到了一个问题,我试图用类来解决它,但没有成功 我为患者设置了一个班级,每个患者都有以下内容: 名字 操作 外科医生 手术时间 然后每个外科医生应该有一个每天的时间表 因此,我正在考虑使用另一个类作为每日日程安排,它应该具有: 一天 总持续时间 我的想法有些不对劲,我正在努力理解我该怎么做 1) 我的结构适合我想做的事情吗 2) 我如何检查外科医生是否有计划的每日时间表,如果他没有,然后将患者添加到他的时间表 任何帮助都将不胜感激 谢谢, 乔治 班级病人 课

我在寻找我的程序的正确结构时遇到了一个问题,我试图用类来解决它,但没有成功

我为患者设置了一个班级,每个患者都有以下内容:

  • 名字
  • 操作
  • 外科医生
  • 手术时间
然后每个外科医生应该有一个每天的时间表

因此,我正在考虑使用另一个类作为每日日程安排,它应该具有:

  • 一天
  • 总持续时间
我的想法有些不对劲,我正在努力理解我该怎么做

1) 我的结构适合我想做的事情吗

2) 我如何检查外科医生是否有计划的每日时间表,如果他没有,然后将患者添加到他的时间表

任何帮助都将不胜感激

谢谢, 乔治


班级病人 课程表 Test Sub正在计算总持续时间,但我无法根据天数列出它们
一种解决方案是拥有外科医生对象集合和患者对象集合。每个患者都有一名外科医生作为财产,每个外科医生都有一组患者

从中,您可以了解属于外科医生的所有患者的总手术时间

诀窍是了解对象之间的关系-在这种情况下,每个患者有一个外科医生,每个外科医生可以有多个患者。这在逻辑上导致了以下结构:

病人 外科医生 测试程序
+1-好问题。也许你可以研究类链接来实现这一点。我尝试过,但它并没有帮助我理解如何解决我的问题。
Private mstrName As String
Private mstrOperationDescription As String
Private mlngSurgeon As Long
Private mdblOpDuration As Double


Public Property Get Name() As String
    Name = mstrName
End Property

Public Property Get OperationDescription() As String
    OperationDescription = mstrOperationDescription
End Property

Public Property Get Surgeon() As Long
    Surgeon = mlngSurgeon
End Property

Public Property Get OpDuration() As Double
    OpDuration = mdblOpDuration
End Property
Private mlngDay As Long
Private mdblTotalDuration As Double


Public Property Get Day() As Long
    Day = mlngDay
End Property

Public Property Let Day(ByVal lDay As Long)
    mlngDay = lDay
End Property

Public Property Get TotalDuration() As Double
    TotalDuration = mdblTotalDuration
End Property

Public Property Let TotalDuration(ByVal dTotalDuration As Double)
    mdblTotalDuration = dTotalDuration
End Property
Public Sub Test()

Dim mydata As New clsData
Dim schedule1 As New clsSchedule
Dim schedule2 As New clsSchedule
Dim i As Integer

mydata.InputData

For i = 1 To mydata.PatientCount

    If mydata.patient(i).Surgeon = 1 Then

        schedule1.TotalDuration = schedule1.TotalDuration + mydata.patient(i).OpDuration

    Else
        schedule2.TotalDuration = schedule2.TotalDuration + mydata.patient(i).OpDuration

    End If
Next i

MsgBox "Total Duration is: " & schedule1.TotalDuration


End Sub
Private mstrName As String
Private mstrOperationDescription As String
Private mobjSurgeon As cSurgeon
Private mdblOpDuration As Double


Property Let Name(txt As String)
    mstrName = txt
End Property

Property Let OperationDescription(txt As String)
    mstrOperationDescription = txt
End Property

Property Let Surgeon(objSurgeon As cSurgeon)
    Set mobjSurgeon = objSurgeon
End Property

Property Let OpDuration(num As Double)
    mdblOpDuration = num
End Property
Property Get OpDuration() As Double
    OpDuration = mdblOpDuration
End Property
Private mstrName As String
Private mlngSurgeonId As Long
Private mcolPatients As Collection

Private Sub Class_Initialize()
    Set mcolPatients = New Collection
End Sub

Property Let Name(txt As String)
    mstrName = txt
End Property
Property Get Name() As String
    Name = mstrName
End Property

Property Let IdNumber(num As Long)
    mlngSurgeonId = num
End Property
Property Get IdNumber() As Long
    IdNumber = mlngSurgeonId
End Property

Sub AddPatient(objPatient As cPatient)
    mcolPatients.Add objPatient, objPatient.Name
End Sub

Function TotalHours() As Double
    
    Dim objPatient As cPatient
    For Each objPatient In mcolPatients
        TotalHours = TotalHours + objPatient.OpDuration
    Next objPatient
    
End Function
Sub CheckSurgeonHours()

    Dim colSurgeons As Collection
    Set colSurgeons = New Collection
    
    Dim colPatients As Collection
    Set colPatients = New Collection
    
    'Populate Surgeon and Patient collections from input data
    'This is the static data for each object, i.e. name, Id, operation type/duration
    
    Dim objSurgeon As cSurgeon
    For Each objSurgeon In colSurgeons
    
        Dim objPatient As cPatient
        For Each objPatient In colPatients
            
            objPatient.Surgeon = objSurgeon
            objSurgeon.AddPatient objPatient
        
        Next objPatient
    
        Debug.Print objSurgeon.TotalHours
    
    Next objSurgeon

End Sub