Страницы: 1
RSS
Копирование только значений через ctrl-c ctrl-v
 
В принципе данный вопрос поднимался и есть решения, но не везде они полные . Я столкнулся с некоторыми проблемами которые не могу решить сам, прошу вас уважаемые специалисты помощи.

Цель: разрешить пользователям копирование через ctrl-c ctrl-v, но чтобы вставка была только значениий. А также очень желательно разрещить вставлять только в одну ячейку, вставку во можества запретить.
Насколько я понял существует 2 буфера обмена, один принадлежит "офису" другой винде, поэтому и надо проверять оба

Наверно нет смысла в прилагаемом файле, поэтому сильно не ругайте если прилагать надо что-то обязательно )
Вот что уже было найдено в том числе и на данном ресурсе.

есть следющий код:
В книге Workbook
Код
Private Sub Workbook_Activate()
 CopyOnlyValueOn
End Sub

Private Sub Workbook_Deactivate()
 CopyOnlyValueOff
End Sub

Private Sub CopyOnlyValueOn()
 With Application
     .OnKey "^x", ""
     .OnKey "^v", "PSpec"
     .CellDragAndDrop = False ' nelzja peretaskivat jacheiku
 End With
End Sub
 
Private Sub CopyOnlyValueOff()
 With Application
     .OnKey "^x"
     .OnKey "^v"
     .CellDragAndDrop = True
 End With
End Sub

в модуле
Код
Sub PSpec()

On Error GoTo CopAS
 Selection.PasteSpecial Paste:=xlPasteValues
Exit Sub

CopAS:
 On Error GoTo CopAS2
  ActiveSheet.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:=False

CopAS2:
  MsgBox "Error ALL"
  
 On Error GoTo 0

End Sub
Код рабочий кроме момента когда надо скопировать из другой книги книги экселя в текущую.
Из экспериментов я понял что проблема в том, что буфер очищается. Т.е. если я копирую из текстового файла или почты или данного файла и вставляю то все ОК, а если из другой книги то буфер  почемуто пустой и выдается ошибка в строке[
Код
ActiveSheet.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:=False

Вопрос первый: Почему буфер возвращается пустым? и как с этим бороться )
Вопрос второй: Помогите разобраться почему не не срабатывает тогда "On Error GoTo CopAS2" ведь нескольками строками кода ранее срабатывает без проблем

Заранее благодарю! )
 
опытным путем установил что при срабатывании ".CellDragAndDrop" буфер сбрасывается, но как быть если  эта строка нужна?
И было бы отлично если б подсказали, как перед вставкой проверить будет ли изменено много ячеек или только одна, чтобы разрешить/запретить вставку.

Может хоть направление куда рыть подскажете, а то я в тупике :)
 
Вставьте эти процедуры в модуль личной книги макросов:

Код
Sub SpecCellCopyPaste()
Application.OnKey "^{c}", "Cell"
Application.OnKey "^{v}", "CellPaste"
End Sub

Sub Cell()
Selection.Copy
End Sub

Sub CellPaste()
ActiveCell.PasteSpecial xlPasteValues
End Sub
В событии книги  личной книги макросов пропишите:
Код
Private Sub Workbook_Open()
Application.Run "SpecCellCopyPaste"
End Sub
Изменено: artemkau88 - 16.01.2021 18:30:13
Страницы: 1
Наверх