Я хочу реализовать сбрасываемое, переопределяемое значение ячейки по умолчанию в Экселе. Под этим я подразумеваю иметь ячейку, которая возвращается к значению «по умолчанию», полученному формулой поиска, зависящей от второй ячейки, когда эта вторая ячейка обновляется. У пользователя также есть возможность записать другое значение в исходную ячейку, которое останется до тех пор, пока вторая ячейка не будет обновлена в следующий раз.
Итак, вот ситуация; этот снимок относится к соответствующей области репозитория данных с несколькими рабочими листами. Две представляющие интерес ячейки для ясности выделены зеленым цветом, а самая верхняя видимая строка — это строка 1.
Ячейка Поиск элементовпринимает различные вводимые слова или фразы и имеет проверку данных, чтобы гарантировать, что только действительные входы возможны. Проверка данных берется из алфавитного списка возможных входных данных, а в ячейке есть опция раскрывающегося списка (отсюда и маленькая стрелка справа).
Ячейка Стекиспользует входные данные из ячейки Поиск элементовв следующей формуле...
=ЕСЛИ(СЧЁТЕСЛИ(C3:F315,J6),ВПР( J6,C3:F315,4,ЛОЖЬ),"~")
...где J6 — ячейка Item Search, а диапазон C3:F315 — соответствующая часть таблицы поиска на том же листе.
Вот что я хотел бы сделать в ячейке Stack...
Примечание. Любое значение, отображаемое в ячейке Stack, должно быть доступно для чтения формулами в других ячейках; а именно ячейки Buyи Sell, значения которых станут отношением значения поиска ячейки Stackк тому, что отображается в ячейке в данный момент.
Возможно ли это в какой-либо степени? Желательно (но не исключительно) без использования макросов. Эта книга предназначена для распространения среди других людей, при этом большая ее часть заблокирована и защищена, чтобы избежать каких-либо изменений в основных данных.
Заранее благодарю.
...но не совсем полное решение моего вопроса.
Вероятно, я мог бы использовать более одной ячейки для достижения той же (или похожей) эффективной функциональности (одна ячейка содержит значение по умолчанию, другая содержит возможное значение, введенное пользователем, а третья содержит соответствующее выходное значение), но это было бы не выглядеть так хорошо и не быть интуитивно понятным для конечного пользователя. Эта рабочая книга предназначена для распространения среди других людей, при этом большая ее часть заблокирована и защищена. -- Этот ответ нежелателен.
В своих поисках в Интернете, прежде чем задать этот вопрос, я нашел немного информации.В нем говорилось, что если я хочу, чтобы возврат к значению по умолчанию был автоматическим, то используйте следующий код в процедуре события изменения рабочего листа:
Private Sub Worksheet_Change (ByVal Target As Range)
Если Не Пересечение(Цель, Диапазон("C2")) Ничего, Тогда
Если Диапазон("C2").Value = "" Тогда
Диапазон ("C2"). Значение = 1234
Конец, если
Конец, если
Конец сабвуфера
Однако я не совсем понимаю, что под этим подразумевается и как это сделать.
-- C2 – номинальная ячейка, используемая в примере другого человека.
Кто-то спросил (возможно)аналогичный вопрос и был предоставлен этот ответ, связанный с использованием пользовательских числовых форматов. Будет ли пользовательский числовой формат принимать формулу, подобную той, которая в настоящее время используется в ячейке Stack?
Текущая и желаемая функциональность включены, элементы списка желаний еще впереди.Item-inary (public).xlsm- (MediaFire)
18 марта 2012 г., 07:40 UCT
Текущая и желаемая функциональность + «Список желаний 1».
Item-inary (public).xlsm- (Mediafire)
20 марта 2012 г., 19:50 UCT
Это мой код в его различных разделах до сих пор:
В ThisWorkbook
Public temp As Integer 'Used to contain Range("M6").Value once CheckBox5 is ticked
Public warn As Boolean 'True if CheckBox1 is ticked whilst (vVal = "~")
Private Sub Workbook_Open()
warn = False 'Initialise to False
End Sub
В Лист 1 (Прайс-лист)
Private Sub CheckBox1_Click()
If OLEObjects("CheckBox1").Object.Value = True Then
If Range("M6").Value = "~" Then
warn = True
Else
temp = Range("M6").Value
warn = False
End If
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim vVal As Variant
On Error GoTo Whoa
vVal = Application.Evaluate("=IF(COUNTIF(C3:F315,J6),VLOOKUP(J6,C3:F315,4,FALSE),""~"")")
'~~> If J6 has been changed, then continue. Otherwise skip.
If Not Intersect(Target, Range("J6")) Is Nothing Then
Application.EnableEvents = False
ActiveSheet.Unprotect ("012370asdf")
If vVal = "~" Then
Range("M6").Value = "~"
Range("M6:M7").Locked = True
Else
'~~> Check if CheckBox5 is ticked.
If OLEObjects("CheckBox5").Object.Value = True Then
'~~> Checks if CheckBox5 was ticked whilst (vVal = "~")
If warn = True Then
temp = vVal
warn = False 'Reset warn status now that special case is resolved
End If
Range("M6").Value = temp
Else
Range("M6").Value = vVal
End If
Range("M6:M7").Locked = False
End If
ActiveSheet.Protect ("012370asdf")
GoTo LetsContinue
End If
'~~> If M6 has been changed, then continue. Otherwise skip.
If Not Intersect(Target, Range("M6")) Is Nothing Then
Application.EnableEvents = False
If OLEObjects("CheckBox5").Object.Value = True Then
temp = Range("M6").Value
End If
GoTo LetsContinue
End If
LetsContinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox err.Description
Resume LetsContinue
End Sub
Этот код еще не включает какие-либо функции «Список желаний 2» , но в остальном работает нормально.
Большое спасибо тем, кто помог.