Nếu bạn chạy đoạn mã sau bạn sẽ có được một kết quả khá thú vị (với chỉ PowerPoint chạy, đóng tất cả các trường hợp của Excel trước khi chạy):Powerpoint VBA - Editting Tên cột của bảng trong Embedded Excel OLE Object
'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
Đối tượng nhúng được tạo thành công và bảng có mặt với dữ liệu được chỉ định. Tuy nhiên, khi bạn nhấp chuột vào các đối tượng nhúng bạn nhận được lỗi sau:
There isn't enough memory available to read Worksheet.
Đối tượng này không còn có thể được truy cập bất kỳ cách nào khác, và bản chất hỏng của đối tượng vẫn tồn tại trên đóng/mở của tài liệu và khởi động lại. Tôi đã xác minh vấn đề này xảy ra trên tất cả nhưng một hệ thống tôi đã thử nghiệm ở trên (PowerPoint/Excel 2016, Windows 7 X64).
Câu hỏi
Vì vậy, câu hỏi của tôi là, bất kỳ ai khác có thể tạo lại điều này và nếu vậy tại sao điều này lại xảy ra? Nếu bạn thay đổi dòng "Ô (1, 1)" thành "Ô (2, 1)" thì không có vấn đề gì, có vẻ như chỉnh sửa phần đầu của bảng khiến một số hành vi đặc biệt khác với việc chỉnh sửa các hàng hoặc các tế bào khác.
Nghiên cứu
Có thực sự không được phân phối bằng văn bản về vấn đề này, hầu hết những thứ không phải là liên quan đến vấn đề cụ thể này.
This post tuyên bố rằng đó là vấn đề với quá nhiều phông chữ được cài đặt (> 600). Tôi đã thử nghiệm này, tôi chỉ có 241 được cài đặt ...
Có một rất nhiều toàn bộ bài viết không có câu trả lời (this, this, this, và this) không phân phối đi trên đó.
Có some posts hoàn toàn không có liên quan, một lần nữa không phải là tất cả để tiếp tục ở đó.
Tôi đã thử nghiệm cùng mã trong MS Word, dường như làm việc tốt, vấn đề dường như bị cô lập sang PowerPoint
Tôi đã thử làm một phiên bản trong mã (phá vỡ đối tượng), và một người khác bằng tay (đối tượng làm việc), lưu chúng và so sánh đầu ra nhị phân (of only the embedded objects). Điều này nghe có vẻ tuyệt vời, nhưng nó không giúp tôi hiểu rõ hơn. Tôi không thể mở với Excel các đối tượng nhúng riêng biệt vì các đối tượng dường như được lưu trữ trong một proprietary format. Khu vực trung tâm của nhị phân có vẻ khác nhau, nhưng tôi không chắc chắn làm thế nào hoặc tại sao. Cho đến nay tôi đã không phát hiện ra một cách để giải mã điều này thành một thông tin có thể đọc được của con người.
After a significant delay and with proper attribution, tôi có chữ thập được đăng này lên the Microsoft forums. Có lẽ ai đó có một số cái nhìn sâu sắc ở đó. Tôi sẽ chủ động duy trì cả hai bài đăng. Nếu tôi bị thuyết phục 100% thì đây là lỗi tôi thậm chí có thể xem xét opening an issue here. Bạn có thể hoàn toàn tránh được vấn đề này bằng cách không bao giờ đóng OLEObject, điều này gây ra các vấn đề trong năm 2010, đặc biệt khi kết hợp với hành vi biểu đồ liên quan, bạn sẽ nhận được các cửa sổ excel mồ côi được hiển thị. Quay lại đầu trang ||||||||||||||||||||||||||||||||||||||||||||||||||||| Không phải là trải nghiệm người dùng tốt.Tôi đoán tôi có thể mở một cửa sổ excel ẩn trong nền và sau đó chấm dứt khi tôi đang làm việc trên những thứ nhúng ...
Tôi đang chạy phiên bản: Microsoft Office 365 ProPlus: Phiên bản 1705 (Build 8201.3103 Click-to -Run), nhưng tôi cũng đã nhìn thấy vấn đề trên Microsoft Office Standard 2010, Phiên bản 14.0.7015.1000 (32-bit). Vấn đề với bảng có vẻ giống nhau trên mọi phiên bản khác của văn phòng, mặc dù tôi tự hỏi liệu điều này có ảnh hưởng đến các phiên bản trước năm 2010 của văn phòng không?
Cập nhật 1
tôi đã cố gắng điều tương tự với bảng xếp hạng:
'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
Nếu bạn thay đổi giá trị tiêu đề hàng bạn không còn có thể truy cập vào các đối tượng nhúng ("Cells (1, 2) "), nếu bạn thay đổi một giá trị khác (" Ô (2, 1) ") thì nó chạy tốt. Tôi cho rằng đó là vấn đề tương tự, tôi không thể mở dữ liệu biểu đồ sau khi mã này được chạy. Nếu tôi cố gắng truy cập vào nó lập trình tôi nhận được lỗi sau:
Run-time error '-2147467259 (80004005)':
Method 'Workbook' of object 'ChartData' failed
Chỉ một vấn đề trên 2016, mặc dù tôi đã cố gắng một cái gì đó hơi khác nhau cho năm 2010 và không thấy bất kỳ vấn đề.
Cập nhật 2
Cuối cùng tôi đã tìm ra lý do tại sao tôi không thể tạo lại vấn đề này trên hệ thống khác. Vấn đề này chỉ xuất hiện khi tất cả các trường hợp của excel được đóng sau khi thay đổi được thực hiện. Điều đó có nghĩa là nếu bạn có một cửa sổ excel riêng biệt (không liên quan) mở khi bạn chạy mã này, bạn sẽ không thấy vấn đề.
Sự cố này chỉ có thể được sao chép khi PowerPoint đang chạy một mình mà không có bất kỳ bảng tính Excel nào khác mở.
Tôi cho rằng bạn đã tham chiếu đến ứng dụng excel? cố gắng thay đổi tên của listobject thành cái gì khác. 'Dim lo as listobject' – Ibo
@Ibo, Đó là những gợi ý xuất sắc, tôi đã chỉnh sửa câu hỏi của mình rõ ràng hơn và bao gồm tham chiếu trong nhận xét, tôi xóa tất cả biến" listObject ". –
Mã của bạn rất giống với bài viết msdn này: [Tạo Biểu đồ PowerPoint 2010 với Mô hình Đối tượng Biểu đồ Mới] (https://msdn.microsoft.com/en-us/library/office/ff973127 (v = office.14). aspx) ngoại trừ bạn đang sử dụng 'Sheets' chứ không phải' Worksheets'. – PatricK