Excel — вставьте ctrl-v без форматирования, если буфер обмена содержит текст или диапазон

У меня есть документ 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 покажется сложной задачей, которая может помешать работе самого буфера обмена.

Также открыт для любых других методов, которые работают.

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
0
84
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте этот код:

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

Другие вопросы по теме