К сожалению, этот метод подходит исключительно для запрета вставки скопированных диапазонов (ячеек), т.к. они вставляются из буфера обмена Excel'я, в котором хранится ссылка на объект Range со всеми его причиндалами (форматированием, формулами, валидацией и т.д.) А если скопирован, например, текст, то виндовый буфер не чистится и вставка проходит нормально.
К сожалению, этот метод подходит исключительно для запрета вставки скопированных диапазонов (ячеек), т.к. они вставляются из буфера обмена Excel'я, в котором хранится ссылка на объект Range со всеми его причиндалами (форматированием, формулами, валидацией и т.д.) А если скопирован, например, текст, то виндовый буфер не чистится и вставка проходит нормально.Alex_ST
Можно, конечно, просто стирать виндовый буфер при обращении к ячейкам, куда копирование нужно запретить. Но тогда если всё-таки нажать "Вставить", информация, которая была в выбранной ячейке, затрётся (но это можно отменить, в отличие от работы обычного макроса[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Intersect(Target, Range("C1")) Is Nothing Then ClearClipBoard End Sub
Sub ClearClipBoard() ' очистить буфер обмена With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText "" .PutInClipBoard End With End Sub
[/vba]
Можно, конечно, просто стирать виндовый буфер при обращении к ячейкам, куда копирование нужно запретить. Но тогда если всё-таки нажать "Вставить", информация, которая была в выбранной ячейке, затрётся (но это можно отменить, в отличие от работы обычного макроса[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Intersect(Target, Range("C1")) Is Nothing Then ClearClipBoard End Sub
Sub ClearClipBoard() ' очистить буфер обмена With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText "" .PutInClipBoard End With End Sub