2011-02-10 25 views
1

私が作成したエクセルベースのスケジューラの一環として、私はマクロを実行するには、次のように「Application.Ontime」関数を使用しています、指定の時間にパスワード保護されたブックにApplication.Runを使用する方法?

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は実際に働いているようですよく私が直面している問題は、スプレッドシートの1つがパスワードで保護されていることです。問題は、パスワードの入力ダイアログが、マクロが予想通りに実行されないことです。出力と結果が複数のレポートにエクスポートされるため、パスワードで保護されたワークブックへの書き込みアクセスは必要ありません。

私の質問はこれを克服し、Application.Runを使用してパスワードで保護されたブックからマクロを実行する方法です。

答えて

0

ブックはパスワードで保護されているため、ファイルを開くときには常にパスワードが与えられます。これを克服するために、私はワークブックにパスワードを保存する必要がありました。だから問題は実際に正しいパスワードでファイルを開くことに沸った。

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 
1

いいえ。 MSはそれをサポートしていません。ワークブックを実行する前に保護を解除する必要があります。次に例を示します。http://www.ozgrid.com/forum/showthread.php?t=36816&page=1

+0

私が探していた解決策ではありませんが、リンクはワークシートをどのように保護し、保護しないかを説明しています。私の要求は保護されたワークブックに関連しています。つまり、ユーザーはファイルを開くときにパスワードを提供する必要があります。それにもかかわらず、無関係な問題を解決するのに役立つ良いリンク。 – Ahmad

関連する問題