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で○○を禁止(制御)したい!”

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

[リボン・カスタマイズ]カスタムタブを共有する。前のページ

2014年8月の人気記事次のページ

関連記事

  1. Excel

    Google TTSで文字列を読み上げるマクロ(言語自動検出対応版)

    2012/2/15 追記:下記マクロをExcel 2007/201…

  2. Office関連

    Office 2019のインストール方法

    下記ニュースサイトにある通り、永続ライセンス版のOffice 2019…

  3. Office関連

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

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

  4. Office関連

    Microsoft MVP for Outlook を初受賞しました。

    2010年7月から「Office System」分野でMicrosof…

  5. Office関連

    [Excel Services ECMAScript]選択範囲が変更されたときのイベントを利用する。…

    埋め込んだExcelワークブックの、選択範囲が変更されたときのイベント…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP