Страницы: 1
RSS
Макрос для автоматического ввода пароля и запуска обновления в запароленном для правок файле!
 

Добрый день!

Подскажите пожалуйста, цель следующая, есть файл с паролем на редактирование, необходимо, чтобы он открывался по времени под паролем для правки, далее обновлял все внешние и внутренние подключения, сохранялся и закрывался, у меня получилось так, но не очень работает:

Код
Sub MyMacro()
    Application.ScreenUpdating = False
    Set wb = ThisWorkbook
    Workbooks.Open Filename:= _
    "C:\Users\ЯЯЯЯЯЯЯЯЯ\Desktop\Òåñò_äëÿ_îáíîâëåíèÿ_ñ_ïàðîëåì.xlsm", Password:="12345", WriteResPassword:="12345"
    Set wb1 = ActiveWorkbook
    wb.Activate
    ActiveWorkbook.RefreshAll
    wb.Save
    wb1.Close
    Application.ScreenUpdating = True
End Sub

При запуске он все равно запрашивает у меня пароль для входа в файл для редактирования, хотя в макросе я его учел, вот не могу понять как это исправить.

Спасибо!
Изменено: Arslan Ikhsanov - 11.07.2022 16:03:38
 
Изменил запрос таким образом, все процедуры выполняются, но все равно на старте требует ввести "пароль" который по идее у меня уже прописан и все должно запускаться на автомате:
Код
Private Sub Workbook_Open()

Call MyMacroPassword
ActiveWorkbook.Close SaveChanges:=False

End Sub



Dim TimeToRun

Sub MyMacroPassword()
    Workbooks.Open Filename:= _
    "C:\Users\ЧЧЧЧЧЧЧЧЧЧЧ\Desktop\Òåñò_äëÿ_îáíîâëåíèÿ_ñ_ïàðîëåì.xlsm", Password:="12345", WriteResPassword:="12345"
    Call MyMacro
 
End Sub

Sub MyMacro()
    ThisWorkbook.RefreshAll
    ThisWorkbook.Save
    ThisWorkbook.Close
    Call NextRun

End Sub

Sub NextRun()
    TimeToRun = TimeValue("17:05:00")
    Application.OnTime TimeToRun, "MyMacro"
End Sub

Sub Start()
    Call NextRun
End Sub

Sub Finish()
    Application.OnTime TimeToRun, "MyMacro", , False
End Sub
 
Макрос не будет выполняться, пока файл не откроется. Так что Вам нужно два файла: первый файл (без пароля на открытие) будет запускаться и открывать второй файл (с паролем).
Владимир
 
sokol92, добрый день!

Можно пример, как это должно выглядеть, спасибо!

Разве нельзя сразу на старте при открытии распаролить файл для правки?
 
Цитата
Arslan Ikhsanov написал:
Разве нельзя сразу на старте при открытии распаролить файл для правки?
Можно. Но кто-то должен это делать. Именно ля этого и нужен
Цитата
sokol92 написал:
первый файл (без пароля на открытие)
 
Цитата
Arslan Ikhsanov написал:
Можно пример, как это должно выглядеть, спасибо!
Ваш макрос из #1 выглядит правильно. Только он не может находиться в открываемом файле.
Владимир
 
sokol92, т.е. логика такая, я макрос #1 помещаю в Доп. файл к основному, а в основном по сути ничего прописывать и не надо будет, он автоматом отработает процедуры указанные в Доп. файле?
 
В "Доп. файле":

1. Записываете макрос (например, MyMacro), который открывает "Основной" файл, вносит в него необходимые изменения и закрывает Основной файл.
2. В обработчике события открытия книги Workbook_Open вызываете MyMacro желательно через конструкцию

Код
 Application.OnTime Now, "MyMacro"


О причине использования OnTime см. этот ответ Владимира (ZVI) - для того, чтобы дождаться полной загрузки Excel.
Изменено: sokol92 - 12.07.2022 14:36:44
Владимир
 
sokol92, посмотрите плиз, Доп. файл запускается и не ругается, но с основным ничего не происходит, возможно я что-то упустил, спасибо!

В обработчике:
Код
Private Sub Workbook_Open()

Application.OnTime Now, "MyMacro"

End Sub
Сам макрос:
Код
Sub MyMacro()
    Application.ScreenUpdating = False
    Set wb = ThisWorkbook
    Workbooks.Open Filename:= _
    "C:\Users\a.ihsanov\Desktop\Тест_для_обновления_с_паролем.xlsm", WriteResPassword:="QWERTY"
    Set wb1 = ActiveWorkbook
    wb.Activate
    ActiveWorkbook.RefreshAll
    wb.Save
    wb1.Close
    Application.ScreenUpdating = True
End Sub
Хотел уточнить, нужно ли использование оператора Dim в заголовке макроса, так как сейчас без него?
 
Цитата
Arslan Ikhsanov написал:
с основным ничего не происходит
Поставьте в начало макроса MyMacro оператор

Код
Stop ' MyMacro


и после запуска (открытия дополнительного файла) посмотрите в отладчике, что происходит.
Изменено: sokol92 - 12.07.2022 15:03:46
Владимир
 
sokol92, к сожалению ничего не происходит, ни обновления файла, ни ругани на макрос, думаю что-то не то с самим макросом!
 
Посмотрите в прилагаемом файле, как это должно выглядеть. Возможно, у Вас не в том модуле находится обработчик события открытия книги.
Владимир
 
sokol92, да все так, один в один
 
Что "все так"? Что происходит при открытии вложенного файла? Если Вы не видите отладчик, то начинайте разбираться с параметрами, которые отвечают за безопасность макросов, доступ к VBE проекту и т.п.
Владимир
 
sokol92, сработало вот так:
Код
Private Sub Workbook_Open()

Application.OnTime Now, "MyMacroPassword"

End Sub
и макрос:
Код
Sub MyMacroPassword()

    Workbooks.Open Filename:= _
    "C:\Users\a.ihsanov\Desktop\Тест_для_обновления_с_паролем.xlsm", WriteResPassword:="QWERTY"
    ThisWorkbook.RefreshAll
    ThisWorkbook.Save
    ThisWorkbook.Close
 
End Sub
Но, макрос только открыл файл с паролем, этапы которые должны его обновить, сохранить и закрыть почему то не сработали
Код
ThisWorkbook.RefreshAll
ThisWorkbook.Save
ThisWorkbook.Close
Думаю чего то явно не хватает для этих трех этапов
 
ThisWorkbook - книга, в которой записан код макроса (в предыдущей терминологии - Доп. файл). А обновлять и сохранять нужно Основной файл. Сразу после открытия основного файла он становится текущей книгой, к которой можно обращаться через переменную ActiveWorkbook (либо, что правильнее, использовать возвращаемое значение метода Workbooks.Open).
Владимир
 
sokol92, огромное Вам спасибо, с Вашей неоценимой помощью я разобрался, все работает как было задумано!
 
Успехов!
Владимир
Страницы: 1
Наверх