AW: sVerweis in VBA in PP auf Datein in Excel Datei
13.06.2017 21:37:41
fcs
Hallo Niklas,
wie bereits von mmat geschrieben muss du im PowerPoint-Makro erst die Excel-Umgebung kreieren/aufrufen bevor du per VBA in Excel Objekte bearbeiten kannst.
Für die Suche nach Einträgen und das Auslesen von Daten ist die Funktion "Match" unter VBA einfacher zu handhaben als "vLookup"-insbesondere was die Behandlung von Fehlern angeht, wenn der Suchbegriff nicht vorhanden ist.
LG
Franz
'Bearbeitet unter PowerPoint 2010 - MS Office Professional 2010
Sub vba_sverweis()
Dim objAppExcel As Object ' Excel.Application
Dim wb As Object ' Excel.Workbook
Dim wks As Object 'Excel.Worksheet
Dim Folie As Slide, Textfeld As Shape
Dim varZeile, varWert As Variant, varSuch As Variant
Dim bolExcelOpen As Boolean
Dim strFile_xl As String, strSheet_xl As String
Dim strMsgTitel As String
On Error GoTo Fehler
strFile_xl = "C:\MA\Watchlist_DUMMY.xlsx"
strSheet_xl = "Mitarbeiter Stand 01.01.2017"
strMsgTitel = "Excel-Daten holen" 'Titel-Zeile für Msgbox-Anzeigen
'Excel-Anwendung zuweisen - bei Fehler Excel starten
bolExcelOpen = True
'auf bereits geöffnete Ecxel-Anwendung zugreifen
Set objAppExcel = VBA.GetObject(, "Excel.Application")
'Datei-Öffnen und Blatt festlegen
Set wb = objAppExcel.Workbooks.Open(FileName:=strFile_xl, ReadOnly:=True)
Set wks = wb.Worksheets(strSheet_xl) 'ggf. Index-Nr. 1 statt Blattname verwenden
Set Folie = ActivePresentation.Slides(1)
'Suchbegriff einlesen
varSuch = Folie.Shapes("Text Placeholder 8").TextFrame.TextRange.Text
'Zeile mit Suchbegriff in Spalte E des Tabellenblatts suchen
varZeile = objAppExcel.Match(varSuch, wks.Range("E:E"), 0)
If IsError(varZeile) Then
MsgBox "Name """ & varSuch & """ nicht gefunden!", vbOKOnly, strMsgTitel
Else
'Werte aus Exceltabellenblatt einlesen und in den Texfeldern der Folie eintragen
varWert = wks.Cells(varZeile, 6).Text 'Wert aus Spalte F
Set Textfeld = Folie.Shapes("Text Placeholder 6")
Textfeld.TextFrame.TextRange.Text = varWert
varWert = wks.Cells(varZeile, 7).Text'Wert aus Spalte G
Folie.Shapes("Text Placeholder 7").TextFrame.TextRange.Text = varWert
'....usw.
End If
'Exceldatei schliessen und ggf. die Excelanwendung beenden
wb.Close savechanges:=False
If bolExcelOpen = False Then
objAppExcel.Quit
End If
Set wks = Nothing
Set wb = Nothing
Set objAppExcel = Nothing
'Fehlerbhandlung
Fehler:
With Err
Select Case .Number
Case 0 'alles OK
Case 9 'Element fehlt in Liste
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description & vbLf & vbLf _
& "Blatt """ & strSheet_xl & """ nicht in Excel-Datei vorhanden", _
vbOKOnly + vbCritical, strMsgTitel
Case 429 'Active-X-Objekt-Erstellung nicht möglich (Excel ist noch nicht gestartet)
Set objAppExcel = VBA.CreateObject("Excel.Application")
bolExcelOpen = False
objAppExcel.Visible = True 'ggf. auf False ändern wenn alles funktioniert
Resume Next
Case 1004 'Element fehlt in Liste
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, _
vbOKOnly + vbCritical, strMsgTitel
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, _
vbOKOnly + vbCritical, strMsgTitel
End Select
End With
If Not objAppExcel Is Nothing Then
If Not wb Is Nothing Then
wb.Close savechanges:=False
End If
If objAppExcel.Visible = False Then
objAppExcel.Quit
End If
End If
End Sub