私と私のチームが使用している Excel スプレッドシートがあります。このスプレッドシートでは条件付き書式を使用しているため、チームには Ctrl + V を使用せず、代わりに右クリックして [値として貼り付け] を使用するようにしてもらいたいです。Ctrl + V を使用すると、条件付き書式が時間の経過とともに断片化します。このことをチームに伝え、データの検証を使用してポップアップ メッセージのリマインダーを追加しましたが、それでも Ctrl + V が使用されています。
Ctrl + V による貼り付けを無効にし、Ctrl + V にメッセージボックスを追加したいと思います。
これが私の VBA です (pasteWarn() を Ctrl + V にバインドしました)。まったく効果がないようです。msgbox は表示されず、Ctrl + V は通常どおり機能します。
Sub pasteGone()
'Disable CTRL + V.
Application.OnKey "^{v}", "" 'Paste
End Sub
Sub pasteWarn()
' Bind this to Ctrl + V
MsgBox "Ctrl + V has been disabled. Please right-click and use 'Paste as Values'."
End Sub
起こりうる問題: 私と私のチームは、Office 2016、2013、2010 を混在して使用しています。(私は 2016 を使用していますが、他のメンバーは全員 2010 または 2013 を使用しています。)
答え1
これは質問に対する答えではありませんが、とにかく問題を解決する方法である可能性があります。
ユーザーにワークブックへの適応を強制するのではなく、ワークブックがワークブックに合わせて入力を適応させるようにします。
つまり、ユーザーが何かを貼り付けるときに、その操作を元に戻し、代わりに値として貼り付けます。
こうすることで、CTRL+V で貼り付けることができ、正しいままになります。
コードの lastAction 行にブレーク ポイントを設定し、自分の言語で「貼り付け」が何であるかを確認してから、それを If で使用する必要があります。
Private Sub Worksheet_Change(ByVal Target As Range)
lastAction = Application.CommandBars("Standard").FindControl(ID:=128).List(1)
If lastAction = "Paste" Then ' change to your language
With Application
.EnableEvents = False
.Undo
End With
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.EnableEvents = True
End If
End Sub
上記のコードを、これを適用するシートに追加します。PasteValues をシートの一部のみに制限する場合は、ターゲットを使用することもできます。
答え2
以前、同様の問題がありましたが、私が見つけた唯一の回避策は、ユーザーがコピーできないようにすることでした。(ユーザーがまだコピーを使用する必要があるかもしれないので、これがまさにあなたが求めているものではないことは承知しています)
私は以下を使用しました:
Private Sub Workbook_Activate()
Application.CutCopyMode = False
Application.OnKey "^c", ""
Application.CellDragAndDrop = False
End Sub
Private Sub Workbook_Deactivate()
Application.CellDragAndDrop = True
Application.OnKey "^c"
Application.CutCopyMode = False
End Sub
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
Application.CutCopyMode = False
Application.OnKey "^c", ""
Application.CellDragAndDrop = False
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Application.CellDragAndDrop = True
Application.OnKey "^c"
Application.CutCopyMode = False
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Application.CutCopyMode = False
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Application.OnKey "^c", ""
Application.CellDragAndDrop = False
Application.CutCopyMode = False
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Application.CutCopyMode = False
End Sub
Private Sub Workbook_Open()
MsgBox "Copying and Pasting into the skills matrix has been disabled to prevent changes in the workbook functionality."
End Sub