Введите следующий макрос событий в область кода листа Sheet2
:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim A As Range
Set A = Range("A5:A10")
If Intersect(Target, A) Is Nothing Then Exit Sub
Cancel = True
Application.EnableEvents = False
Target.Copy Sheets("Sheet1").Range("C3")
Application.EnableEvents = True
End Sub
Обратите внимание, что код использует Sheet1, а не Sheet 1. (измените это, если вы используете Sheet 1
)
Поскольку это код рабочего листа, его очень легко установить и использовать автоматически:
- щелкните правой кнопкой мыши имя вкладки в нижней части окна Excel
- выберите View Code - откроется окно VBE
- вставьте материал и закройте окно VBE
Если у вас есть какие-либо проблемы, сначала попробуйте на пробную версию.
Если вы сохраните книгу, макрос будет сохранен вместе с ней.
Если вы используете версию Excel более поздней, чем в 2003 году, вы должны сохранить файл как .xlsm, а не .xlsx
Чтобы удалить макрос:
- вызвать окна VBE, как указано выше
- очистить код
- закройте окно VBE
Чтобы узнать больше о макросах в целом, смотрите:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
а также
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
Чтобы узнать больше о макросах событий (код листа), см .:
http://www.mvps.org/dmcritchie/excel/event.htm
Макросы должны быть включены, чтобы это работало!
EDIT # 1:
Чтобы разрешить макросу размещать данные на защищенном листе:
- Снять защиту с листа
- Разблокировать определенные клетки, такие как C3
- Повторно защитить лист
Это позволит макросу (и пользователю) вводить данные на листе и при этом защищать формулы и т.д.
EDIT # 2:
Чтобы избежать копирования в формате, используйте вместо этого:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim A As Range
Set A = Range("A5:A10")
If Intersect(Target, A) Is Nothing Then Exit Sub
Cancel = True
Application.EnableEvents = False
Target.Copy
Sheets("Sheet1").Range("C3").PasteSpecial Paste:=xlPasteValues
Application.EnableEvents = True
End Sub
Чтобы «запустить» подпрограмму после ошибки, поместите этот макрос в стандартный модуль и запустите его:
Sub qwerty()
Application.EnableEvents = True
End Sub