Tengo una hoja de cálculo de Excel que usamos yo y mi equipo. Esta hoja de cálculo usa formato condicional, por lo que me gustaría que mi equipo NO use Ctrl + V y en su lugar haga clic derecho y use "pegar como valores". Cuando usan Ctrl + V, el formato condicional se fragmenta con el tiempo. Les conté sobre esto y agregué un mensaje emergente recordatorio usando la Validación de datos, ¡pero todavía usan Ctrl + V!
Quiero deshabilitar el pegado con Ctrl + V y agregar un cuadro de mensaje a Ctrl + V.
Aquí está mi VBA (enlacé PastWarn() a Ctrl + V). No parece tener ningún efecto: el cuadro de mensajes no aparece y Ctrl + V funciona normalmente.
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
Posible complicación: mi equipo y yo usamos una combinación de Office 2016, 2013 y 2010 (estoy en 2016; todos están en 2010 y 2013).
Respuesta1
Esta no es una respuesta a la pregunta tal como está, pero quizás una forma de resolver el problema de todos modos.
En lugar de obligar a los usuarios a adaptarse al libro de trabajo, haga que el libro de trabajo adapte la entrada para adaptarse al libro de trabajo.
Es decir, cuando el usuario pega algo, deshace lo que hizo y pégalo como valores.
De esa manera pueden pegar con CTRL+V y seguirá siendo correcto.
Debe establecer un punto de interrupción en el código en la línea lastAction y ver qué es "Pegar" en su idioma y luego usarlo en 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
Agregue el código anterior a las hojas en las que desea esto. También puede utilizar Target si desea limitar PasteValues a solo una parte de la hoja.
Respuesta2
Tuve un problema similar anteriormente, la única solución que pude encontrar fue evitar que el usuario pudiera copiar. (Sé que puede que esto no sea exactamente lo que buscas, ya que es posible que aún necesiten usar una copia)
Usé lo siguiente:
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