У меня есть документ Excel с достаточно сложным условным форматированием. Группа пользователей не знакома с электронными таблицами и в основном использует их для выравнивания текста в таблицах, поэтому я не могу рассчитывать на обучение вставке специальных значений; если Ctrl-V этого не делает, этого не происходит. Аналогичным образом модифицирую мой экземпляр Excel с помощью быстрого доступа или аналогичного.
Я дошел до простого макроса VBA, к которому могу переназначить ctrl-v. Есть две однострочные команды, которые работают, но каждая только для определенного типа контента. Это макрос:
Sub paste_value()
'
' paste_value Macro
' paste value only, preserving format
'
' Keyboard Shortcut: Ctrl+v
'
ActiveSheet.PasteSpecial Format: = "Text", Link:=False, DisplayAsIcon:= _
False
Selection.PasteSpecial Paste:=xlPasteValues
End Sub
ActiveSheet.PasteSpecial работает, если в буфере обмена содержится текст, чаще всего из другой программы, но Selection.PasteSpecial выдает ошибку времени выполнения 1004.
Selection.PasteSpecial работает, если буфер обмена содержит диапазон Excel, но ActiveSheet.PasteSpecial выдает ошибку времени выполнения 1004.
Тест, позволяющий увидеть, что находится в буфере обмена, и выбрать соответствующую команду может сработать, но я понятия не имею, как провести этот тест. Некоторый быстрый поиск в Google покажется сложной задачей, которая может помешать работе самого буфера обмена.
Также открыт для любых других методов, которые работают.


Попробуйте этот код:
Sub paste_value()
'
' paste_value Macro
' paste value only, preserving format
'
' Keyboard Shortcut: Ctrl+v
'
On Error Resume Next
ActiveSheet.PasteSpecial Format: = "HTML", Link:=False, _
DisplayAsIcon:=False, NoHTMLFormatting:=True
If Err = 0 Then Exit Sub
Selection.PasteSpecial Paste:=xlPasteValues
End Sub
Ответ MGonet хорош. Использовать состояние ошибки для выхода из ситуации — это очень круто; Я также сделал одну модификацию для обработки обычного текста:
Sub paste_value()
'
' paste_value Macro
' paste value only, preserving format
'
' Keyboard Shortcut: Ctrl+v
'
On Error Resume Next
ActiveSheet.PasteSpecial Format: = "Text", Link:=False, DisplayAsIcon:= _
False
If Err = 0 Then Exit Sub
ActiveSheet.PasteSpecial Format: = "HTML", Link:=False, _
DisplayAsIcon:=False, NoHTMLFormatting:=True
If Err = 0 Then Exit Sub
Selection.PasteSpecial Paste:=xlPasteValues
End Sub