title: Code to run AFTER right click
body: <p>I want to block out some of the command bar options, but the method I am currently using is a bit too restrictive. I currently use this code:</p>
  
  <pre><code>Sub Auto_Open()
  Application.CommandBars.FindControl(ID:=847).Enabled = False
  End Sub
  
  Sub Auto_Close()
  Application.CommandBars.FindControl(ID:=847).Enabled = True
  End Sub
  </code></pre>
  
  <p>The problem with this is that as long as the workbook that has this code stays open no other workbook can use voided controls. I think a solution might be to use:</p>
  
  <pre><code>Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range,  Cancel As Boolean)
  Application.CommandBars.FindControl(ID:=847).Enabled = False
  End Sub
  </code></pre>
  
  <p>This will stop the user from using my voided controls when they right click, say to delete a sheet.</p>
  
  <p>I now need a way to remove those voids as soon as they click away, so the controls are available to use in any other workbooks they may have open. Is there an event that I can use for this which isn't so common that it will make the code run every 10 seconds? I also wondered whether you can use delays in vba to run a piece of code 5 seconds after a previous piece of code? </p>