Добрый день! Подскажите, пожалуйста, можно макросом контролировать действие пользователя по вставке данных из буфера обмена? А именно контролировать параметр вставки - если юзер нажал Ctrl+V или вставил любым доступным способом, то вставка должна осуществиться с параметром "только значения".
Добрый день! Подскажите, пожалуйста, можно макросом контролировать действие пользователя по вставке данных из буфера обмена? А именно контролировать параметр вставки - если юзер нажал Ctrl+V или вставил любым доступным способом, то вставка должна осуществиться с параметром "только значения".Leprotto
Ну хоткей-то переназначить не трудно. В модуле ЭтаКнига записываете обработчик события:[vba]
Код
Private Sub Workbook_Open() On Error Resume Next Application.OnKey "^V", "SPPASTE_VAL" End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.OnKey "^V" End Sub
[/vba]а в стандартном модуле (но в принципе можно там же) процедуру:[vba]
Код
Private Sub SPPASTE_VAL() ' "Специальная вставка: ВСТАВИТЬ ТОЛЬКО ТЕКСТ" ' Сочетание клавиш ^V для вызова этой процедуры назначается при событии Workbook_Open On Error Resume Next Selection.PasteSpecial Paste:=xlValues If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:="Текст", Link:=False, DisplayAsIcon:=False If Err Then MsgBox "Ошибка " & Err.Number & vbCrLf & Err.Description End Sub
это уже посложнее будет, т.к. способов может быть несколько, а само событие "вставка" программно не обрабатывается.
Ну хоткей-то переназначить не трудно. В модуле ЭтаКнига записываете обработчик события:[vba]
Код
Private Sub Workbook_Open() On Error Resume Next Application.OnKey "^V", "SPPASTE_VAL" End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.OnKey "^V" End Sub
[/vba]а в стандартном модуле (но в принципе можно там же) процедуру:[vba]
Код
Private Sub SPPASTE_VAL() ' "Специальная вставка: ВСТАВИТЬ ТОЛЬКО ТЕКСТ" ' Сочетание клавиш ^V для вызова этой процедуры назначается при событии Workbook_Open On Error Resume Next Selection.PasteSpecial Paste:=xlValues If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:="Текст", Link:=False, DisplayAsIcon:=False If Err Then MsgBox "Ошибка " & Err.Number & vbCrLf & Err.Description End Sub
Ну да, конечно, основные способы вставки перехватываются точно так же:[vba]
Код
Private Sub Workbook_Open() On Error Resume Next Application.OnKey "^V", "SPPASTE_VAL" Application.OnKey "^{Insert}", "SPPASTE_VAL" Application.OnKey "+{Insert}", "SPPASTE_VAL" Application.OnKey "~", "SPPASTE_VAL" Application.OnKey "{Enter}", "SPPASTE_VAL" End Sub
[/vba]После этого останется, кажется, придумать как перехватить копирование драг-энд-дропом с зажатым Ctrl?
Ну да, конечно, основные способы вставки перехватываются точно так же:[vba]
Код
Private Sub Workbook_Open() On Error Resume Next Application.OnKey "^V", "SPPASTE_VAL" Application.OnKey "^{Insert}", "SPPASTE_VAL" Application.OnKey "+{Insert}", "SPPASTE_VAL" Application.OnKey "~", "SPPASTE_VAL" Application.OnKey "{Enter}", "SPPASTE_VAL" End Sub
[/vba]После этого останется, кажется, придумать как перехватить копирование драг-энд-дропом с зажатым Ctrl?Alex_ST