[[20150930100952]] 『ロックしてシート保護をかけているが、セルのコピ』(がぅ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ロックしてシート保護をかけているが、セルのコピーを禁止したい』(がぅ)

セルにロックをかけてシート保護している書類があります。
入力はさせるけど、セルの色づけ等を出来なくさせる為です。
色づけをするのは、管理者がチェックをしたら保護を解除し、色づけをして、また保護をかけるという流れにしています。
ですが、既に色づけされた部分は管理者以外でも普通にコピー出来てしまいます。
何か対応策はありませんか?

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 禁止したい操作は、コピペのためにそのセルを選択してしまうということですか?
 シート保護時、操作者に許可する操作のうち、「ロックされたセルの選択」のチェックははずしていますか?

 もっとも、こうしても、名前ボックスで、そのセル(領域)を指定して、 あるいは、このセルを囲むようにしてロックされていないセルがあれば、
 そこを選択してCtrl/c をやれば、コピーできちゃいますけど。

 「ふつうには」コピーできないということで?

 これも制約しようとすれば、マクロを絡めた、しかも、結構大がかりな仕組みが必要でしょうね。

(β) 2015/09/30(水) 10:39


 色付けをする時に、どこかチェック入力欄を作ってそこに入力があったら該当セルに
 色がつくように条件付き書式を設定するとか…
 相対参照にしておけばセルをコピーした段階で参照先が変わるので色がつかなくなるのでは
 ないかと思うのですが。

 >セルにロックをかけて
 ロックを外してるんですよね。
(コナミ) 2015/09/30(水) 11:01

Dim flg
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

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

Dim flg As Boolean

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

Dim flg As Boolean

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.