
estou usandoExcel 2013para criar uma pasta de trabalho que será preenchida por um usuário final, honestamente tenho muitas validações, então quando o usuário está tentando colar mais de 2.000 linhas leva muito tempo.
Meu problema não é com o desempenho, só quero exibir ummessage box
se o usuário está tentando colar mais de2.000 linhas. Procurei no Google, mas não consegui encontrar informações sobre isso.
Responder1
Desculpas, este não é o código da resposta, mas é uma abordagem.
Basicamente, isso será difícil, pois não há uma maneira fácil de saber quando o usuário está prestes a colar os dados. Obter os dados da área de transferência não é tão difícil, mas interceptar a pasta é.
Para recuperar os dados da área de transferência, consulte o seguinte MSDNartigo.
Para interceptar a colagem, uma ideia seria examinar a renderização atrasada, conforme mencionado emesseResposta StackOverflow.
Talvez seja mais fácil ter um botão 'Verificar área de transferência' que seus usuários pressionem antes de colar?
Responder2
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
Pegue esse código e coloque em uma nova planilha, funcionará 100% na colagem e você poderá modificar a mensagem como quiser.
Mas, honestamente, se você estiver tentando excluir mais de 2.000 linhas, um erro aparecerá.
Outro problema que não consegui colocar esse código no código da minha planilha não sei qual é o problema não está funcionando.