[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ロックしてシート保護をかけているが、セルのコピーを禁止したい』(がぅ)
セルにロックをかけてシート保護している書類があります。
入力はさせるけど、セルの色づけ等を出来なくさせる為です。
色づけをするのは、管理者がチェックをしたら保護を解除し、色づけをして、また保護をかけるという流れにしています。
ですが、既に色づけされた部分は管理者以外でも普通にコピー出来てしまいます。
何か対応策はありませんか?
< 使用 Excel:Excel2013、使用 OS:Windows7 >
禁止したい操作は、コピペのためにそのセルを選択してしまうということですか? シート保護時、操作者に許可する操作のうち、「ロックされたセルの選択」のチェックははずしていますか?
もっとも、こうしても、名前ボックスで、そのセル(領域)を指定して、 あるいは、このセルを囲むようにしてロックされていないセルがあれば、 そこを選択してCtrl/c をやれば、コピーできちゃいますけど。
「ふつうには」コピーできないということで?
これも制約しようとすれば、マクロを絡めた、しかも、結構大がかりな仕組みが必要でしょうね。
(β) 2015/09/30(水) 10:39
色付けをする時に、どこかチェック入力欄を作ってそこに入力があったら該当セルに 色がつくように条件付き書式を設定するとか… 相対参照にしておけばセルをコピーした段階で参照先が変わるので色がつかなくなるのでは ないかと思うのですが。
>セルにロックをかけて ロックを外してるんですよね。 (コナミ) 2015/09/30(水) 11:01
If ActiveSheet.ProtectContents = False Then Exit Sub
If Target.Interior.Color <> RGB(255, 255, 255) Then
flg = True
Application.CellDragAndDrop = False
Exit Sub
End If
If flg = True Then Application.CutCopyMode = False: flg = False: Application.CellDragAndDrop = True
End Sub
(mm) 2015/09/30(水) 11:40
mmさんのコードでコピペはできなくなるけど、たとえばA1セルに色が塗ってあると キーボードのショートカットキーで右(または下)に色をコピーできちゃいますね。 Ctrl + Cとかじゃないやつで。 (se_9) 2015/09/30(水) 11:50
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveSheet.ProtectContents = False Then Exit Sub
If Target.Row > 1 Then
If Target.Offset(-1, 0).Interior.Color <> RGB(255, 255, 255) Then Application.MacroOptions Macro:="Sheet1.ctrl_d", Description:="", ShortcutKey:="d" Else Application.MacroOptions Macro:="Sheet1.ctrl_d", Description:="", ShortcutKey:="" End If End If
If Target.Column > 1 Then
If Target.Offset(0, -1).Interior.Color <> RGB(255, 255, 255) Then Application.MacroOptions Macro:="Sheet1.ctrl_r", Description:="", ShortcutKey:="r" Else Application.MacroOptions Macro:="Sheet1.ctrl_r", Description:="", ShortcutKey:="" End If End If
If Target.Interior.Color <> RGB(255, 255, 255) Then
flg = True
Application.CellDragAndDrop = False
Exit Sub
End If
If flg = True Then
Application.CutCopyMode = False
Application.CellDragAndDrop = True
flg = False
End If
End Sub
Sub ctrl_d() 'ダミー
End Sub
Sub ctrl_r() 'ダミー
End Sub
(mm) 2015/09/30(水) 13:19
自分で試してみて、管理者の作業が、ちょっと面倒かなとも思いますが。
色付きセル(を含んだセル領域)が選択されたら、エクセルシートの最後のセル(最終行,最終列) に 【弾き飛ばします】
管理者が選択しても弾き飛ばされるので、管理者の作業前に、VBE画面で表示->イミディエイトウィンドウで イミディエイトウィンドウを表示して、そこに Application.EnableEvents = False と打ち込んでエンター。 作業が終われば、そこに Application.EnableEvents = True と打ち込んでエンター。
操作者に、その操作をさせないために、マクロ全体(VBAProject)にパスワード保護をかけておきましょう。
万が一、管理者が元戻しを忘れても、いったんブックを保存してエクセルを終了されれば、自動的に元戻しにはなりますが。
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim z As Variant Dim ng As Boolean
z = Target.Interior.ColorIndex If IsNull(z) Then ng = True ElseIf z <> xlNone Then ng = True End If
Application.EnableEvents = False If ng Then Application.Goto Cells(Rows.Count, Columns.Count) Application.EnableEvents = True
End Sub
(β) 2015/09/30(水) 15:19
マクロだと開発タブのコントロール-デザインモードをオンにすると実行されなくなるので注意が必要。 (ねむねむ) 2015/09/30(水) 15:25
Private Sub Worksheet_Activate()
If Application.ShowDevTools = True Then
Application.ShowDevTools = False
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim nam As String
nam = ActiveSheet.Name
If Application.ShowDevTools = True Then
Application.ShowDevTools = False
End If
If ActiveSheet.ProtectContents = False Then Exit Sub
If Target.Row > 1 Then
If Target.Offset(-1, 0).Interior.Color <> RGB(255, 255, 255) Then Application.MacroOptions Macro:=nam & ".ctrl_d", Description:="", ShortcutKey:="d" Else Application.MacroOptions Macro:=nam & ".ctrl_d", Description:="", ShortcutKey:="" End If End If
If Target.Column > 1 Then
If Target.Offset(0, -1).Interior.Color <> RGB(255, 255, 255) Then Application.MacroOptions Macro:=nam & ".ctrl_r", Description:="", ShortcutKey:="r" Else Application.MacroOptions Macro:=nam & ".ctrl_r", Description:="", ShortcutKey:="" End If End If
If Target.Interior.Color <> RGB(255, 255, 255) Then
flg = True
Application.CellDragAndDrop = False
Exit Sub
End If
If flg = True Then
Application.CutCopyMode = False
Application.CellDragAndDrop = True
flg = False
End If
End Sub
Sub ctrl_d() 'ダミー
End Sub
Sub ctrl_r() 'ダミー
End Sub
(mm) 2015/09/30(水) 16:16
>>マクロだと開発タブのコントロール-デザインモードをオンにすると実行されなくなるので注意が必要。
あっ! そうですねぇ。まいりましたね。
Application.CutCopyMode を、あれこれやる別案も考えたのですが、いずれにしても、マクロが動いてなんぼですから・・・
(mm) さんのコードのように、If Application.ShowDevTools = True Then 以降の処理をしたとしても 操作者がオプション設定で開発タブを表示してしまえばおしゃかですし。 (それとは関係ないのですが、ブックを開いたときに当該シートがアクティブシートの場合、Activateは発生しないので Workbook_Open あたりでの処置も必要になると思います)
(β) 2015/09/30(水) 16:39
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.