Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows XP Home Edition : Excel 2002)
シート保護下では、書式貼り付けボタンを使用不可にできませんか
投稿日時: 17/12/13 10:29:21
投稿者: ISBSGR

書式コピー貼り付けボタンは、シート保護下でも使えてしまい、cutcopymode=falseのマクロでは阻止できないことが判明。困ります。ユーザーが誤って使うことは無いとは思いますが、不安です。使えなくする方法はないでしょうか。

回答
投稿日時: 17/12/13 11:34:15
投稿者: WinArrow
投稿者のウェブサイトに移動

シート保護の設定方法に依存します。
 
「ロックされた範囲を選択」
「ロックされていない範囲を選択」
の両方のチェックを外します。
 
これで、どのセルにもカーソルが移動されなくなります。
 
 

回答
投稿日時: 17/12/13 11:36:02
投稿者: WinArrow
投稿者のウェブサイトに移動

>cutcopymode=falseのマクロでは阻止
この命令は、クリップボードを空にする命令で
複写/移動を制御することはできません。

投稿日時: 17/12/13 12:57:19
投稿者: ISBSGR

両方のチェックを外したのでは、データが全く入力できなくなり、見るだけのシートならともかく、役に立ちません。

回答
投稿日時: 17/12/13 17:14:17
投稿者: WinArrow
投稿者のウェブサイトに移動

ISBSGR さんの引用:
両方のチェックを外したのでは、データが全く入力できなくなり、見るだけのシートならともかく、役に立ちません。

 
その通りで、・・・・・当たり前です。
 
少し、説明が不足しました。
 
シート保護のダイアログに書かれている文言をみると
「チェックを入れる」ことは、その行為を許可する
ということなので、
あなたの意志で選択してほしいです。

投稿日時: 17/12/14 11:34:20
投稿者: ISBSGR

Excel2007以前のバージョンでは、簡単な1行の記述で使用不可にできましたが、Excel2007以降には通用しません。互換性が無くなったと言うことです。cutcopymode=falseのマクロを使うと、編集メニューや右クリックメニューからの書式コピーは阻止できますが、書式コピー/貼り付けボタンからは書式コピーを阻止できません。

回答
投稿日時: 17/12/14 23:16:48
投稿者: WinArrow
投稿者のウェブサイトに移動

確かに、シートの保護してもロックを掛けたセルにカーソルをおいてから、「書式コピー/貼り付けボタン」
をクリックすると、書式は複写できてしまいますね・・・・
 
1つの対応策として
コピーイベントがありませんから、
シートのDeactiveイベントで制御する方法を紹介します。
 
シートモジュールに記述していますが、
複数のシートで制御したい場合は、ThisWorkbookモジュールに記述するとよいでしょう。
 
Private Sub Worksheet_Deactivate()
    If Application.CutCopyMode Then
        If Selection.Locked Then
            Application.CutCopyMode = False
            MsgBox "コピーを拒否します。"
        End If
    End If
End Sub

回答
投稿日時: 17/12/15 09:42:43
投稿者: mattuwan44

ども。。。
 
オートフィルでも書式が崩れちゃいますので、完璧に防ぐことはできなさそうですね。
要望としてはありそうな要件なので、マイクロソフトが対応してくれるといいのですが、、、、
日本以外では用が無いのかな?
 
対応策を考察してみた結果
1.マクロを使う前提なので、任意のタイミングで書式を初期化しちゃう(元に戻す)のはいかがでしょうか?
1)changeイベントで、いちいちシートを初期化する
2)見たいときに初期化する
3)印刷するときに初期化する
etc....
 
 
戻し方としては、
1)マクロにルールを書く
2)非表示の雛型シートから書式をコピペする。
とかでしょうか?

投稿日時: 17/12/15 14:39:38
投稿者: ISBSGR

  mattuwan44さんご指摘の通り、オートフィルが使えてしまいますね。ビックリしました。メニューやボタンは一応は全部調べ、書式貼り付けボタンだけがガンになっていると思っていました。オートフィルについては、マクロでFalseを設定すると不可にできますが、アプリケーションレベルの設定になるので、同時に開いている他のブックにも適用されてしまいます。しかし、Deactivateで復活できるので問題はなさそうで。
  書式を初期化するプランは、データ入力されたシートをどの時点で初期化するかの問題や、シートも多いので簡単には行きません。今のところ、簡単な対応がなさそうなので、ファイルを開くときに、ボタンを使わないようにお願いするメッセージを表示させるしかなさそうに感じていますが、もしかして画期的な回答をいただけるかも知れないので、もうしばらく開けておきます。

回答
投稿日時: 17/12/15 15:53:01
投稿者: mattuwan44

メッセージ案は個人的に嫌いです。。。。うるさいだけ。慣れたら読まずに飛ばす。
雛型案はまぁ1回作ればいいだけなので、、、、まぁ、個人によって受け取り方は違います。
 
(Windows XP Home Edition : Excel 2002)
↑これが仕様ですか?
2002は出来るかどうか解んないですけど、貼りつけた後、貼り付け方を変えれるような設定があります。
そちらでやってみてもらって、見た目がおかしくなったら、値貼り付けにかえる操作を覚えてもらった方が
よいかと。
あと、マクロでコントロールすると「元に戻す」が出来なくなるので、
元に戻すの使い方も含めて、標準の操作を覚えてもらった方が、だれもが幸せな気がします。

回答
投稿日時: 17/12/15 17:08:54
投稿者: WinArrow
投稿者のウェブサイトに移動

↓コピー範囲を取得する例のページを見つけました。
 
http://www.saka-en.com/office/vba-get-copy-cell-excel/
 

回答
投稿日時: 17/12/15 18:04:26
投稿者: WinArrow
投稿者のウェブサイトに移動

↑で紹介したコードは、コマンドに「コピー」対応です。
書式コピー/貼付けには対応してないようです。

投稿日時: 17/12/15 22:44:34
投稿者: ISBSGR

  皆さんありがとうございました。申し遅れましたが、作成ブックは不特定の人に配布しますので、色々と拘っています。なので、精神論や使い方の詳しい説明等は通用しません。一人歩きします。また、1年ごとに改良する予定です。
  結論として、ブックを開いた時に、全画面表示として、書式貼り付けボタンが見えないようにしたいと考えています。こうすれば、表示画面が大きくなるので、操作し易くなることと、横長ディスプレーが一般的になっているので、メニュー画面が非表示になれば、格段に操作し易くなるので、元に戻して書式コピーボタンを使う人など殆ど無いと想定されるので、今のところは、これしか無いの思いです。ただし、保険としてボタンを使わないようにお願いするメッセージは表示させる予定です。