Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1916to1920
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA beliebige ppt über Explorer wählen

VBA beliebige ppt über Explorer wählen
19.01.2023 11:06:57
Hexler
Hallo,
ich möchte mit einem Makro eine beliebige Powerpointdatei aus dem Explorer von meinem Rechner wählen, um dann später im Verlauf Felder aus der Powerpoint in Excel zu laden und nutzte folgendes Makro, siehe unten. Ich mache das über eine Befehlsschaltfläche von einem Tabellenblatt aus.
Dabei hängt sich das Makro leider immer auf, ich weiß aber nicht warum? Also immer, wenn ich die Excel neu öffne, kommt der Fehler bei Klick auf die Schaltfläche wieder.
Folgendes habe ich herausgefunden:
Wenn man während es hängt den Task-Manager über „Alt-Strg-Entf“ aufruft, dann MS Powerpoint über „Task beenden“ beendet und den Taskmanager wieder schließt, geht das Visual-Basic Fehlermeldungsfenster auf, dort drücke ich „Debuggen“ und dann steht das Makro an der gelben Stelle (bei .Show). Ich schließe dann das Visual-Basic Fenster wieder mit OK.
So: Nun läuft das Makro immer durch und hängt sich nicht mehr auf. Kein Problem mehr. Bis ich wie gesagt excel schließe… dann hab ich wieder das gleiche Problem.
Meine Frage: Warum hängt sich das Makro immer beim ersten mal auf? Kann mir jemand eine Lösung bzw. einen anderen Vorschlag schicken, welcher gleich durchläuft/funktioniert.

Makro:
Sub Vorlage_Powerpoint_DB_Eintrag_erzeugen() 'Werte aus PowerPoint Textfeldern Excelfeldern in DB zuweisen

'1 - Variablen deklarieren
Dim wb As Workbook, wks As Worksheet
Dim objPowerpoint As New Powerpoint.Application
Dim Folie As Slide, Textfeld As Shape
Dim PfadExcel As String
Dim PfadPPT As String
'2 - Excelpfad (==> anpassen!)
PfadExcel = "C:\ANALYSE\Dateiname.xlsb" 'Exceldatei
'3 - Eine beliebige Powerpoint im Explorer auswählen und öffen ==> (Vorlage)
Set opjPPTApp = CreateObject("Powerpoint.Application")
Set dlg = opjPPTApp.FileDialog(Type:=msoFileDialogOpen)
With dlg
.FilterIndex = 2
.Show
.Execute
End With
opjPPTApp.Visible = True

PfadPPT = opjPPTApp.ActivePresentation.Path & "\" & opjPPTApp.ActivePresentation.Name
'4 - Ermitteln der Zeile wo eingefügt werden soll
… keine Probleme beim restlichen Makro

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA beliebige ppt über Explorer wählen
20.01.2023 08:24:18
ChrisL
Hi
Nur eine sehr vage Vermutung. Die Objektvariablen werden nicht geleert bzw. PPT nicht geschlossen.
cu Chris
ChatGPT:
Es gibt einige Gründe, warum man Objektvariablen in VBA Excel leeren sollte:
  • Speicherverwaltung: Wenn eine Objektvariable nicht mehr verwendet wird, sollte sie auf "Nothing" gesetzt werden, um den Speicher, den sie belegt, freizugeben. Dies kann insbesondere bei großen oder komplexen Arbeitsmappen wichtig sein, die viele Objekte verwenden.

  • Fehlervermeidung: Wenn eine Objektvariable nicht auf "Nothing" gesetzt wird, kann es vorkommen, dass sie noch auf ein Objekt verweist, das nicht mehr gültig ist. Dies kann zu Fehlern führen, wenn versucht wird, auf das Objekt zuzugreifen oder Methoden darauf aufzurufen.

  • Code-Wartbarkeit: Wenn Objektvariablen nicht ordnungsgemäß freigegeben werden, kann es schwierig sein, den Lebenszyklus von Objekten im Code nachzuvollziehen. Das Leeren von Objektvariablen erleichtert es, den Code zu verstehen und zu warten.

  • Es ist wichtig zu beachten, dass das Leeren von Objektvariablen ein guter Programmierstil ist, aber es gibt auch andere Möglichkeiten um Speicher freizugeben, wie z.B. das Verwenden von Objekt-Variablen mit "With" statement, welches automatisch die Objektvariablen zurücksetzt, nachdem sie verwendet wurden.
    Anzeige
    AW: VBA beliebige ppt über Explorer wählen
    25.01.2023 13:47:06
    Hexler
    Hi Chris,
    vielen Dank, dass du geantwortet hast.
    Ein bisschen verstehe ich das auch und muss wahrscheinlich irgendwo im Makro .nothing einfügen.
    Ich weiß aber leider nicht wo und wie genau.
    Kannst du mein Makro vielleicht erweitern oder erklären was ich tun muss.
    Das wäre super nett und hilfreich von dir.
    Vielen Dank vorab und viele Grüße

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige