Страницы: 1
RSS
При выполнение макроса Workbook_Open() не запускается вызов формы
 
Уважаемые форумчане подскажите почему выдает ошибку:
Код
Private Sub Workbook_open()
Application.EnableEvents = True
If MsgBox("Создать заявку", vbYesNo) = vbYes Then UserForm3.show
End Sub
Код ошибки: Run-time error 1004
Дело в том, что когда файл находится на компьютере и система ему доверяет(не спрашивает о разрешении редактирования), все работает нормально, а на локальном хранилище вылетает ошибка.
 
Код
Private Sub Workbook_open()
'Application.EnableEvents = True'строка избыточна, т.к. если бы было False - событие вообще бы не сработало
Application.OnTime Now, Me.Codename & ".StartForm"
End Sub
Sub StartForm()
If MsgBox("Создать заявку", vbYesNo) = vbYes Then UserForm3.show
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
К сожалению не помогло
Изменено: magistor8 - 21.01.2019 11:13:48
 
Добрый день. У меня работает  ;)  
 
Т.к. файл запускается в защищенном просмотре, то нет доступа элементарно даже к методам Application. О чем ошибка и говорит. Здесь вряд ли найдется решение именно через сам открываемый файл, т.к. его содержимое полностью заблокировано. Путь один: помещать его в папку надежных расположений, чтобы Excel ему доверял сходу.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Logistic написал:
У меня работает
Добрый день. На моем компьютере работает. Как только кидаю в локалку - ошибка
 
Цитата
magistor8 написал:
кидаю в локалку
что Вы вообще под локалкой подразумеваете? Папку в локальной сети из нескольких ПК? Так добавьте эту папку в список надежных расположений на всех ПК и всех делов.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Так добавьте эту папку в список надежных расположений на всех ПК и всех делов
Будет проблематично. Локальная сеть из 50+ пользователей, а так же администраторы сети находятся в головной организации. Все равно спасибо за помощь
 
Сквозь муки и боль разочарования, я все-таки решил эту проблему вот так:
Код
Sub Workbook_open()
Set sourceWB = ThisWorkbook
sourceWB.RunAutoMacros XlRunAutoMacro.xlAutoOpen
End Sub
Теперь книга ждет подтверждение редактирования, а потом запускает Auto_Open()
Изменено: magistor8 - 21.01.2019 15:43:58
 
Цитата
magistor8 написал:
подтверждение редактирования
плохо понимаю, как именно это могло помочь. Если судить по описанию - то сама книга с кодом открывается в защищенном режиме. А в нем макросы не запускаются в принципе, пока не разрешить редактирование. И к тому же если книга в защищенном режиме, то ThisWorkbook будет Nothing. Следовательно обратиться к книге просто невозможно. Отсюда становится странно как Ваш код запускается в этом режиме вообще. Да и этот код масло-масляное, т.к. вызывает ровно то же событие, только прописанное в стандартном модуле и называемое Auto_Open. И возможность эта оставлена для обратной совместимости. Притом замечательно то, что Auto_Open(если таковой есть) срабатывает раньше события Workbook_Open.
Отсюда вопрос: а точно срабатывает то, что Вы прописали? Или есть в стандартных модулях Auto_Open, который собственно и срабатывает, а Workbook_Open просто молчит в этот момент?
В общем я бы с удовольствием посмотрел пример изначальной книги, в которой это вообще все проявляется.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, убираю модуль Workbook_Open, Auto_Open не срабатывает. В общем скину вам ссылку с книгой в личку  
 
А что у Вас заголовке прописано? Именно защищенный режим? Или может предлагает включить содержимое?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Сначала разрешить редактирование, а потом включить содержимое (тестировал на другом компьютере)
 
Файл скачал, посмотрел.
Вот оно что. Вы строчечку еще забыли вверху на форум выложить:
Код
Set objXls = CreateObject("Excel.Application")
Т.е. Вы создаете новый экземпляр Excel, что сбивает его с толку. Надо взять на заметку. Хотя как ни крути не очень надежный костыль. Надо поискать другие решения.
Но обращаю внимание, что при запуске первый раз - появится один запрос на заявку(из Auto_Open). А вот при повторном запуске файла, который уже был разрешен для просмотра - Вы получите уже два сообщения. Первое при Auto_Open, второе - при Workbook_Open. Поэтому надо добавить некий флаг, что процедура при открытии уже была запущена.
И чтобы почище код был и не оставлял за собой каких-то пустых окон, можно сделать так:
Код
Sub Workbook_open()
Set objXls = CreateObject("Excel.Application")
Set sourceWB = ThisWorkbook
sourceWB.RunAutoMacros XlRunAutoMacro.xlAutoOpen
objXls.DisplayAlerts = 0
objXls.Quit
set objXls = nothing
End Sub
Изменено: Дмитрий(The_Prist) Щербаков - 21.01.2019 16:40:17
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
У меня, например, так вполне получилось:
Код
Sub Workbook_open()
    Dim sourceWB As Workbook
    Do While sourceWB Is Nothing
        Set sourceWB = ThisWorkbook
        DoEvents
    Loop
    MsgBox "Получилось"
End Sub
Без всяких изворотов с лишними процедурами.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, спасибо Вам большое, все работает как надо
Страницы: 1
Наверх