Доброе утро,
Я пытаюсь настроить автоматизацию VBA для циклического просмотра каждого имени ресурса и распечатать обзор всего проекта, использующего этот ресурс, на одном листе (так что у моих ребят есть персональный список задач, которые им нужно делать).
Я могу получить значение различных ресурсов, назначенных проекту, и управлять представлением, используя:
ResourceName = ActiveProject.Resources(i).Name
ViewApplyEx Name: = "&Gantt Chart", ApplyTo:=0
и я могу получить доступ к фильтру, используя:
FilterApply Name: = "Using Resource..."
где я застреваю, так это то, что я не могу фактически установить значение ресурса, которое я хочу. Я попытался установить Value1:= "SoAndSo", но это, похоже, не работает (всплывающее окно, в котором я установил значение, не закрывается).
У меня возникает аналогичная проблема, когда я пытаюсь распечатать окно. Я могу открыть окно печати, но не могу зарегистрировать фактическую кнопку, чтобы принтер получил задание.
Я уверен, что это небольшая проблема с синтаксисом, но я был бы признателен за любую помощь. Спасибо!
Да, представление ресурсов — прекрасный инструмент. В настоящее время я вручную устанавливаю вид на человека, а затем перехожу к печати страницы. Однако мне нужен один макрос, который циклически перебирает все ресурсы за один раз (выбрать ресурс, распечатать, выбрать следующий ресурс, распечатать и т. д.). Я могу настроить фильтр на «по ресурсу» в VBA, но, похоже, я не могу установить имя ресурса, который хочу использовать.
Гордон, если вы ищете список задач (назначений) для каждого ресурса, я бы установил внешний цикл для обхода всех ресурсов. Внутренний цикл найдет все назначения для этого ресурса и установит поле флага для каждого назначения и ресурса. Следуйте этому с помощью фильтра в поле «Флаг» и распечатайте. Очищайте поле Flag каждый раз во внешнем цикле ресурсов.





Этот макрос перебирает ресурсы, устанавливает фильтр и затем печатает. Легко создать новый временный фильтр с помощью FilterEdit , а затем удалить его с помощью OrganizerDeleteItem . Кроме того, для метода FilePrint требуется хотя бы один параметр, иначе без параметров будет представлено диалоговое окно.
Sub PrintTasksForEachResource()
Dim r As Resource
For Each r In ActiveProject.Resources
FilterEdit Name: = "tempRes", TaskFilter:=True, Create:=True _
, OverwriteExisting:=True, FieldName: = "Resource Names" _
, Test: = "contains", Value:=r.Name _
, ShowSummaryTasks:=True
FilterApply "tempRes"
FilePrint Color:=True
Next r
FilterClear
OrganizerDeleteItem pjFilters, ActiveProject.Name, "tempres"
End Sub
Итак, я следую логике, но остается вопрос: зачем мне создавать то, что выглядит как настраиваемый фильтр, который эффективно делает то же самое, что и встроенный фильтр? Это просто «Проект недостаточно умен, чтобы позволить мне определить имя ресурса в VBA для встроенной функции, и мне нужно сделать обходной путь»? Рад принять странный танец с решением, но любопытно узнать об ограничении. Спасибо за совет!
@GordonSmith Фильтр «Использование ресурса ...» - это интерактивный фильтр, он предназначен для того, чтобы пользователь мог быстро фильтровать различные ресурсы без необходимости создавать несколько жестко запрограммированных фильтров. Дело не в том, что Project недостаточно умен, а в том, что цель этого фильтра не соответствует тому, как вы хотите его использовать, поэтому создание временного фильтра времени выполнения является лучшим решением.
Вот реализация моего комментария о внешнем цикле (ресурс) и внутреннем цикле (назначения), которые эффективно создают список задач ресурса. Включите любые поля ресурсов/назначений, которые вам нужны. Я предлагаю вам вытащить данные временной шкалы полностью вправо перед запуском макроса, чтобы они не отображались в распечатке. Удалите параметр «предварительный просмотр» в операторе печати, когда будете готовы к печати.
Dim r As Resource
Dim a As Assignment
For Each r In ActiveProject.Resources
r.Flag1 = True
For Each a In r.Assignments
a.Flag1 = True
Next a
FilterEdit Name: = "ResAss", taskfilter:=False, create:=True, overwriteexisting:=True, FieldName: = "Flag1", _
test: = "equals", Value: = "yes", ShowInMenu:=False, showsummarytasks:=False
FilterApply Name: = "ResAss"
r.Flag1 = False
For Each a In r.Assignments
a.Flag1 = False
Next a
FilePrint preview:=True
FilterClear
Next r
End Sub
Гордон, пробовали ли вы использовать представление «Использование ресурсов», а затем фильтровать по полю «Имя»?