Excel Table to Powerpoint Slides: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Thomas (Diskussion | Beiträge) (→PowerPoint Makro: Neues Makro erzeugt das Layout) |
Thomas (Diskussion | Beiträge) |
||
| Zeile 7: | Zeile 7: | ||
* Erstellen einer neuen PowerPoint-Präsentation | * Erstellen einer neuen PowerPoint-Präsentation | ||
* Das Makro mit Hilfe der Entwicklertools in die Präsentation einfügen und starten. | |||
* Das Makro mit Hilfe der Entwicklertools in die Präsentation einfügen und starten. | ** Makro CreateLayoutFromExcel ausführen, um ein CustomLayout aus der ersten Tabelle der Excel-Datei zu erzeugen | ||
** Makro CreateSlidesFromExcel ausführen, um die Slides aus der ersten Tabelle der Excel-Dateizu erstellen | |||
* Anschließend kann die Layout-Folie verschönert werden. Die Änderungen der Layout-Folie werden für alle Folien übernommen, so dass die Folien einheitlich gestaltet sind. | * Anschließend kann die Layout-Folie verschönert werden. Die Änderungen der Layout-Folie werden für alle Folien übernommen, so dass die Folien einheitlich gestaltet sind. | ||
* Bei Änderungen der Excel-Tabelle | * Bei Änderungen der Excel-Tabelle müssen noch alle Folien gelöscht und mit dem Makro neu erstellt werden. | ||
== Musterfolie == | == Musterfolie == | ||
Version vom 8. März 2018, 11:38 Uhr
Das folgende Makro erstellt aus einer Excel-Tabelle zeilenweise Folien in PowerPoint.
Aufgabe: Aus den Zeilen einer Excel-Tabelle sollen einzelne Folien einer PowerPoint Präsentation erstellt werden.
Vorgehen
- Erstellen einer neuen PowerPoint-Präsentation
- Das Makro mit Hilfe der Entwicklertools in die Präsentation einfügen und starten.
- Makro CreateLayoutFromExcel ausführen, um ein CustomLayout aus der ersten Tabelle der Excel-Datei zu erzeugen
- Makro CreateSlidesFromExcel ausführen, um die Slides aus der ersten Tabelle der Excel-Dateizu erstellen
- Anschließend kann die Layout-Folie verschönert werden. Die Änderungen der Layout-Folie werden für alle Folien übernommen, so dass die Folien einheitlich gestaltet sind.
- Bei Änderungen der Excel-Tabelle müssen noch alle Folien gelöscht und mit dem Makro neu erstellt werden.
Musterfolie
PowerPoint Makro
Option Explicit
' Optionen und Konstanten
' MS Office 2010 Makro
' (c) 2018 Thomas Arend
' ---
' Unter "Extras - Verweise" muss die Microsoft Excel 14.0 Object Library ausgewählt werden
' Name of the CustomLayout
Const LayoutName As String = "ExcelColumn"
' Row which contains the title of the columns
' Normally this should be row 1
Const offsetRow As Long = 1
'
' Select Excel file
'
Private Function FileSelected() As String
Dim MyFile As FileDialog
Set MyFile = Application.FileDialog(msoFileDialogOpen)
With MyFile
.Title = "Choose File"
.AllowMultiSelect = False
If .Show <> -1 Then
Exit Function
End If
FileSelected = .SelectedItems(1)
End With
End Function
'
' Get a CustomLayout by name.
' There is no builtin function to do this.
'
Private Function getLayoutByName(LOName As String) As CustomLayout
Dim tmpLayout As CustomLayout
Dim i As Long
Set tmpLayout = ActivePresentation.SlideMaster.CustomLayouts(ppLayoutBlank)
For i = 1 To ActivePresentation.SlideMaster.CustomLayouts.count
If ActivePresentation.SlideMaster.CustomLayouts(i).Name = LOName Then
Set tmpLayout = ActivePresentation.SlideMaster.CustomLayouts(i)
End If
Next
Set getLayoutByName = tmpLayout
End Function
'
' Add a Custom Layout
' The name is in the Constant LayoutName
'
Private Function AddCustomLayout() As CustomLayout
Dim MyLayout As CustomLayout
Dim i As Long
Set MyLayout = ActivePresentation.SlideMaster.CustomLayouts.Add(1)
MyLayout.Name = LayoutName
MyLayout.Preserved = True
Set AddCustomLayout = MyLayout
End Function
'
' Add Labels to the Custom Layout
' The title of the labels is in the row offsetRow of the table
' Assumes that column 1 is the first used column
'
Private Sub AddMyLables(MyLayout As CustomLayout, MyWorkSheet As Excel.Worksheet, Optional ByVal offsetRow As Long = 1)
Dim i As Long
Dim lastColumn As Long
' Objekte für Labels
With MyWorkSheet.UsedRange
lastColumn = .Columns(.Columns.count).Column
End With
For i = 1 To lastColumn
With MyLayout.Shapes.AddShape(Type:=msoShapeRectangle, Left:=50, Top:=(i + 2) * 40, Width:=160, Height:=32)
.Fill.BackColor.RGB = RGB(160, 240, 255)
.TextFrame.TextRange.Font.Size = 24
.TextFrame.TextRange.ParagraphFormat.Bullet.Visible = msoFalse
.TextFrame.TextRange.Text = MyWorkSheet.Cells(offsetRow, i).Text
End With
Next
End Sub
'
' Add placeholders for the number of used columns in table
' Assumes that column 1 is the first used column
'
Private Sub AddMyPlaceholders(MyLayout As CustomLayout, MyWorkSheet As Excel.Worksheet)
Dim i As Long
Dim lastColumn As Long
With MyWorkSheet.UsedRange
lastColumn = .Columns(.Columns.count).Column
End With
' Add Placeholders für Werte
For i = 1 To lastColumn
With MyLayout.Shapes.AddPlaceholder(Type:=ppPlaceholderBody, Left:=250, Top:=(i + 2) * 40, Width:=160, Height:=32)
.Fill.BackColor.RGB = RGB(240, 240, 240)
.TextFrame.TextRange.Font.Size = 24
.TextFrame.TextRange.ParagraphFormat.Bullet.Visible = msoFalse
.TextFrame.TextRange.Text = "Placeholder " & Str(i)
End With
Next
End Sub
'
' Create a cutom layout for the first sheet in an Excel file.
'
Sub CreateLayoutFormExcel()
Dim xlAppl As Excel.Application
Dim xlWBook As Excel.Workbook
Dim xlWSheet As Excel.Worksheet
Dim pptLayout As CustomLayout
' Numemr der Überschrifetenzeile
' Create Excel application object
Set xlAppl = CreateObject("Excel.Application")
'Open the Excel workbook. Get file with dialog
Set xlWBook = xlAppl.Workbooks.Open(FileSelected, True)
'Grab the first Worksheet in the Workbook
Set xlWSheet = xlWBook.Worksheets(1)
' 1. Create as Custom Lauyout
' 2. Create Labels on the Layout
' 3. Create Placeholders on the Layout
Set pptLayout = AddCustomLayout()
Call AddMyLables(pptLayout, xlWSheet, offsetRow)
Call AddMyPlaceholders(pptLayout, xlWSheet)
' Close Excel
Set xlWSheet = Nothing
xlWBook.Close savechanges:=False
xlAppl.Quit
Set xlAppl = Nothing
End Sub
'
' Create all slides form the used rows of the table
' Assumes that the row after the title row (offsetRow) is the first datat row.
' Assumes that the layout has a placeholder number 1 for the title
Sub CreateSlidesFormExcel()
Dim xlAppl As Excel.Application
Dim xlWBook As Excel.Workbook
Dim xlWSheet As Excel.Worksheet
Dim pptSlide As Slide
Dim pptLayout As CustomLayout
Dim i, j As Long
Dim lastRow, lastColumn As Long
' Create Excel application object
Set xlAppl = CreateObject("Excel.Application")
' Open the Excel workbook. Change the filename here.
Set xlWBook = xlAppl.Workbooks.Open(FileSelected, True)
' Grab the first Worksheet in the Workbook
' Change parameter 1 to number of the sheet an other sheet should be used
'
Set xlWSheet = xlWBook.Worksheets(1)
Set pptLayout = getLayoutByName(LayoutName)
' Find last used row and column
With xlWSheet.UsedRange
lastRow = .Row - 1 + .Rows.count
lastColumn = .Columns(.Columns.count).Column
End With
' Create one slide for each row and fill placeholders with values of the corresponding row
For i = lastRow To offsetRow + 1 Step -1
' Add a new Slide at the start of the presenteion when LgNr not empty
Set pptSlide = ActivePresentation.Slides.AddSlide(1, pptLayout)
' Fill new slide with labels and values
With pptSlide
' Insert values from Excel sheet
.Shapes(1).TextFrame.TextRange.Text = xlWSheet.Cells(i, 2).Text & " - " & xlWSheet.Cells(i, 3).Text
For j = 1 To lastColumn
.Shapes(j + 1).TextFrame.TextRange.Text = xlWSheet.Cells(i, j).Text
Next
End With
Next
Set xlWSheet = Nothing
xlWBook.Close savechanges:=False
xlAppl.Quit
Set xlAppl = Nothing
End Sub
'
' Helping procedure to see which placeholder has wich number
'
Sub NameShapesInSlide()
Dim j As Long
With ActivePresentation.Slides(1)
j = 1
For Each s In .Shapes.Placeholders
s.TextFrame.TextRange.Text = j
j = j + 1
Next
End With
End Sub
