Учетные данные Excel l oop - только вставка значения / форматирование назначения - PullRequest
0 голосов
/ 21 апреля 2020

Мои пользователи застревают в проверке учетных данных l oop, если они по ошибке вставляют элементы, в которых есть HTML, в электронную таблицу Excel. Иногда они вставляются из внешнего вида или из других источников, а иногда они вставляются из рабочей книги. Я хочу создать горячую клавишу micro, которая будет вставлять только значение или текст в буфер обмена. Это код, записанный при вставке из каждого сценария.

'pasting excel cell
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
'pasting from Outlook/Word
ActiveSheet.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:= _
    False, NoHTMLFormatting:=True

Из того, что я исследовал, ясно, что объекты Selection и ActiveSheet по-разному обрабатывают PasteSpecial. Единственное, в чем я не уверен, так это как проверить, на какой объект нужно ссылаться для вставки текста в выбранную ячейку, чтобы это было максимально незаметно для моих пользователей.

1 Ответ

1 голос
/ 22 апреля 2020

Это не ответ, но некоторый код, который поможет вам начать с захвата события Paste на листе в Excel. Оттуда вы можете объединить его с получением данных непосредственно из буфера обмена, или, возможно, текст Undo.List будет отличаться при вставке из Excel против Outlook / Word, и вы можете обрабатывать соответственно.

Private Sub Worksheet_Change(ByVal Target As Range)

    'unlock cells that get locked on paste operation
    Dim undoAction As String
    On Error Resume Next 'for when there is nothing in undo stack
    undoAction = Application.CommandBars("Standard").Controls("&Undo").List(1)
    On Error GoTo 0

    'this was specific to my needs, but you can play with it to help with your needs
    If Left(undoAction, 5) = "Paste" Then Target.Locked = False

End Sub

Эта информация о Как Получить текст из буфера обмена также может быть полезным. Дублирующий код ниже на случай разрыва связи в будущем.

Function FnGetTextFromClipBoard() 

    Dim objData As New MSForms.DataObject
    Dim strText

       objData.GetFromClipboard
       strText = objData.GetText()

       'MsgBox strText
       FnGetTextFromClipBoard = strText

End Function 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...