Я пытаюсь создать форму, которая, надеюсь, автоматически обновляет список значений для определенного выпадающего списка (без кодов VBA) сразу после ввода пользователя.
Вот форма, которую увидит пользователь:
В настоящее время обе колонки F и H основаны на формуле проверки данных:
INDIRECT("VList!"&SUBSTITUTE(ADDRESS(1,MATCH($B11,VList!$1:$1,0),1),"1","")&"2:"&SUBSTITUTE(ADDRESS(1,MATCH($B11,VList!$1:$1,0),1),"1","")&COUNTA(INDIRECT("VList!"&ADDRESS(1,MATCH($B11,VList!$1:$1,0),4)&":"&ADDRESS(100,MATCH($B11,VList!$1:$1),4))))
... где VList
относится к листу, как показано ниже:
Итак, мой вопрос здесь в том, что, основываясь на имени проекта в столбце B, есть ли способ обновить список в листе VList со значением "Cost Per Unit" [Cell E11]
, чтобы раскрывающийся список в F12
и H12
автоматически обновлялся со значением "Cost Per Unit"
?
Я долго изучал это безрезультатно, поэтому я надеюсь найти здесь некоторых экспертов, чтобы увидеть, возможен ли такой сценарий без VBA. Спасибо!
Редактировать: Итак, мне сказали, что коды VBA могут запускаться автоматически при изменении значения ячейки, поэтому я также открыт для любых решений/помощи с VBA. Тем временем будем изучать это направление!
Edit2: ниже добавлена простая иллюстрация, которая, надеюсь, лучше отображает то, чего я пытаюсь достичь в Excel:
*Edit3: я начинаю изучать метод Worksheet_SelectionChange, и вот что у меня получилось:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim projectName As String
Dim VariableList As Worksheet
Dim Form As Worksheet
Dim thisRow As Integer
Dim correctColumn As Integer
Dim lastRow As Integer
Set VariableList = ThisWorkbook.Sheets("VList")
Set Form = ThisWorkbook.Sheets("Form")
On Error GoTo EndingSub
If Target.Column = 5 Then
thisRow = Target.Row
projectName = Form.Cells(thisRow, 2)
correctColumn = Application.Match(projectName, VariableList.Range("1:1"), 0)
lastRow = VariableList.Columns(correctColumn).Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
VariableList.Cells(lastRow + 1, correctColumn).value = Form.Cells(5, thisRow).value
End If
EndingSub:
End Sub
Почему-то значение Form.Cells(5, thisRow).Value
всегда пусто.
Если я изменю его на Target.Value
, он по-прежнему будет принимать предыдущее значение, которое было введено (например, я сначала поместил «ABC» в качестве новой переменной, она не обновляется. Я изменил новую переменную на «DEF», она обновляет список с помощью « ABC" вместо "DEF"). Он также принимает ВСЕ значения, которые каким-то образом находятся в столбце E.
Кроме того, нажатие Enter после того, как я поместил один вход в E11, также приводит к обновлению обоих значений E11 и E12, когда было изменено только E12. Однако, если я щелкну мышью после ввода E11, обновится только значение E11.
Что именно я делаю неправильно здесь?