Здравствуйте. Ребята возможно ли для выполнения макроса использовать в раскрывающимся списке, не наименования "A","B","C", а порядковое расположение наименований в списке, в данном случае "A" это 1 "B" это 2 и т.д. Потому как наименования могут изменяться а порядковое расположение списка нет. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("E3")) Is Nothing Then Select Case Target Case Is = "A": Call Макрос_A Case Is = "B": Call Макрос_B Case Is = "C": Call Макрос_C Case Is = "D": Call Макрос_D End Select End If End Sub
[/vba]
Здравствуйте. Ребята возможно ли для выполнения макроса использовать в раскрывающимся списке, не наименования "A","B","C", а порядковое расположение наименований в списке, в данном случае "A" это 1 "B" это 2 и т.д. Потому как наименования могут изменяться а порядковое расположение списка нет. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("E3")) Is Nothing Then Select Case Target Case Is = "A": Call Макрос_A Case Is = "B": Call Макрос_B Case Is = "C": Call Макрос_C Case Is = "D": Call Макрос_D End Select End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Dim s$, x$, v As Variant If Not Intersect(Target, Range("E3")) Is Nothing Then s = Target.Validation.Formula1 v = Evaluate(s) If Left(s, 1) = "=" Then If TypeName(v) = "Range" Then v = v.Formula x = Join(Application.Transpose(v), ";") Else: x = s End If Select Case UBound(Split(";" & Mid(x, 1, InStr(1, x, Target) - 1), ";")) Case 1: Call Макрос_1 Case 2: Call Макрос_2 Case 3: Call Макрос_3 End Select
'ИЛИ 'Application.Run "Макрос_" & UBound(Split(";" & Mid(x, 1, InStr(1, x, Target) - 1), ";")) End If End Sub
[/vba]
Здравствуйте. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim s$, x$, v As Variant If Not Intersect(Target, Range("E3")) Is Nothing Then s = Target.Validation.Formula1 v = Evaluate(s) If Left(s, 1) = "=" Then If TypeName(v) = "Range" Then v = v.Formula x = Join(Application.Transpose(v), ";") Else: x = s End If Select Case UBound(Split(";" & Mid(x, 1, InStr(1, x, Target) - 1), ";")) Case 1: Call Макрос_1 Case 2: Call Макрос_2 Case 3: Call Макрос_3 End Select
'ИЛИ 'Application.Run "Макрос_" & UBound(Split(";" & Mid(x, 1, InStr(1, x, Target) - 1), ";")) End If End Sub
krosav4ig, Извиняюсь, не раскрыл тему более точно.
Цитата
Сергей13 «Потому как наименования могут изменяться а порядковое расположение списка нет»
Так как наименования списка могут изменяться пользователем, в диапазоне который привязан к списку, а порядковое расположение списка неизменно, то как привязать выполнение нужного макроса не к наименованию а к порядковому расположению наименований.
krosav4ig, Извиняюсь, не раскрыл тему более точно.
Цитата
Сергей13 «Потому как наименования могут изменяться а порядковое расположение списка нет»
Так как наименования списка могут изменяться пользователем, в диапазоне который привязан к списку, а порядковое расположение списка неизменно, то как привязать выполнение нужного макроса не к наименованию а к порядковому расположению наименований.Сергей13
Видимо собака зарылась в разнице версий Excel, у меня сейчас под рукой только 2007 именно поэтому тут написано
Цитата
Старайтесь прилагать файлы в версии Excel 2003-го офиса(xls), так как эти файлы могут открыть пользователи с любой версией Excel, в отличие от файлов версий Excel 2007/2010/2013 (xlsх).
При открытии в E3 проверки данных нет, скрин делать лень. Нашел диапазон на скрытом листе, в 2007 не поддерживаются источники для проверки данных с другого листа напрямую исправил макрос во 2 посте
второй вариант макроса[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim s$, x$, v As Variant If Not Intersect(Target, Range("E3")) Is Nothing Then s = Target.Validation.Formula1 v = Evaluate(s) If Left(s, 1) = "=" Then If TypeName(v) = "Range" Then v = v.Formula x = Join(Application.Transpose(v), ";") Else: x = s End If Application.Run "Лист1.Макрос_" & UBound(Split(";" & Mid(x, 1, InStr(1, x, Target) - 1), ";")) End If End Sub
[/vba]
Видимо собака зарылась в разнице версий Excel, у меня сейчас под рукой только 2007 именно поэтому тут написано
Цитата
Старайтесь прилагать файлы в версии Excel 2003-го офиса(xls), так как эти файлы могут открыть пользователи с любой версией Excel, в отличие от файлов версий Excel 2007/2010/2013 (xlsх).
При открытии в E3 проверки данных нет, скрин делать лень. Нашел диапазон на скрытом листе, в 2007 не поддерживаются источники для проверки данных с другого листа напрямую исправил макрос во 2 посте
второй вариант макроса[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim s$, x$, v As Variant If Not Intersect(Target, Range("E3")) Is Nothing Then s = Target.Validation.Formula1 v = Evaluate(s) If Left(s, 1) = "=" Then If TypeName(v) = "Range" Then v = v.Formula x = Join(Application.Transpose(v), ";") Else: x = s End If Application.Run "Лист1.Макрос_" & UBound(Split(";" & Mid(x, 1, InStr(1, x, Target) - 1), ";")) End If End Sub
«в 2007 не поддерживаются источники для проверки данных с другого листа».
Так-как у меня есть еще различные списки такого рода, то желательно создавать именные диапазоны?
Сейчас работает, один нюанс выползает. Если удалить в списке выбранное наименование командой Delete то выдает ошибку. Возможно ли пустую ячейку списка как-то привязать к Макросу_0?
krosav4ig,
Цитата
«в 2007 не поддерживаются источники для проверки данных с другого листа».
Так-как у меня есть еще различные списки такого рода, то желательно создавать именные диапазоны?
Сейчас работает, один нюанс выползает. Если удалить в списке выбранное наименование командой Delete то выдает ошибку. Возможно ли пустую ячейку списка как-то привязать к Макросу_0?Сергей13