Erstellen Sie 1 Tabellenkalkulation pro Zeile mit MS Project

1108
bethlakshmi

Ich möchte ein Skript erstellen, das einen Satz Tabellenkalkulationen erstellt, 1 für jede ausgewählte Zeile in einem MS-Projektzeitplan. Dies ist komplexer als das, was ich bei der "Exportfunktion" gesehen habe, da die Exportfunktion Ihre MS-Project-Datei wie eine Tabelle behandelt und eine Konvertierung von Tabelle in Tabelle vornimmt.

Folgendes möchte ich von der Funktionalität erwarten:

  • eine Reihe von Aufgaben in MS-Project auswählen und die Funktion auslösen können
  • Wenn Sie möchten, dass die Funktion 3-5 ausgewählte Elemente aus den Aufgaben nimmt und an einer bestimmten Stelle in einer Excel-Tabelle ablegt.
  • Im Idealfall würde ich ihm eine Schablonen-Kalkulationstabelle geben, wobei die Zeichenfolgen die Stellen darstellen, an denen die Daten gespeichert werden sollen.
  • Die Tabelle enthält mehrere Registerkarten, und ich möchte Daten auf mehreren Registerkarten festlegen.
  • Jede Aufgabe erhält eine neue Tabelle in einer eigenen Datei.

Ich bin froh, eine Funktion dafür schreiben zu können, aber ich kenne keine MS-Makro-Programmiersprachen oder Tricks. Ich kann den Pseudocode, den ich möchte, leicht visualisieren. Ich weiß nur nicht, ob es APIs gibt, die tun, was ich will.

Hat jemand eine Überlegung, ob das, was ich will, möglich ist, und wenn ja, wie er am besten angesprochen wird. Bitte geben Sie, falls möglich, Verweise auf Lernressourcen an.

1

1 Antwort auf die Frage

1
DaveParillo

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:

  1. Beginnen Sie mit Ihren ausgewählten Aufgaben im Projekt
  2. 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