Office関連

VBAで○○を禁止したい!・・・と思う前に。

Office系Q&Aサイトを見ているとたまに出てくるのがこの質問。

“VBAで○○を禁止(制御)したい!”

特に業務ではこういった要望が出てくることも多いのだろうと思います。

たしかに、マクロを使うとアプリケーションの機能を制限することができます。
たとえば、ExcelファイルのThisWorkbookに下記コードを設定すると、

Option Explicit

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  Cancel = True
End Sub

そのファイルではシート上で右クリックしてもメニューが表示されなくなり、たとえばリボンをカスタマイズして下記コードを設定すると、そのファイルでは上書き保存コマンドが無効になります。

<?xml version="1.0" encoding="utf-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <commands>
    <command idMso="FileSave" enabled="false" />
  </commands>
</customUI>

このように、コードを色々書くことでアプリケーションの機能を制御し、ユーザーの操作を限定させることはできます。

・・・が、この手の「○○禁止系」の処理は非常に大変です。

というのも、制御対象の項目が多い(右クリックメニュー、リボン、ツールバー(メニューバー)、ショートカットキー…etc)上、マクロで他ファイルから操作されたらどうするのか?、OOXMLファイル内のXMLを直接書き換えられたらどうするのか??・・・というように、起こり得る事態を考え出したらキリがなく、それらすべてに対応しようとすると、その分だけコストが掛かってしまうからです。

それならば、いっそのこと、

  1. ユーザーにファイルを弄られたくない。 → 保護機能でファイルを保護する、PDFファイルにして編集しづらくする。
  2. でも部分的にユーザーからの入力を受け付けたい。 → ファイルに制限を掛けて一部以外はファイルを保護する。

上記のようにVBAで何とかするのを止めて、標準機能である保護機能や制限機能で対応した方が、余分な手間が掛からないのではないかと思います。

メンテナンスの面を考えても、API等を駆使した凝ったコードで制限するより遥かに簡単で楽にファイルの面倒をみることができます。
(特に業務においては容易にメンテナンスできるようにしておいた方が、要らぬトラブルを起こさずに済みます。)

というわけで、

“VBAで○○を禁止(制御)したい!”

・・・と思う前に、まずはアプリケーションの保護や制限といった標準機能で何とかできないかを考えてはどうか?という私見をごちゃごちゃと書いてみました。

関連記事

  1. Office関連

    [Win32 API]PowerPointマクロにショートカットキーを割り当てる。

    数日前、“PowerPointだとマクロにショートカットキーを割り当て…

  2. アイコン一覧

    Office 365アイコン(imageMso)一覧(W)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

  3. Office関連

    フォルダ(サブフォルダ含む)内の特定の拡張子のファイルに処理を行うVBAマクロ

    「Wordマクロ サブフォルダ ファイル処理」といったキーワードでのア…

  4. Office関連

    OfficeのコマンドID(コントロールID)リストがGitHubで公開されました。

    前回の記事でも触れていますが、メインストリームサポート期間内のOffi…

  5. Office関連

    Office 2013をインストールしてみました。

    CNET Japanの記事「マイクロソフト、「Office 2013」…

  6. Office関連

    ページ毎に処理を行うWordマクロ

    Wordのマクロで「ページ毎に○○したい」という要望があったので、簡単…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP