2013-06-05 7 views
0

Я хотел бы запретить редактирование ячейки, поскольку мне нужно сохранить формулу в ней. Проблема в том, что я хочу скопировать вставки большой диапазон значений из другой книги в мой лист, а целевой диапазон для вставки включает некоторые ячейки, которые не должны меняться. Таким образом, простая функция блокировки не будет работать, так как это помешает мне выполнить эту операцию за один раз.Excel VBA - запретить изменение ячейки при редактировании

Я попытался использовать код, в котором ячейка меняет свою формулу после изменения ячейки, однако это дает бесконечный цикл. См. Упрощенный пример ниже:

Private Sub Worksheet_Change(ByVal Target As Range) 


If Not Intersect(Target, Range("F28")) Is Nothing Then 
    Range("F28").Formula = "=if(E28=0,0,G28/E28)" 
End If 

End Sub 

Большое спасибо за вашу помощь, высоко оценили.

Редактировать: Автоматическое решение, которое будет передаваться из этой другой книги, не будет работать, поскольку я получаю эти файлы в различных форматах и ​​именах книг.

+1

Я предполагаю, что вы добавили этот код на лист, в который вы вставляете (а не в стандартный модуль для книги). Оберните If/EndIf в Application.EnableEvents = False и Application.EnableEvents = True, чтобы избежать бесконечного цикла. – chuff

+0

@chuff, извините, я не видел ваши комментарии раньше ... –

+0

спасибо, очень признателен! – jcv

ответ

2

Если ваша проблема бесконечная петля, чем здесь, то это довольно распространенное решение проблемы. Вам просто нужно отключить события на некоторое время, а затем переключить их обратно. Ваш код может выглядеть так:

Private Sub Worksheet_Change(ByVal Target As Range) 
    'turns off events 
    Application.EnableEvents = False 
If Not Intersect(Target, Range("F28")) Is Nothing Then 
    Range("F28").Formula = "=if(E28=0,0,G28/E28)" 
End If 
    'turns on events back 
    Application.EnableEvents = True 
End Sub 
0

Вы должны сделать Sub, который вводит формулы «резидент». Просто позвоните этому югу после вставки новых значений.

+0

Спасибо за быстрый ответ marlenunez. Как я могу позвонить другому подразделению? Можете ли вы указать пример в коде - это было бы очень оценено. – jcv

Смежные вопросы