VBA - вставить событие и отменить последнее действие вставки - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь превратить свой Excel в Paste Values ​​вместо PasteAll с помощью VBA. Но я не могу этого добиться из-за сбоя строки:

lastAction = Application.CommandBars("Standard").Controls("&Undo").List(1)

Я использую код, как показано ниже. Может ли кто-нибудь помочь мне решить эту проблему? пожалуйста, исправьте и мой код, если я ошибаюсь.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim lastAction As String

Application.ScreenUpdating = False
Application.EnableEvents = False

lastAction = Application.CommandBars("Standard").Controls("&Undo").List(1)


If Left(lastAction, 5) = "Paste" Then

Application.ScreenUpdating = True
Application.EnableEvents = True

Application.Undo


Selection.PasteSpecial Paste:=xlPasteValues

End If

End Sub

1 Ответ

0 голосов
/ 22 июня 2020

Вот идеальное решение, которое я нашел

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim UndoList As String
 
    Application.ScreenUpdating = False
    Application.EnableEvents = False
 
    On Error GoTo Whoa
 
    '~~> Get the undo List to capture the last action performed by user
    UndoList = Application.CommandBars("Standard").Controls("&Undo").List(1)
 
    '~~> Check if the last action was not a paste nor an autofill
    If Left(UndoList, 5) = "Paste" Or UndoList = "Paste special" Then
    
    Application.ScreenUpdating = True
    
    
    On Error GoTo 0
 
    '~~> Undo the paste that the user did but we are not clearing the
    '~~> clipboard so the copied data is still in memory
    Application.Undo
 
    
    '~~> Do a pastespecial to preserve formats
    
    '~~> Handle text data copied from a website
     
    Target.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
    On Error GoTo 0
 
    '~~> Retain selection of the pasted data
    Union(Target, Selection).Select
    
    End If
 
 Application.EnableEvents = True
 
LetsContinue:
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...