Проверьте доступность ресурса перед применением к задаче проекта VBA MS Project - PullRequest
0 голосов
/ 15 октября 2018

Я использую VBA для назначения ресурсов (комнат) задачам в MS Project в зависимости от места проведения сеанса, емкости комнаты и доступности комнаты.Я застрял в части доступности номера.Я предполагаю, что должен быть какой-то способ подключиться к свойствам доступности объекта Resource, чтобы быстро определить, применен ли Resource к другой задаче.

Cheers

Sub Allocate_Rooms()
'Allocating a Resource (Room) to a Task based on the location of the 
facility, room capacity and availability
Dim T As Task
Dim R As Resource

For Each T In ActiveProject.Tasks
i = 0

If Left(T.Name, 1) <> "M" Then 'Checks to see if the task is a valid Module session
    GoTo SkipT
End If

For Each R In ActiveProject.Resources
    If Left(R.Name, 2) <> "R-" Then 'Skips resources that are not rooms
        GoTo SkipR
    End If

    If T.Text5 = R.Text3 Then 'The Resource (Room) is in the same facility as the sesssion that is being held
        If T.Text1 <= R.Text1 Then 'Check the number of users is less than or equal to the Room Capacity
            'If ??????
                'Something in here to check the availability of the Resource (Room).  This would be based on the set calendar
                'of the Resource and also would check if the room has been allocated to another Task in the Project

                T.ResourceNames = R.Name 'Assign the resource to the task

            Goto SkipT
             'End if
        End If
    End If

SkipR:
Next R 'next Resource
SkipT:

Next T 'Next Task

End Sub

1 Ответ

0 голосов
/ 15 октября 2018

Используйте метод TimeScaleData объекта Resource для возврата объекта TimeScaleValues ​​, который можно использовать для определения объема работы, уже назначенного этому ресурсу на данный период времени (например,продолжительность задания).Например:

Dim tsvs As TimeScaleValues
Set tsvs = R.TimeScaleData(T.Start, T.Finish, pjResourceTimescaledWork, pjTimescaleYears)
If tsvs(1).Value = 0 Then
    T.ResourceNames = R.Name
    ' exit loop now that room is assigned
End If

Обратите внимание, что здесь используется единица измерения pjTimescaleYears, поэтому вся работа для ресурса в течение периода выполнения задачи сводится к одному значению (если задача не охватывает более одного года.).Если бы вы использовали значение по умолчанию pjTimescaleDays, а задание занимало более одного дня, tsvs содержало бы более одного элемента, который нужно было бы проверить.

...