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関連

    VBAの力量をはかる3つの質問

    先日、Twitterではけた氏の面白いツイートがありました。3…

  2. Office関連

    [VBA]桁を揃えてDebug.Printする。

    @CallMeKoheiさんのブログの記事に「Excel VBA イミ…

  3. Office関連

    Excel 2016でUTF-8のCSVファイルがサポートされるようになりました。

    Office 2016の10月の機能更新によって、ExcelでUTF-…

  4. Office アドイン

    [Office用アプリ]開発入門の記事を書かせていただきました。

    日経ソフトウエア 2014年3月号から連載の「Office用アプリ開発…

  5. Office アドイン

    [Office用アプリ]任意の場所にデータを入力する。

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

  6. Office関連

    [Word VBA]ルビ(ふりがな)ダイアログの操作に挑む

    2016/10/28 追記:改良版のマクロを書きました。…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP