![]() |
Excel invisible, но UserForm visible
Скрипт запускается планировщиком и копирует данные между книгами Excel.
Работает в режиме Hidden. Excel соответственно .Visible = $False Но при работе на экране появляется форма с кнопкой. Excel 2010. Это код для формы. Собственно, когда скрипт начинает работать с листом, показывается форма. Код:
Private Sub Worksheet_Activate() |
Цитата:
|
Форма нужна, чтобы пользователь подтвердил действие.
Я уже нашел вариант обхода, но интересно найти решение. Полагаю, что оно есть и моих знаний недостаточно. Вот и решил спросить. Должно же быть где-то в comОбъекте управление userform. |
corbis, непонятно, что таки Вам нужно.
У Вас есть рабочая книга. В ней содержится приведённый выше код. Этот код при работе Вашего скрипта вызывает отображение формы, которая требует интерактивного вмешательства, что мешает автоматизированной работе из-под Планировщика. Правильно я понимаю ситуацию? Если — «да», покажите Ваш код. P.S. Если — «нет», то всё равно покажите код, и объясните ещё раз. |
Скрипт работает, когда за компом никого нет и никому не мешает. Просто сортирует и переносит данные.
И делает это в инвизе. Ни окна PS нет, ни Excel. Только форма появляется. Что забавно. Форма, по сути это одна кнопка, нужна, когда с книгой работает пользователь в течение дня. Выделил строку - нажал кнопку. Меня интересует, есть ли у comObject excel.application возможность управления userform. А конкретнее показывать/прятать. В VBA это именно тот код, который я привел выше. Можно ведь написать в скрипт $excel. visible = $false и excel исчез. Вот и с этой кнопкой так же хочу, только не знаю как. |
Цитата:
|
Вложений: 1
Файл 119535
Часть строк зарэмил, чтобы можно было воспроизвести это многократно; часть убрал, иначе пришлось бы заливать кучу папок и файлов, по которым происходит выборка. Кнопку видно, если просто запустить скрипт. |
corbis, спасибо, ясно. Попробуйте задать свойство приложения .EnableEvents равным «$false» сразу после создания экземпляра объекта «Excel.Application», наподобие:
Код:
… |
Спасибо. Проблему устраняет, но не ясно как управлять видимостью формы через comObject. А может и нельзя..
|
Цитата:
|
В этом нет. Но возник вопрос и нужно найти ответ. Это в целях повышения самообразованности. Но это уже лирика, конечно.
Еще раз спасибо. |
corbis, это возможно, но с существенным понижением безопасности, поскольку требует разрешения на программный доступ к проекту VBA.
|
Значит, все таки, возможно. Если не трудно, расскажите, пожалуйста. Я почти со всем разобрался, что касается управления Excel, а этот вопрос попал в категорию "временно не решенные".
|
corbis, вот это — How To Create and Call an Excel Macro Programmatically from VB:
Код:
$oExcel = New-Object -ComObject "Excel.Application" P.S. Не забудьте вернуть настройку безопасности вобрат. |
Ага, ну, видимо поэтому я и нашел сразу прямого управления модулями. Их просто нет из соображений безопасности.
Я-то предполагал, что возможно это делать не через код VBA, а например: Код:
$oVBComponent.Visible = $True Код:
$oVBComponent.Visible() |
corbis, в версиях до Office XP не было запрета программного доступа к проекту. Но расплодилось много макровирусов — и прикрыли лавочку.
Цитата:
|
Время: 21:06. |
Время: 21:06.
© OSzone.net 2001-