
estoy usandoexcel 2013Para crear un libro de trabajo que será llenado por un usuario final, honestamente, tengo muchas validaciones, por lo que cuando el usuario intenta pegar más de 2000 filas, lleva mucho tiempo.
Mi problema no es con el rendimiento, solo quiero mostrar un mensaje message box
si el usuario intenta pegar más de2000 filas. Lo busqué en Google pero no encontré información al respecto.
Respuesta1
Disculpas, este no es el código para la respuesta, pero es un enfoque.
Básicamente, esto va a ser difícil, ya que no hay una manera fácil de saber cuándo el usuario está a punto de pegar datos. Obtener los datos del portapapeles no es tan difícil, pero interceptar el pegado sí lo es.
Para recuperar los datos del portapapeles, consulte el siguiente MSDNartículo.
Para interceptar la pasta, una idea sería considerar el renderizado retrasado como se menciona enesteRespuesta de StackOverflow.
¿Podría ser más fácil tener un botón 'Verificar portapapeles' que sus usuarios presionen antes de pegar?
Respuesta2
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sLastOp As String
Dim cell As Range
Dim a As Integer
Dim Row As Range
a = 0
For Each Row In Range(Target.Cells.Address)
If InStr(Row.Address, "A") Then
a = a + 1
End If
Next
'--get the last operation from the undo stack
sLastOp = Application.CommandBars("Standard").FindControl(ID:=128).List(1)
Select Case sLastOp
'--if last operation was Paste or PasteSpecial, display message
Case "Paste", "Paste Special"
If a > 200 Then MsgBox "Please wait till pasting finishes." & a, vbOKOnly
Case Else 'do nothing
End Select
End Sub
Toma este código y ponlo en una hoja nueva, funcionará al 100% al pegarlo y podrás modificar el mensaje como quieras.
Pero, sinceramente, si intentas eliminar más de 2000 filas, aparecerá un error.
Otro problema: no pude poner este código en el código de mi hoja. No sé cuál es el problema, no funciona.