Unfortunately most of the MS Office VB Errors Messages are SHITTY!
Why Shitty? Because they are difficult to understand by a normal user. And when you click on the "Help" button in the error message, it takes you to some irrelevant link/page online or in Excel Help. I have been thinking of applying as "Error Message Writer" in Microsoft :D
After working with it for more than 18 years, I can recognize most of them but every now and then, when I come across a new error message, I actually have to search Google to find what that error means!!!
Anyways...
Like I said, "When the Excel is in Edit mode, it sort of freezes completely"
And to see this in action and to actually understand what is happening, do the following.
- Open Excel
- Add a new worksheet
- Go To any sheet and press F2 or double click in Cell A1. i.e put the cell in Edit mode
- Open Powerpoint
- Add a new presentation
- Click on INSERT | OBJECT | Microsoft Excel Worksheet (Create New) as shown in the image below

You will notice that you will now get a more "easy to understand error"

Alternative
We know that Excel let's you create multiple instances of Excel. So what we will do now is
- Create a new instance of Excel
- Add a new worksheet
- Save the blank workbook in the temp directory of the user
- Add that file in the PowerPoint
- Delete that file
Pros
You will be able to add the shape
Cons
You will not be able to work with it, till the time you are in Edit Mode. I am still trying to figure out on how to open this in separate Excel instance by double clicking on it.
Code
'~~> API to get user's temp path
Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _
(ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Const MAX_PATH As Long = 260
Sub Sample()
Dim oxlapp As Object, oxlwb As Object
Dim filePath As String
'~~> Create a temporary file name
filePath = TempPath & Format(Now, "ddmmyyhhmmss") & ".xlsx"
'~~> Create a new instance
Set oxlapp = CreateObject("Excel.Application")
'~~> Add a new workbook
Set oxlwb = oxlapp.workbooks.Add
'~~> Save it to the temp directory
oxlwb.SaveAs filePath, 51
'~~> Add the shape
ActivePresentation.Slides(1).Shapes.AddOLEObject 30, 30, 100, 100, , filePath, msoFalse, , , , msoFalse
oxlwb.Close (False)
oxlapp.Quit
Kill filePath
End Sub
Function TempPath() As String
TempPath = String$(MAX_PATH, Chr$(0))
GetTempPath MAX_PATH, TempPath
TempPath = Replace(TempPath, Chr$(0), "")
End Function
When you run this code, this is what you will see
