Страницы: 1 2 След.
RSS
Ошибка при запуске Run-time error ' 429 ' ActiveX component can't create object
 
Всем привет!
Столкнулся с очень ужасной ошибкой, с ней просто невозможно работать. В файле есть макрос, который выполняется при запуске книги, он то выполняется то выскакивает эта ошибка. Подскажите как убить ошибку.
 
Цитата
ALFA пишет: В файле есть макрос
И где этот файл?
 
сохранить файл в формате .xlsx  ;)
 
Вот если запускать файл уже при открытом приложении Excel, возникает сбой.
 
Чтоб всё проверить - нужен 2.htm
 
вот он
 
а если поменять в коде ЭтаКнига
строчку
Код
UserForm1.Show 0
на
Код
UserForm1.Show 1

именно на эту строчку иногда ругается
 
1/0 это модальное/не модальное, какое отношение имеет к делу?
 
у вас указан параметр showmodal = true.
если я не ошибаюсь это связано с методом .Show
если .Show 1 "UserForm is modal. Default."
 
 Вам предлагают вариант - проверьте. Если ничего не изменится, значит не имеет))
 
Ошибка действительно пропала, но окно стало модальным и теперь невозможно выполнить следующее:
Код
application.visible = false
На фоне формы отображается эксель.
 
попробуйте тогда изменить параметр ShowModal в окне свойств юзерформы на False
оставив .Show 0
хотя лично я никогда не заморачивался оставлял по умолчанию и .Show тоже по умолчанию. (т.е. true)
и приложение скрывалось тоже
Изменено: Jack - 30.09.2014 19:10:53
 
Не помогло.
 
потестил.
Код
.showmodal = false 
.show 0
приложение у меня скрывается.
Изменено: Jack - 30.09.2014 19:31:26
 
У меня появляется ошибка, если приложение excel уже запущено(Открыт иной файл) на момент открытия файла, если я ставлю .show 0 то есть ошибка, если ставлю .show 1 то ошибка пропадает и application не скрывается.
 
Цитата
то ошибка пропадает и application не скрывается.
Все верно,код выполнится после закрытия формы.
А если так?
Код
Public Sub Workbook_Open()
Application.Visible = False
UserForm1.Show 1
End Sub 
Изменено: Doober - 01.10.2014 02:20:06
 
Доброго времени суток Всем.
продолжу в этой теме....     ........ про WshShell

Год назад написал я макрос для Excel- файла с целью автоматизации деятельности своей и моих коллег. Суть макроса - запуск внешней ЕХЕ программы (самописаной) для получения от прибора данных и последующая интеграция данных в книгу Excel/
Файл с макросом работал полгода на пяти разных компьютерах (Win7, Win10, разные версии офиса...). Потом на одном компе при запуске макроса стала выскакивать ошибка 429.Всегда. Через месяц - на втором компе "поломалось"/ Ещё через два месяца перестало работать на третьем. На оставшихся двух пока работает.
Компы "корпоративные" и админятся очень издалека.... обновления ОС и офиса выполняются согласно корпоративной политике (автоматически). Пользователи сами ничего в настройках не меняли.
Текст макроса прост и процедура запуска взята копипастом на просторах интернета:
Код
Range("C20").Select
ActiveCell.FormulaR1C1 = 255
Set WshShell = CreateObject("WScript.Shell")                              <<<< на эту строку ругается дебагер и подсвечивает её жёлтым
intReturn = WshShell.Run("C:\ABC\GetData.exe X", 0, True)
Range("C20").Select
ActiveCell.FormulaR1C1 = intReturn

Основная проблема в том, что я не понимаю, почему перестало работать то, что полгода работало без проблем. Если-бы админы изменили что-то в политике безопасности, то у всех коллег одновременно перестало-бы работать. А так - через большие промежутки времени. Более того, что такого страшного в строке
Set WshShell = CreateObject("WScript.Shell"). Судя по статьям в интернете - это нечто стандартное и применяется миллионными тиражами....
Именно на ней затыкается макрос и подсвечивается она в дебагере. То есть до запуска моей программы самописаной дело не доходит.
Прочитал весь интернет :(  убил уже наверное часов сто на это. Ничего не нашёл . Всякие
Dim WshShell As Object   дописывал, ....
VBA.CreateObject не меняет ничего....
/RegServer  исполнял ....
HKEY_CLASSES_ROOT\CLSID  смотрел....
на одном компе переустановили офис (365) - не помогло;

Где косяк? Почему перестало работать и как всё починить?

Может есть другой способ запуска стороннего ЕХЕ-файла с параметрами (консольное приложение написано в CodeBlocks) и обязательным ожиданием ответного кода-завершения от него? (простой Shell не подходит)???
 
Цитата
bombowoz написал:
Суть макроса - запуск внешней ЕХЕ программы
А как это соотносится с данной темой (про ActiveX)?
 
Вообще скрипты vbs на этих машинах работают? Потому что бывает что это отключают из соображений безопасности, а как именно это реализовано - я не в курсе, может отключают на корню весь объект.
 
Цитата
Hugo написал:
бывает что это отключают из соображений безопасности,
как правило блокируется запуск скрипта пользователем. Я б не стал горячится и отключать объект, так как полно системных скриптов, которые должны выполнятся, хотя бы даже установка принтеров через них сделана.  а вот можно ли залочить Shell это вопрос мной не изученный. Как минимум яб проверил работу VBS, других его объектов например
https://www.script-coding.com/WSH/FileSystemObject.html
а уже потом бы решал.
По вопросам из тем форума, личку не читаю.
 
Цитата
bombowoz написал: Set WshShell = CreateObject("WScript.Shell")   <<<< на эту строку ругается дебагер
В проекте установите ссылку на Tools - References - Windows Script Host Object Model и проверьте, работает ли такой код:
Код
Sub Test()
  ' Reference: Tools - References - Windows Script Host Object Model
  ' File: C:\Windows\System32\wshom.ocx
  Dim WshShell As IWshRuntimeLibrary.WshShell
  Set WshShell = New IWshRuntimeLibrary.WshShell
  WshShell.Popup "Hi!"
End Sub

Если не работает, то проверьте свои права доступа (правый клик - свойства - Безопасность) на чтение и выполнение для файла C:\Windows\System32\wshom.ocx
Изменено: ZVI - 25.11.2019 02:08:59
 
Цитата
ZVI написал:
...проверьте, работает ли такой код...
спасибо за участие
- завтра попробую на том компе, где перестал работать макрос...
( на моём ноуте, что под рукой, проблема пока не всплывала, хотя у меня на ноуте птички нет на пункте "Windows Script Host Object Model"  -> макрос работает без проблем....)
Изменено: bombowoz - 25.11.2019 21:48:52 (дополнено)
 
Тут из запасников пришлось достать HTA и там wscript.Shell  был , так в чистом виде в 10ке перестал работать, а если конвертить в exe то работает.
По вопросам из тем форума, личку не читаю.
 
-э-э-э-э.....
Моё внимание привлекла фраза "в чистом виде перестал работать" - это значит, не только у меня "поломалось"?


З.Ы.(извините, в VBA/VBS очень слаб, не пинайте ногами)
 
bombowoz,  hta  - ЭТО HTML Application. , то есть приложение которое работает с использованием движка браузера (в нутрях собственно HTML теги и миы или Java script.  В чистом виде - означает ,что запускается HTA файл и, видимо, по соображениям безопасности в контенте этого процесса запрещен вызов SHELL, ну дабы зловреды не запустили чего.  Блокировки объекта при вызове из VBS, VBA, я не замечал .
По вопросам из тем форума, личку не читаю.
 
Цитата
ZVI написал:
проверьте, работает ли такой код
Проверил - работает на всех компах, если в чекбоксе (Tools - References - Windows Script Host Object Model) поставить птичку. Без птички не работает.
(Мой файл на моём компе работает из без этой птички)

P.S. А есть альтернатива запуска ЕХЕ помимо WshShell ? (чтобы можно было получать назад код завершения)
 
Цитата
bombowoz написал:
P.S. А есть альтернатива запуска ЕХЕ помимо WshShell ? (чтобы можно было получать назад код завершения)
можно скомпилировать не ехе, а dll и запускать из VBA напрямую, не используя сторонние библиотеки.
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bombowoz написал: ...работает на всех компах ... Без птички не работает.
Если птички не жалко, то поставьте ее и используйте такой вариант кода:
Код
Sub Test()
  ' Reference: Tools - References - Windows Script Host Object Model
  ' File: C:\Windows\System32\wshom.ocx
  Dim intReturn
  Dim WshShell As IWshRuntimeLibrary.WshShell
  Set WshShell = New IWshRuntimeLibrary.WshShell
  Range("C20").Value = 255
  intReturn = WshShell.Run("C:\ABC\GetData.exe X", 0, True)
  Range("C20").Value = intReturn
End Sub
Изменено: ZVI - 26.11.2019 17:16:35
 
Цитата
ZVI написал:
такой вариант кода
Спасибо ещё раз - попробую. Отпишусь.
 
ZVI,  - - работает.!
Как говорится - "ты сделал мой ноябрь".
Спасибо тебе мил человек. Дай тебе Бог здоровья.
Страницы: 1 2 След.
Наверх