![Используйте раскрывающееся меню для изменения ячеек рядом с раскрывающимся списком.](https://rvso.com/image/1585763/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B9%D1%82%D0%B5%20%D1%80%D0%B0%D1%81%D0%BA%D1%80%D1%8B%D0%B2%D0%B0%D1%8E%D1%89%D0%B5%D0%B5%D1%81%D1%8F%20%D0%BC%D0%B5%D0%BD%D1%8E%20%D0%B4%D0%BB%D1%8F%20%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F%20%D1%8F%D1%87%D0%B5%D0%B5%D0%BA%20%D1%80%D1%8F%D0%B4%D0%BE%D0%BC%20%D1%81%20%D1%80%D0%B0%D1%81%D0%BA%D1%80%D1%8B%D0%B2%D0%B0%D1%8E%D1%89%D0%B8%D0%BC%D1%81%D1%8F%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%BE%D0%BC..png)
Я новичок в VBA и мне интересно создать программу, которая делает следующее. Когда выбирается элемент из выпадающего меню, он вставляет определенный текст в ячейки, которые находятся рядом с выбранным выпадающим списком.
Например: Мой выпадающий список содержит в столбце A КОММЕНТАРИЙ ПЕРЕМЕЩЕНИЕ
Когда я выбираю «КОММЕНТАРИЙ», я хочу, чтобы в столбце B было написано «ВВЕДИТЕ КОММЕНТАРИЙ». Когда я выбираю «ХОД», я хочу, чтобы в столбце B было написано «ВВЕДИТЕ ТИП ДВИЖЕНИЯ», а в столбце C — «ВВЕДИТЕ СКОРОСТЬ ДВИЖЕНИЯ».
Мне бы хотелось, чтобы они менялись только при выборе раскрывающегося меню, поскольку я использую эти данные в других ячейках в зависимости от того, какой элемент раскрывающегося меню выбран.
решение1
Если я правильно понимаю, это можно сделать либо с помощью VBA, либо просто функцией. В моем примере у меня есть список в A1
и в A4
Both, содержащий "COMMENT" и "MOVE".
У B1
меня есть функция=IF(A1="MOVE","ENTER MOVE TYPE",IF(A1="COMMENT","ENTER COMMENT"," "))
И в C1
функции=IF(A1="MOVE","ENTER MOVE SPEED","")
Для списка A4
я использую VBA на рабочем листе (щелкните правой кнопкой мыши по листу и выберите «Показать код»)
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Range(Target.Address), Range("A4")) Is Nothing And Target.Count = 1 Then
If Target.Value2 = "MOVE" Then
Target.Offset(, 1).Value = "ENTER MOVE TYPE"
Target.Offset(, 2).Value = "ENTER MOVE SPEED"
ElseIf Target.Value2 = "COMMENT" Then
Target.Offset(, 1).Value = "ENTER COMMENT"
Target.Offset(, 2).Value = ""
Else
Target.Offset(, 1).Value = ""
Target.Offset(, 2).Value = ""
End If
End If
End Sub
Я использую относительное положение текста B
и C
с его помощью .Offset
приходится менять меньше кода в зависимости от расположения списка.