1

以下は私の機能ですが、何らかの理由で機能しません。最後の if ステートメントにブレークポイントを配置し、「%{F11}」の送信を削除すると、機能します。私の推測では、「%F11」は機能していません。誰にもアイデアはありますか?

Sub UnprotecPassword(wb As Workbook, ByVal projectPassword As String)
    Dim currentActiveWb As Workbook    

    If wb.VBProject.Protection <> vbext_pp_locked Then
        Exit Sub
    End If
    Set currentActiveWb = ActiveWorkbook
    wb.Activate

    SendKeys "%{F11}"
    SendKeys "^r" ' Set focus to Explorer
    SendKeys "{TAB}" ' Tab to locked project
    SendKeys "~" ' Enter
    SendKeys projectPassword
    SendKeys "~" ' Enter

    If (wb.VBProject.Protection = vbext_pp_locked) Then
        MsgBox ("failed to unlock")
    End If
    currentActiveWb.Activate
End Sub
4

2 に答える 2

3

これをテストするために、という新しいワークブックを作成しましょうBook2.xlsm

テスト目的で、このコードをBook2モジュールに貼り付けます。

Sub Book2Macro()

End Sub

パスワードsayで保護してaから閉じます。これは、ロックを有効にするために必要です。

次に、Book1という新しいワークブックを作成し、モジュールにこのコードを貼り付けます。

Sub Sample()
    UnprotecPassword Workbooks("Book2.xlsm"), "a"
End Sub

Sub UnprotecPassword(wb As Workbook, ByVal projectPassword As String)
    Dim currentActiveWb As Workbook

    If wb.VBProject.Protection <> 1 Then
        Exit Sub
    End If

    Set currentActiveWb = ActiveWorkbook

    wb.Activate

    SendKeys "%{F11}"
    SendKeys "^r" ' Set focus to Explorer
    SendKeys "{TAB}" ' Tab to locked project
    SendKeys "~" ' Enter
    SendKeys projectPassword
    SendKeys "~" ' Enter

    If (wb.VBProject.Protection = vbext_pp_locked) Then
        MsgBox ("failed to unlock")
    End If
    currentActiveWb.Activate
End Sub

次に、作成した最初のブックを開きます。Book2.xlsm。Book2のVBAエディターを確認すると、パスワードで保護されていることがわかります。また、アクティブなワークブックであることに気付くでしょう。Book1クリックしてアクティブ化View Tab | Switch Workbooks | Book1

ここに画像の説明を入力してください

次に、[Developer tab | Macros開発者]タブが表示されない場合は、このリンクをクリックすることをお勧めします。

ここに画像の説明を入力してください

SampleのマクロをクリックするMacro Dialog Boxと完了です。

ここに画像の説明を入力してください

VBAエディターを確認すると、Book2のVBAエディターがロック解除/アクセス可能になっていることがわかります。

Sendkeysは、使用方法によっては信頼性がありません。あなたがそれを正しく使うならば、それはかなり信頼できます:)

VBAパスワードのロックを解除する方法はもう1つありますが、それは非常に複雑で、FindWindowなどのAPIを呼び出す必要があります...

于 2012-07-03T08:19:38.027 に答える
0

コードサンプルについては、次の投稿を確認してください:
http ://www.mrexcel.com/archive/VBA/29825.html
http://www.vbaexpress.com/forum/showthread.php?t=30687

そして、これらの投稿は情報のためのものです:http:
//www.excelforum.com/excel-programming/490883-why-doesnt-sendkeys-work-consistently.html
http://www.ozgrid.com/forum/showthread.php? t = 13006

彼らは、Sendkeysの使用がマルチタスク環境であまり信頼できない理由を議論し、多くの人が商業目的での使用を思いとどまらせています。ただし、VBAプロジェクトの保護を解除するには、それが唯一の解決策のようです。

それが役に立てば幸い!

于 2012-07-03T08:02:07.833 に答える