Wenn Sie den folgenden Code, den Sie ganz ein interessantes Ergebnis zu erhalten (mit nur Powerpoint ausgeführt wird, schließen Sie alle Instanzen von Excel vor Betrieb):Powerpoint VBA - editting Spalte Name der Tabelle in Embedded Excel OLE-Objekt
'Optional - Include the "Microsoft Excel 16.0 Object Library"
Option Explicit
Public Sub test()
Dim oslide As slide
Set oslide = ActivePresentation.Slides.add(1, ppLayoutBlank)
Dim oshape As Shape
Set oshape = oslide.Shapes.AddOLEObject(30, 30, 50, 50, "Excel.Sheet")
oshape.OLEFormat.Object.Sheets(1).ListObjects.add(1) 'xlSrcRange
oshape.OLEFormat.Object.Sheets(1).Cells(1, 1) = "fewewq"
oshape.OLEFormat.Object.Close
End Sub
Das eingebettete Objekt wurde erfolgreich erstellt und die Tabelle ist mit den angegebenen Daten vorhanden. Wenn jedoch klicken Sie auf das eingebettete Objekt Sie folgende Fehlermeldung erhalten:
There isn't enough memory available to read Worksheet.
Dieses Objekt kann nicht mehr auf andere Weise zugegriffen werden kann, und die beschädigte Natur des Objekts bleibt auf Schließen/Öffnen des Dokuments und neu starten. Ich habe festgestellt, dass dieses Problem auf allen Systemen auftritt, auf denen ich getestet habe (PowerPoint/Excel 2016, Windows 7 X64).
Frage
Also meine Frage ist, kann jemand anderes dieses reproduzieren, und wenn ja, warum ist das passiert? Wenn Sie die Zeile "Cells (1, 1)" in "Cells (2, 1)" ändern, gibt es kein Problem. Es scheint, als ob die Bearbeitung des Kopfs der Tabelle ein bestimmtes Verhalten verursacht, das sich von der Bearbeitung der Zeilen unterscheidet andere Zellen.
Forschung
Es ist wirklich nicht darüber geschrieben zuzuteilen, die meisten Sachen nicht zu diesem speziellen Thema zusammen.
This post behauptet, dass es ein Problem mit zu vielen Schriften installiert ist (> 600). Getestet habe ich diese, ich habe nur 241 ...
installiert habenEs gibt eine ganze Menge Beiträge ohne Antworten (this, this, this und this) nicht dorthin gehen zuzuteilen.
Es gibt some posts, die völlig unabhängig sind, wieder nicht Zutot dort gehen.
ich den gleichen Code in MS Word getestet haben, scheint gut zu funktionieren scheint Ausgabe zu Powerpoint isoliert
Ich habe eine Version in Code versucht zu tun (gebrochene Objekt) und eine weitere von Hand (Arbeitsobjekt), speichert sie und vergleicht die binäre Ausgabe (of only the embedded objects). Das klingt cool, aber es gibt mir keinen besseren Einblick. Ich kann die eingebetteten Objekte nicht separat mit Excel öffnen, da die Objekte scheinbar in einer proprietary format gespeichert sind. Die zentrale Region von binär erscheint anders, aber ich bin mir nicht sicher, wie oder warum. Bis jetzt habe ich noch keine Möglichkeit gefunden, dies zu einer menschenlesbaren Information zu dekodieren.
After a significant delay and with proper attribution, ich habe dieses Kreuz auf the Microsoft forums gepostet. Vielleicht hat da jemand einen Einblick. Ich werde beide Posten aktiv pflegen. Wenn ich zu 100% davon überzeugt wäre, dass es sich um einen Fehler handelt, könnte ich sogar opening an issue here in Betracht ziehen.
Sie können dieses Problem vollständig vermeiden, indem Sie das OLEObject nie schließen, dies verursacht Probleme in 2010, besonders wenn es mit dem zugeordneten Diagrammverhalten kombiniert wird, erhalten Sie verwaiste Excel-Fenster angezeigt. Keine gute Benutzererfahrung.Ich denke, ich könnte ein verstecktes Excel-Fenster im Hintergrund öffnen und dann beenden, wenn ich mit der Arbeit an eingebetteten Dingen fertig bin ...
Ich verwende Version: Microsoft Office 365 ProPlus: Version 1705 (Build 8201.3103 Click-to -Run), aber ich habe auch das Problem in Microsoft Office Standard 2010, Version 14.0.7015.1000 (32-Bit) gesehen. Das Problem mit der Tabelle scheint auf allen anderen Office-Versionen gleich zu sein, obwohl ich mich frage, ob dies Auswirkungen auf die Office-Versionen vor 2010 hat.
Update 1
habe ich versucht, das Gleiche mit Diagrammen:
'Include the "Microsoft Excel 16.0 Object Library"
Option Explicit
Sub test()
Dim sld As slide
Dim shp As Shape
Dim pptWorkbook As Workbook
Set sld = ActivePresentation.Slides.Add(1, ppLayoutBlank)
Set shp = sld.Shapes.AddChart
Set pptWorkbook = shp.Chart.ChartData.Workbook
pptWorkbook.Close SaveChanges:=True
Set pptWorkbook = shp.Chart.ChartData.Workbook
pptWorkbook.Sheets(1).Cells(1, 2) = "fewewq"
Application.ActivePresentation.Save
pptWorkbook.Close SaveChanges:=True
End Sub
Wenn Sie den Kopfzeilenwert ändern können Sie keinen Zugriff mehr auf das eingebettete Objekt ("Cells (1, 2) "), wenn Sie einen anderen Wert (" Zellen (2, 1) ") ändern, läuft es gut. Ich nehme an, es ist das gleiche Problem, ich kann die Diagrammdaten nicht öffnen, nachdem dieser Code ausgeführt wurde. Wenn ich versuche, darauf zuzugreifen programmatisch bekomme ich folgende Fehlermeldung:
Run-time error '-2147467259 (80004005)':
Method 'Workbook' of object 'ChartData' failed
Nur ein Problem auf 2016 aber, habe ich versucht, etwas etwas anders für 2010 und habe keine Probleme zu sehen.
Update 2
ich, warum endlich herausgefunden ich dieses Problem nicht auf einem anderen System reproduzieren konnten. Dieses Problem tritt nur auf, wenn alle Instanzen von Excel geschlossen werden, nachdem die Änderung vorgenommen wurde. Das bedeutet, wenn Sie beim Ausführen dieses Codes ein separates (nicht verknüpftes) Excel-Fenster geöffnet haben, wird das Problem nicht angezeigt.
Dieses Problem kann nur reproduziert werden, wenn PowerPoint alleine ausgeführt wird, ohne dass andere Excel-Tabellen geöffnet sind.
Ich nehme an, Sie haben bereits auf Excel-Anwendung verwiesen? Versuchen Sie, den Namen des Listenobjekts in etwas anderes zu ändern. 'Dim lo als listobject' – Ibo
@Ibo, das sind ausgezeichnete Vorschläge, ich habe meine Frage bearbeitet, um klarer zu sein und die Referenz in einem Kommentar enthalten, ich entferne die Variable" listObject "alle zusammen. –
Ihr Code ist diesem MSDN-Artikel sehr ähnlich: [Erstellen Sie ein PowerPoint 2010-Diagramm mit einem neuen Chart-Objektmodell] (https://msdn.microsoft.com/en-us/library/office/ff973127 (v = office.14)). aspx), außer dass Sie 'Sheets' und nicht' Worksheets' verwenden. – PatricK