Sim, isso é possível, mas talvez muito para alguém novo em programação de macro. A complexidade é aumentada um pouco porque você está tentando trabalhar com o Excel e o projeto ao mesmo tempo - mas é tudo completamente capaz de fazer.
Não existem APIs que já o envolvam, mas o MS Office tem um muito rico Modelo de Objeto de Documento . Um dos melhores recursos que você tem é a sua chave 'F1'. Tente gravar o que você deseja fazer em etapas muito pequenas e modifique o código para torná-lo apropriadamente genérico. O gravador pode ajudá-lo a descobrir os objetos, métodos e propriedades que você precisará para se tornar familiar.
O principal objeto de laborioso no Project é o objeto Tarefa . No Excel, é o objeto Intervalo . Você precisará se tornar familiar com ambos para fazer o que quiser. Um esboço:
- Comece com suas tarefas selecionadas no projeto
- Para cada tarefa na sua seleção:
uma. Criar uma nova pasta de trabalho
b. Obtenha os valores desejados do projeto
c. escrevê-los para o intervalo apropriado no excel
Eu estou um pouco confuso na parte do modelo da sua pergunta, então não se preocupe com isso no exemplo abaixo, mas você pode definir uma coisa chamada Intervalo Nomeado no excel. Então, esses nomes podem viver em seu modelo, você pode até mesmo reutilizar o mesmo nome em várias planilhas (abas) se quiser e usar esses nomes para definir onde gravar seus dados de taks. Por exemplo, eu escrevi o id da tarefa para Range("A2")
, mas também poderia ter sido Range("Project_ID")
Além disso, recomendo dividir isso em várias funções, uma para cada etapa do esboço. Aqui está um ponto de partida básico muito muito . Para usar este exemplo, você precisará criar uma referência para as definições de objetos do Excel no Project. Abra o IDE do VBA do projeto e selecione Ferramentas - > Referências . Encontre a entrada Biblioteca de Objetos do Microsoft Excel XX.0 e marque a caixa de seleção. 'XX' é sua versão do excel. O meu é 10, o seu pode ser diferente. Qualquer um usando isso teria que fazer a mesma seleção.
Option Explicit
Sub CopyTasksToExcel()
Dim xlApp As Excel.Application
Dim t As Task
Dim wb As Excel.Workbook
Set xlApp = New Excel.Application
For Each t In ActiveSelection.Tasks
Set wb = CreateWorkbook(xlApp, t.Name, t.ID)
WriteSheetHeadingOn wb
WriteTaskOn t, wb
wb.Close SaveChanges:=True
Next t
xlApp.Quit
Set xlApp = Nothing
End Sub
Function CreateWorkbook(ByVal xlApp As Excel.Application, _
ByVal TaskName As String, _
ByVal TaskID As Long) As Excel.Workbook
Dim wb As Excel.Workbook
Dim fName As String
Set wb = xlApp.Workbooks.Add 'You could specify a template here
fName = ActiveProject.Path & "\" _
& TaskID & "-" _
& TaskName & ".xls"
wb.SaveAs FileName:=fName
Set CreateWorkbook = wb
Set wb = Nothing
End Function
'Writes date from a Project Task to the provided workbook.
Sub WriteTaskOn(ByVal prjTask As Task, _
ByVal xlWb As Excel.Workbook)
With xlWb.Sheets(1)
.Range("A2").Value = prjTask.ID
.Range("B2").Value = prjTask.Name
.Range("C2").Value = prjTask.Duration
End With
End Sub
Sub WriteSheetHeadingOn(ByVal xlWb As Excel.Workbook)
With xlWb.Sheets(1)
.Range("A1").Value = "ID"
.Range("B1").Value = "Name"
.Range("C1").Value = "Duration"
End With
End Sub