Вы можете сделать это в случае события Worksheet_Change
,
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 2 And Target.Column = 3 Then 'C2
If Target.Value <> "" Then
Range("C1").Value = Target.Value
End If
End If
End Sub
Формула =C2
или какой-либо вариант не сработает, поскольку не может запомнить значение, которое с тех пор было удалено. [ 117]
Полагаю, вы могли бы подделать формулу , как показано ниже, но я определенно не рекомендую ее, особенно в сочетании с кодом. Я просто публикую это из интереса.
Private Sub Worksheet_Change(ByVal Target As Range)
Static old As String
If Target.Row = 2 And Target.Column = 3 Then 'C2
If Target.Value <> "" Then
Range("C1").Formula = "=IF(N(""""),"""","""")&C2"
old = Target.Value
Else
Range("C1").Formula = "=IF(N(""" & old & """),"""","""")& """ & old & """"
End If
End If
End Sub
Это бессмысленно, потому что вам все равно нужен код.
Я полагаю, что даже для кода можно просто записать в именованный диапазон / значение, на которое ссылается формула:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value <> "" Then
ActiveWorkbook.Names.Add Name:="stored", RefersToR1C1:="=""" & Target.Value & """"
End If
End Sub
Создайте собственный уровень исключений.
DALExceptionManager DuplicateException DatabaseException
BLLExceptionManager NotAuthorizedException InvalidDateException
На уровне презентации добавьте эти ссылки и создайте общий обработчик исключений. Таким образом, вы знаете, как работать с сообщениями об исключениях.
Необходимо проверить блок обработки исключений в Библиотеке Предприятия. Много хороших советов и codeware, окружающего переносящиеся исключения и передающего их между слоями.
Где Ваш бизнес-слой, и почему не это проверяющий Авторизацию и целостность? DAL является слишком низким уровнем для проверки тех правил - при ударе проблемы там это - в значительной степени время для выдачи исключения. Ваш бизнес-слой или контроллеры могут поймать то исключение и отобразить разумное сообщение - но это не что-то, что необходимо регулярно делать.
Одна опция, что я думал об использовании, создают Ошибочный класс, но затем я должен был бы передать его от UI до бизнес-слоя и тогдашнего к уровню доступа к данным ссылкой
Я не уверен, что понимаю это. Вы не должны передавать ошибочный объект в каждом слое. Например, в одном из Вашего примера, errors that inform the user that something like this already exists in the database (say name not unique - for example)
, sql исключение могло быть выдано платформой, и просто необходимо поймать определенное исключение в бизнес-слое или уровне UI.
Блок обработки исключений библиотекой Enterprise, предложенной другими людьми, позволит Вам, определяют некоторую основанную на политике обработку исключений в Вашем web.config файле. Это могло быть хорошее место, если Вы хотите разработать некоторое корпоративное приложение. Но для простого приложения, Вы, возможно, должны не пойти настолько далеко.
То, что происходит на верхних уровнях, не до Вашего Уровня доступа к данным. Это не должно даже знать о том, что верхние уровни собираются сделать. Если у Вас есть дублирующаяся ключевая ошибка, то она должна бросить что-то как "DuplicateKeyException". Если необходимо поразить ошибку авторизации (я предполагаю, что Вы имеете в виду "исключение"), то ничего не делайте с ним - позволяют ему пузырь назад до уровня UI, который может отобразить соответствующую ошибочную страницу.
Помните, что ошибочные значения состояния и такие вещи являются причиной, мы изобрели исключения.
Блок обработки исключений библиотеки Enterprise является бомбой, как многие указали. Используя политики можно сделать вещи как вход исключения, перенеся его в другое исключение, выдав новое исключение вместо исходного. Кроме того, если Вы надеетесь выполнять определенные действия на основе ошибок аутентификации или копировать рекордные ошибки и т.д., Вы могли всегда создавать определенные полученные классы исключений и ловить те типы исключительной ситуации, которые будут устранять потребность передачи любых объектов от вершины вниз. Исключения должны всегда пузыриться не вниз.