Ich versuche, ein Projekt zu schreiben, das Organigramm in PowerPoint basierend auf Tabelle in Excel erstellen wird. Also, ich habe eine einfache Tabelle in Excel mit zwei Spalten: Employee und Reports_to. So etwas wie dieseErstellen von Organigramm in PowerPoint basierend auf Excel
Employee Reports_to
Joe Eva
Jane Ann
John Eva
Eva Olaf
Ann Olaf
Bill Ann
Gilbert Ann
Olaf
Dann habe ich einfache Funktion alle Untergebenen für jeden Chef zu finden:
Function GetMinions(sMaster As String) As Collection
Dim rngEmp As Range, cl As Range
Dim collMinions As New Collection
With ThisWorkbook.Worksheets(1)
Set rngEmp = Range(.Range("A2"), .Range("A" & .Rows.Count).End(xlUp))
End With
For Each cl In rngEmp
If cl.Offset(, 1) = sMaster Then collMinions.Add cl.Value
Next cl
Set GetMinions = collMinions
End Function
Ich habe auch Code, der mit einer Folie und ein Organigramm in dieser Folie neue Powerpoint-Präsentation ist die Schaffung . Ich lösche alle Knoten in diesem Organigramm mit Ausnahme des Stammknotens. All das funktioniert perfekt, also füge ich den Code nicht ein. Und hier ist mein Arbeitspferd, das Makro, das Organigramm von unten nach oben baut.
Sub PopulateOrgChart(nd As Object, str As String)
Dim Minions As Collection
Dim hasMinions As New Collection
Dim it As Object
Dim childNd As Object
Dim i As Integer
Set Minions = GetMinions(str)
For i = 1 To Minions.Count
Set childNd = nd.Nodes.Add
Debug.Print nd.Level & " " & childNd.Level
childNd.TextFrame2.TextRange.Text = Minions.item(i)
If GetMinions(Minions.item(i)).Count > 0 Then hasMinions.Add childNd
Next i
For i = 1 To hasMinions.Count
PopulateOrgChart hasMinions(i), hasMinions(i).TextFrame2.TextRange.Text
Next i
End Sub
Ich betreibe dieses Makro mit Argumenten (SMR definiert smartart Objekt):
PopulateOrgChart smr.Nodes(1), "Olaf"
Und das Ergebnis ist:
Wie Sie sehen können, Eva und Ann sind beide an der richtigen Stelle als Manager mittleren Ranges, alle anderen scheinen in der dritten Reihe OK zu sein, außer Joe, der knapp unter dem Top-Manager platziert ist. Ich habe, um herauszufinden versucht, was los ist, und platziert diese Zeile nach dem Kind Knoten Einstellung:
Debug.Print nd.Level & " " & childNd.Level
und mein Direkt-Fenster zeigen die gleiche Geschichte wie mein Organigramm:
1 2
1 2
2 2
2 3
2 3
2 3
2 3
beim Hinzufügen von Knoten für den ersten Untergebenen von Eva gibt es dem Kind das gleiche Niveau wie für den Elternteil. Ich bin ziemlich verwirrt, da das Makro für alle anderen Mitarbeiter wie erwartet funktioniert. Was ich falsch mache und wie kann ich Joe dem Eva-Knoten unterordnen, nicht der Wurzel?