К сожалению, большинство сообщений об ошибках MS Office VB - ДЕРЬМО!
Почему хреново? Потому что их сложно понять обычному пользователю. А когда вы нажимаете кнопку «Справка» в сообщении об ошибке, вы попадаете на нерелевантную ссылку / страницу в Интернете или в справке Excel. Я подумывал о применении в качестве «средства записи сообщений об ошибках» в Microsoft: D
Проработав с ним более 18 лет, я могу распознать большинство из них, но время от времени, когда я сталкиваюсь с новым сообщением об ошибке, мне действительно приходится искать в Google, чтобы найти, что означает эта ошибка !!!
В любом случае...
Как я уже сказал: «Когда Excel находится в режиме редактирования, он вроде как полностью зависает»
А чтобы увидеть это в действии и действительно понять, что происходит, сделайте следующее.
- Открыть Excel
- Добавить новый рабочий лист
- Перейдите на любой лист и нажмите F2 или дважды щелкните ячейку A1. т.е. переведите ячейку в режим редактирования
- Открыть PowerPoint
- Добавить новую презентацию
- Щелкните ВСТАВИТЬ | ОБЪЕКТ | Лист Microsoft Excel (Создать новый), как показано на изображении ниже.
![введите описание изображения здесь](https://i.stack.imgur.com/o8eD6.png)
Вы заметите, что теперь получите более "понятную ошибку".
![введите описание изображения здесь](https://i.stack.imgur.com/2UrTM.png)
Альтернатива
Мы знаем, что Excel позволяет создавать несколько экземпляров Excel. Итак, что мы будем делать сейчас, это
- Создать новый экземпляр Excel
- Добавить новый рабочий лист
- Сохраните пустую книгу во временном каталоге пользователя.
- Добавьте этот файл в PowerPoint
- Удалить этот файл
Плюсы
Вы сможете добавить форму
Минусы
Вы не сможете работать с ним, пока не перейдете в режим редактирования. Я все еще пытаюсь понять, как открыть это в отдельном экземпляре Excel, дважды щелкнув по нему.
Код
'~~> 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
Когда вы запустите этот код, вы увидите вот что
![введите описание изображения здесь](https://i.stack.imgur.com/Ikblx.png)
person
Siddharth Rout
schedule
30.07.2016
Edit
, он вроде как полностью зависает :) - person Siddharth Rout   schedule 29.07.2016.Value
вRange
, который активно редактируется? - person Comintern   schedule 29.07.2016Value
, который я редактирую, может быть любой ячейкой в документе Excel, но обычно я использую A1 для репликации проблемы. - person David Rogers   schedule 29.07.20161.
Откройте редактор VBA в Excel2.
Перейдите к листу 1 и нажмите F2 или дважды щелкните ячейку A1. т.е. переведите ячейку в режим редактирования.3.
Перейдите в редактор VBA и попробуйте ввести текст в области кода. Теперь вы поймете, что я имею в виду под замораживанием :) - person Siddharth Rout   schedule 29.07.2016