Всем привет! Необходим макрос. Задача: На "листе2" имеется таблица. Каждая позиция имеет наименование и по 3 параметра. Необходимо чтобы выделив ячейку G на "листе1", появился выпадающий список с наименованиями позиций, и при выборе, в ячейки G,H,I прописались 3 параметра, а не наименование.
Всем привет! Необходим макрос. Задача: На "листе2" имеется таблица. Каждая позиция имеет наименование и по 3 параметра. Необходимо чтобы выделив ячейку G на "листе1", появился выпадающий список с наименованиями позиций, и при выборе, в ячейки G,H,I прописались 3 параметра, а не наименование.maxexcel
KSV, прикольно вышло. только у меня ошибку делал, пока это:
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) ActCell.Validation.Delete If ActiveCell.Column <> 7 Then Exit Sub Set ActCell = ActiveCell ActCell.Validation.Add xlValidateList, xlValidAlertStop, xlBetween, "=Лист2!A2:A4" End Sub
[/vba]
не поменял на:
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set ActCell = ActiveCell ActCell.Validation.Delete If ActiveCell.Column <> 7 Then Exit Sub ActCell.Validation.Add xlValidateList, xlValidAlertStop, xlBetween, "=Лист2!A2:A4" End Sub
[/vba]
[moder]Роман, тексты кодов необязательно скрывать под спойлеры, тем более небольшие)[/moder]
KSV, прикольно вышло. только у меня ошибку делал, пока это:
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) ActCell.Validation.Delete If ActiveCell.Column <> 7 Then Exit Sub Set ActCell = ActiveCell ActCell.Validation.Add xlValidateList, xlValidAlertStop, xlBetween, "=Лист2!A2:A4" End Sub
[/vba]
не поменял на:
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set ActCell = ActiveCell ActCell.Validation.Delete If ActiveCell.Column <> 7 Then Exit Sub ActCell.Validation.Add xlValidateList, xlValidAlertStop, xlBetween, "=Лист2!A2:A4" End Sub
[/vba]
[moder]Роман, тексты кодов необязательно скрывать под спойлеры, тем более небольшие)[/moder]Roman777
Много чего не знаю!!!!
Сообщение отредактировал Pelena - Пятница, 18.09.2015, 09:50
Roman777, менять местами строки не надо (первичное присвоение ActCell происходит в событии Workbook_Open()). Просто, после скачивания файла нужно его разблокировать (правый клик на файле -> Свойства -> на вкладке Общие нажать Разблокировать), а потом уже запускать.
Roman777, менять местами строки не надо (первичное присвоение ActCell происходит в событии Workbook_Open()). Просто, после скачивания файла нужно его разблокировать (правый клик на файле -> Свойства -> на вкладке Общие нажать Разблокировать), а потом уже запускать.KSV
KVS, я, добавив еще 4 параметр, увеличив количество позиций и переместил таблицу со второго листа на 9-й, сделал активным 2-й лист. В макросе поменял соответствующие параметры. Выдает ошибку, файл с ошибкой во вложении. Что не так не пойму? [vba]
Код
Option Explicit
Public ActCell As Range
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> [b]10[/b] Then Exit Sub Set Target = [b]Лист9[/b].Range(Mid$(ActCell.Validation.Formula1, 8)).Find(ActCell) If Target Is Nothing Then Exit Sub Application.EnableEvents = False ActCell.Resize(, [b]4[/b]).Value = Target(, 2).Resize(, [b]4[/b]).Value Application.EnableEvents = True End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) ActCell.Validation.Delete If ActiveCell.Column <> [b]10[/b] Then Exit Sub Set ActCell = ActiveCell ActCell.Validation.Add xlValidateList, xlValidAlertStop, xlBetween, "=[b]Лист9[/b]!A2:[b]A13[/b]" End Sub
[/vba] [moder]Код нужно оформлять тегами![/moder]
KVS, я, добавив еще 4 параметр, увеличив количество позиций и переместил таблицу со второго листа на 9-й, сделал активным 2-й лист. В макросе поменял соответствующие параметры. Выдает ошибку, файл с ошибкой во вложении. Что не так не пойму? [vba]
Код
Option Explicit
Public ActCell As Range
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> [b]10[/b] Then Exit Sub Set Target = [b]Лист9[/b].Range(Mid$(ActCell.Validation.Formula1, 8)).Find(ActCell) If Target Is Nothing Then Exit Sub Application.EnableEvents = False ActCell.Resize(, [b]4[/b]).Value = Target(, 2).Resize(, [b]4[/b]).Value Application.EnableEvents = True End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) ActCell.Validation.Delete If ActiveCell.Column <> [b]10[/b] Then Exit Sub Set ActCell = ActiveCell ActCell.Validation.Add xlValidateList, xlValidAlertStop, xlBetween, "=[b]Лист9[/b]!A2:[b]A13[/b]" End Sub
[/vba] [moder]Код нужно оформлять тегами![/moder]maxexcel
KSV, еще вопрос. Я переименовал в книге Лист9 на "База", Лист2 на "Инвентар"(это я адаптирую макрос под свой файл). И соответственно переименовал в коде. И снова ошибка.
KSV, еще вопрос. Я переименовал в книге Лист9 на "База", Лист2 на "Инвентар"(это я адаптирую макрос под свой файл). И соответственно переименовал в коде. И снова ошибка.maxexcel
в коде нужно было бы переименовывать, если бы вы получали объект листа по его имени (Name) – Worksheets("База"), а мы получаем объект листа по имени его модуля (CodeName), а оно так и осталось Лист2 (и Лист9, соответственно).
в коде нужно было бы переименовывать, если бы вы получали объект листа по его имени (Name) – Worksheets("База"), а мы получаем объект листа по имени его модуля (CodeName), а оно так и осталось Лист2 (и Лист9, соответственно).KSV
KSV, да, согласен, но вот какая штука, вернул код в исходный, а имена листов оставил "База" и "Инвентар". Я совсем запутался почему сейчас не работает макрос(см. файл)?
KSV, да, согласен, но вот какая штука, вернул код в исходный, а имена листов оставил "База" и "Инвентар". Я совсем запутался почему сейчас не работает макрос(см. файл)?maxexcel
все же просто! где Лист9.Range – это обращение к листу по CodeName, а где "=База!A2:A13" – это обращение к листу по имени (Name), как в формуле.
[p.s.]после скачивания файла нужно его разблокировать (правый клик на файле -> Свойства -> на вкладке Общие нажать Разблокировать), а потом уже запускать.[/p.s.]
все же просто! где Лист9.Range – это обращение к листу по CodeName, а где "=База!A2:A13" – это обращение к листу по имени (Name), как в формуле.
[p.s.]после скачивания файла нужно его разблокировать (правый клик на файле -> Свойства -> на вкладке Общие нажать Разблокировать), а потом уже запускать.[/p.s.]KSV
KSV, Спасибо огромнейшее, что помогаете мне, но когда копирую макрос в свой файл, опять ошибка. Я увидел что в строке (см. ниже) Раньше была "8", а теперь "7". Подскажите, за что отвечает эта переменная? Может по этому у меня не работает макрос когда копирую в свой файл. [vba]
Код
Set Target = Лист9.Range(Mid$(ActCell.Validation.Formula1, 7)).Find(ActCell)
[/vba]
KSV, Спасибо огромнейшее, что помогаете мне, но когда копирую макрос в свой файл, опять ошибка. Я увидел что в строке (см. ниже) Раньше была "8", а теперь "7". Подскажите, за что отвечает эта переменная? Может по этому у меня не работает макрос когда копирую в свой файл. [vba]
Код
Set Target = Лист9.Range(Mid$(ActCell.Validation.Formula1, 7)).Find(ActCell)
вообще-то, это константа, а не переменная... а на 7 поменял потому, что у вас имя листа стало на 1 символ короче (первоначально было Лист1, а теперь База) эта цифра указывает на начальную позицию адреса диапазона в вашем правиле: "=База!A2:A13" (в нем А2:А13 начинается с 7-й позиции)
вообще-то, это константа, а не переменная... а на 7 поменял потому, что у вас имя листа стало на 1 символ короче (первоначально было Лист1, а теперь База) эта цифра указывает на начальную позицию адреса диапазона в вашем правиле: "=База!A2:A13" (в нем А2:А13 начинается с 7-й позиции)KSV