[XL2000]Copyメソッドを使用するとシート保護が解除されてしまう

上記の製品の総称を以下 Excel とします。

概要

この資料は、Copy メソッドを Destination 引数を使って実行すると、Protect メソッ ドで設定した保護が解除されてしまう現象について説明しています。

詳細

この文書では、特定の機能の説明を目的としたプログラミングの例を提供しています。 本例は、特定の状況や目的を満たすために作成されていますが、マイクロソフトでは市 場や特定の目的で使用することを制限してはおらず、また明示的、暗示的にも保証して はおりません。この文書は、例示されているプログラミング言語やプロシージャの作成、 デバッグに使用されるツールの使用方法を十分に理解している方を対象としています。 マイクロソフト サポート窓口では、特定のプロシージャの機能説明に関するご質問に対 して支援いたしますが、本例を特定の目的を満たすために機能を追加したり、プロシー ジャを構築することは行いません。プログラミング言語や各プログラミング ツールに関 する詳細な情報はオンラインヘルプをご覧ください。
Protect メソッドで保護をかけた後で Copy メソッドを実行すると、Copy メソッドの Destination 引数でコピー先のセル範囲を指定していた場合、保護が解除されてしまい ます。
以下は シートに保護をかけた後にアクティブセルをコピーして セル A1 に貼り付ける プロシージャです。以下のサンプル プロシージャを実行しても、シートに保護はかか りません。

Sub foo()
ActiveSheet.Protect userinterfaceonly:=True
ActiveCell.Copy Range("A1")
End Sub

再現手順

  1. Excel 2000 を起動し、新規ブックを作成します。
  2. [ツール] メニューの [マクロ] より [Visual Basic Editor] をクリック します。
  3. [挿入] メニューの [標準モジュール] をクリックし、新規モジュールに 次のコードを記述します。

    Sub foo()
    ActiveSheet.Protect userinterfaceonly:=True
    ActiveCell.Copy Range("A1")
    End Sub
  4. [ファイル] メニューの [終了して Microsoft Excel へ戻る] をクリック します。
  5. [ツール] メニューの [マクロ] の [マクロ] で foo プロシージャを実行します。

結果

シートに保護がかかりません。

状況

この問題は Microsoft Excel 2002 で修正いたしました。

回避策

以下のいずれかの方法で回避することができます。

方法 1: Copy と Paste メソッドを使う

以下のサンプルプロシージャのように、Copy メソッドと Paste メソッドを使ってくだ さい。

Sub Sample1()
ActiveSheet.Protect userinterfaceonly:=True
ActiveCell.Copy
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub

方法 2: Copy メソッド実行後に保護をかける

以下のサンプル プロシージャのように、Copy メソッド実行後に Protect メソッドで保 護をかけてください。

Sub Sample2()
ActiveCell.Copy Range("A1")
ActiveSheet.Protect userinterfaceonly:=True
End Sub

詳細

  • 英語版 Excel でも同様です。
プロパティ

文書番号:414681 - 最終更新日: 2004/05/18 - リビジョン: 1

フィードバック