Ситуация : у нашей компании есть список открытых вопросов, который мы используем для отдельных частей во время испытаний / запуска программы. Программа имеет свой собственный документ Excel, и каждая часть имеет свою вкладку в этом документе для рабочего списка этой указанной c части. Недавно было предложено, чтобы мы отслеживали, как долго проблемы открыты, используя MS Project. Я могу взять информацию из нашей вкладки Excel и вручную скопировать ее в Project, чтобы показать, что мы хотим, и я могу сделать так, чтобы Project автоматически обновлял связанные источники, если это лист Excel 1: 1 для листа Project, но нам нужен только 1 лист Project в время, и они должны обновляться на основе открытой вкладки рабочей книги, поэтому ссылки меняются в зависимости от того, на какую часть мы смотрим.
Цель : я ищу макрос код для / или Excel, и для Project, который может быть запущен на основе одного щелчка, при котором ячейки ссылок в Excel копируются в Project.
Таким образом, пользователи откроют Excel и go на вкладке часть они хотят диаграмму в проекте. Затем они смогут нажать кнопку на этой вкладке, которая 1) открывает отформатированный файл проекта 2) выбирает определенные c ячейки на этой вкладке Excel для копирования в Project [например, в строках Excel BE60: BI60 будет копировать в строку 1 проекта, BE67: BI67 в строку 2 и т. д.]. Я могу заставить макрос открывать Project достаточно легко из Excel, но я не могу понять, с чего начать копирование источника ссылок на основе текущей вкладки.
Ниже приведен код решения, с которым я работал:
Sub UpdateProject()
Dim projApp As MSProject.Application
On Error Resume Next
Set projApp = GetObject(, "MSProject.Application")
If projApp Is Nothing Then
Set projApp = New MSProject.Application
End If
projApp.Visible = True
On Error GoTo 0
projApp.FileOpenEx "C:\[File Location]\[File Name].mpp"
Dim wst As Worksheet
Set wst = ActiveSheet
Dim rng As Range
Set rng = wst.Range("D60")
Dim lRow As Long
lRow = rng.Row
Do While lRow >= 60 And rng.Column = 4 And IsDate(wst.Cells(lRow, 7).Value)
Dim taskName As String
taskName = wst.Cells(lRow, 57) ' column BE
If Len(taskName) > 0 Then
' find task in project schedule
projApp.Find Field:="Name", Test:="equals", Value:=taskName
Dim t As MSProject.Task
If projApp.ActiveCell = taskName Then
Set t = projApp.ActiveCell.Task
Else ' did not find the task, so add it
Set t = projApp.ActiveProject.Tasks.Add(taskName)
End If
t.Start = wst.Cells(lRow, 59).Value ' column BG
t.Finish = wst.Cells(lRow, 60).Value ' column BH
t.ResourceNames = wst.Cells(lRow, 61).Value ' column BI
End If
' find next trial
Set rng = wst.UsedRange.Find(What:="Trial Date", After:=rng, SearchOrder:=xlByRows, SearchDirection:=xlNext)
lRow = rng.Row
Loop
End Sub