2017-12-11 4 views
0

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:

enter image description here

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?

Antwort

0

Keine Antwort nach 21 Stunden. Also war ich gezwungen, einen Kreisverkehr zu finden. Nicht sehr elegant, aber es funktioniert. An die Stelle der Linie

Set childNd = nd.Nodes.Add 

I-Code eingefügt haben:

Set childNd = nd.Nodes.Add 
If nd.Level = childNd.Level Then 
    Set tempNd = childNd 
    Set childNd = nd.Nodes.Add 
    tempNd.Delete 
End If 

Trotzdem verstehe ich nicht, warum ersten Knoten hinzugefügt Knoten ein Geschwister statt Kind ist.

Verwandte Themen