VBAプロジェクトのロック


はじめに

VBAコードの完全な隠蔽はできません。
このページで紹介するプロジェクトロックも解除可能です。
ただ解除する際にひと手間必要になるため、解除されにくくはなります。

ロック

ロック可能なExcelブックの拡張子はxls、xla、xlsmです。
xlamもイレギュラーな手順を使えば不可能ではないですが、今回は扱いません。
まず、通常のプロジェクト保護(パスワードによる保護)を行います。
次に、以下のコードで当該ブックを共有にします。
(xls、xlsmの場合は、ブックをExcelで表示できるので、コードからでなくても可能です。)
共有ブックの場合、いくつかの操作ができなくなります。
その1つにVBAコードの表示があり、ロックはそれを利用します。


Sub LockVBA()

  Dim WB As Workbook

  Const WB1Path = "C:\Test\Test1.xlsm"      'ここにロック前ブックのフルパスを設定
  Const WB2Path = "C:\Test\Test2.xlsm"      'ここにロック後ブックのフルパスを設定
  Const ShPass = "Test Share Password"      'ここに共有パスワードを設定


  Set WB = Workbooks.Open(Filename:=WB1Path)
   
  Application.DisplayAlerts = False
  WB.ProtectSharing Filename:=WB2Path, SharingPassword:=ShPass
  Application.DisplayAlerts = True

  WB.Close False
  Set WB = Nothing

  MsgBox "ロック完了"

End Sub

ロック解除

共有パスワードで共有を解除することでロック解除となります。
ロックを解除しても、通常のパスワード保護はかかったままです。


Sub UnlockVBA()

  Dim WB As Workbook
  
  Const WB1Path = "C:\Test\Test2.xlsm"      'ここにロック後ブックのフルパスを設定
  Const ShPass = "Test Share Password"      'ここに共有パスワードを設定
 

  Set WB = Workbooks.Open(Filename:=WB1Path)
   
  Application.DisplayAlerts = False
  WB.UnprotectSharing ShPass
  Application.DisplayAlerts = True
    
  WB.Close False
  Set WB = Nothing

  MsgBox "ロック解除完了"

End Sub

ロック強制解除

拡張子xlaに限りロックの強制解除が可能です。


Sub UnlockVBA2()

  Dim WB As Workbook
  
  Const WB1Path = "C:\Test\Test2.xla"      'ここにロック後ブックのフルパスを設定
  Const WB2Path = "C:\Test\Test3.xla"      'ここにロック解除後ブックのフルパスを設定
 

  Set WB = Workbooks.Open(Filename:=WB1Path)
   
  Application.DisplayAlerts = False
  WB.SaveCopyAs WB2Path
  Application.DisplayAlerts = True
    
  WB.Close False
  Set WB = Nothing

  MsgBox "ロック強制解除完了"

End Sub


Excel VBA講座に戻ります

トップに戻ります


お探しの情報は見つかりましたか?
まだの方はこちらをどうぞ。
Google

PageTop