Excelの表に基づいてPowerPointで組織図を作成するプロジェクトを作成しようとしています。だから、Excelの2つの列、EmployeeとReports_toという単純なテーブルがあります。私も、このスライド内の1枚のスライドと1、組織図と新しいPowerPointプレゼンテーションを作成しているコードを持ってExcelでのPowerPointでの組織図の作成
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
:その
Employee Reports_to
Joe Eva
Jane Ann
John Eva
Eva Olaf
Ann Olaf
Bill Ann
Gilbert Ann
Olaf
のようなものはその後、私はどんな上司のためのすべての部下を見つけるための簡単な機能を持っています。ルートノード以外のこの組織図のノードをすべて削除します。そのすべてが完璧なので、私はコードを貼り付けません。 ここに私の働く馬があり、組織図を作成するマクロがあります。
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
私は(SMRは、SmartArtグラフィックオブジェクトを定義している)の引数でこのマクロを実行しています:
PopulateOrgChart smr.Nodes(1), "Olaf"
そして結果は次のとおりです。
あなたが見ることができるように、エヴァとアンはどちらも中位のマネージャーとして適切な場所にあり、他のすべてのマネージャーはトップマネージャーの直下に配置されているJoeを除いて3行目でOKと思われます。私は何が起こっているかを把握しようとした子ノードを設定した後、この行を置いています
Debug.Print nd.Level & " " & childNd.Level
と私のイミディエイトウィンドウには、私の組織図と同じ話を示します。
1 2
1 2
2 2
2 3
2 3
2 3
2 3
ノードを追加するときEvaの最初の部下のために、それは子供に親と同じレベルを与える。マクロが他のすべての従業員にとって期待通りに機能するので、私はかなり混乱しています。私が間違ってやっていることは、どのようにしてJoeをルートにではなくEvaノードに従属させることができるのでしょうか?