Как использовать Application.Run для защищенной паролем книги? - PullRequest
1 голос
/ 10 февраля 2011

Как часть созданного мной планировщика на основе Excel, я использую функцию Application.Ontime следующим образом для выполнения макросов в указанное время

Sub Load
    //snipped for brevity

    Dim startName As String
    startName = "'StartSub""" & filePath & """, """ & fileName & """, """ & macroName & """'"

    Application.OnTime y, startName

End Sub

Sub StartSub(filePath As String, fileName As String, macroName As String)
    Dim wb As String
    wb = "'" & filePath & "'!" & macroName
    Application.Run wb
    Application.Workbooks(fileName).Close Savechanges:=True
End Sub

Тестирование и простой POC, похоже, сработали очень хорошо. Проблема, с которой я сталкиваюсь, заключается в том, что одна из таблиц защищена паролем. Проблема в том, что диалог ввода пароля препятствует выполнению макроса, что, я думаю, ожидается. Нет необходимости в доступе на запись к защищенной паролем книге, поскольку выходные данные и результаты экспортируются в несколько отчетов.

Мой вопрос: как преодолеть это и запустить макросы из защищенной паролем рабочей книги с помощью Application.Run?

Ответы [ 2 ]

1 голос
/ 10 февраля 2011

Это не рабочий.MS не поддерживает это.Вам нужно снять защиту книги, прежде чем запускать ее.Вот пример: http://www.ozgrid.com/forum/showthread.php?t=36816&page=1

0 голосов
/ 18 февраля 2011

Поскольку рабочая книга защищена паролем, пароль всегда указывается при открытии файла.Чтобы преодолеть это, мне нужно было хранить пароли в моей книге.Таким образом, проблема фактически сводилась к открытию файла с правильным паролем.

Sub StartSub(filePath As String, fileName As String, macroName As String)
    Dim wb As String
    wb = "'" & filePath & "'!" & macroName
    Dim scheduledWb As Workbook

    Dim pwd As String
    Dim saveChange As Boolean
    pwd = GetPassword(fileName) ' method that extracts correct password from somewhere
    If Len(pwd) > 0 Then
        Set scheduledWb = Workbooks.Open(fileName:=filePath, ReadOnly:=True, Password:=pwd)
        saveChange = False
    Else
        Set scheduledWb = Workbooks.Open(fileName:=filePath)
        saveChange = True
    End If

    Application.Run "'" & fileName & "'!" & macroName
    Application.Workbooks(fileName).Close Savechanges:=saveChange
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...