Ja, das ist möglich, aber vielleicht sehr viel für jemanden, der sich mit der Makroprogrammierung nicht auskennt. Die Komplexität wird etwas erhöht, weil Sie versuchen, gleichzeitig mit Excel und Projekten zu arbeiten. Dies ist jedoch vollständig machbar.
Es gibt keine APIs, die diese Schrumpfung bereits für Sie ausführen, aber MS Office verfügt über ein sehr reichhaltiges Document Object-Modell . Eine der besten Ressourcen, die Sie haben, ist der F1-Schlüssel. Versuchen Sie, in sehr kleinen Schritten aufzuzeichnen, was Sie möchten, und ändern Sie den Code, um ihn entsprechend generisch zu machen. Mit dem Rekorder können Sie die Objekte, Methoden und Eigenschaften ermitteln, mit denen Sie sich vertraut machen möchten.
Das Hauptarbeitspferdobjekt in Project ist das Taskobjekt . In Excel ist es das Range- Objekt. Sie müssen sich mit beiden vertraut machen, um das zu tun, was Sie wollen. Eine grobe Gliederung:
- Beginnen Sie mit Ihren ausgewählten Aufgaben im Projekt
- Für jede Aufgabe in Ihrer Auswahl:
a. Erstellen Sie eine neue Arbeitsmappe.
B. Holen Sie sich die gewünschten Werte aus Projekt
c. Schreiben Sie sie in den entsprechenden Bereich in Excel
Ich bin in Bezug auf den Schablonen-Teil Ihrer Frage etwas unscharf, deswegen haben Sie sich im Beispiel unten keine Gedanken gemacht, aber Sie können ein benanntes Sortiment in Excel definieren. Damit diese Namen in Ihrer Vorlage leben können, können Sie denselben Namen sogar auf mehreren Registerkarten (Registerkarten) wiederverwenden, wenn Sie möchten, und diese Namen verwenden, um zu definieren, wo Ihre Daten gespeichert werden sollen. Ich habe zum Beispiel die Aufgaben-ID geschrieben Range("A2")
, aber es hätte auch passieren könnenRange("Project_ID")
Ich würde auch empfehlen, dies in mehrere Funktionen aufzuteilen, eine für jeden Schritt in Ihrer Gliederung. Hier ist ein sehr grundlegender Ausgangspunkt. Um dieses Beispiel verwenden zu können, müssen Sie in Project einen Verweis auf die Excel-Objektdefinitionen erstellen. Öffnen Sie die Projekt-VBA-IDE und wählen Sie Extras -> Referenzen . Suchen Sie den Eintrag Microsoft Excel XX.0 Object Library, und aktivieren Sie das Kontrollkästchen. "XX" ist Ihre Excel-Version. Meins ist 10, Ihr miight unterschiedlich sein. Jeder, der dies verwendet, müsste dieselbe Auswahl treffen.
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