Здравствуйте. Подскажите как реализовать операцию с кнопками. Например существует перечень однотипных действий. Нажимая на первую кнопку выполняется одна комбинация действий (пара, несколько или по одному), а нажимая на вторую другая комбинация действий. Возможно ли это реализовать без if else, так как планируется несколько кнопок и множество комбинаций действий к ним. Ну или как либо по другому не как в описании ниже. Спасибо.
[vba]
Код
Sub Кнопка1() Параметр Call Функция End Sub
Sub Кнопка2() Параметр Call Функция End Sub
Function Функция(Параметр) Действие1 Действие2 Действие3 Действие4 Действие5 End Function
[/vba]
Здравствуйте. Подскажите как реализовать операцию с кнопками. Например существует перечень однотипных действий. Нажимая на первую кнопку выполняется одна комбинация действий (пара, несколько или по одному), а нажимая на вторую другая комбинация действий. Возможно ли это реализовать без if else, так как планируется несколько кнопок и множество комбинаций действий к ним. Ну или как либо по другому не как в описании ниже. Спасибо.
[vba]
Код
Sub Кнопка1() Параметр Call Функция End Sub
Sub Кнопка2() Параметр Call Функция End Sub
Function Функция(Параметр) Действие1 Действие2 Действие3 Действие4 Действие5 End Function
Сложно что-либо посоветовать, не видя конкретной реализации - не в псевдокоде, как Вы представили сейчас, а именно в нормальном рабочем тексте VBA. Параметром Функции будет что? Номер кнопки? Одно и то же действие из списка может выполняться для разных кнопок?
Не очень понятно, чем здесь Вам If'ы могут не нравиться. С их помощью внутри Функции можно все нормально развести. Впрочем, можете вместо If'ов попробовать Select Case использовать. Я всегда так поступаю, если в конкретном месте мне чем-то не нравятся If'ы.
[p.s.]На просторах Интернета есть мой файл Puzzle.xls.[/p.s.] Я уже однажды давал на него ссылку в сообщении Форума. Ссылка там до сих пор рабочая - по ней можно пройти и скачать файл.
В VBA-коде того файла есть обработка серии кнопок. Их там аж 16 штук - потому что файл содержит реализацию известной "Игры в 15". Посмотрите, как и что там сделано. Заодно и поиграйте .
Сложно что-либо посоветовать, не видя конкретной реализации - не в псевдокоде, как Вы представили сейчас, а именно в нормальном рабочем тексте VBA. Параметром Функции будет что? Номер кнопки? Одно и то же действие из списка может выполняться для разных кнопок?
Не очень понятно, чем здесь Вам If'ы могут не нравиться. С их помощью внутри Функции можно все нормально развести. Впрочем, можете вместо If'ов попробовать Select Case использовать. Я всегда так поступаю, если в конкретном месте мне чем-то не нравятся If'ы.
[p.s.]На просторах Интернета есть мой файл Puzzle.xls.[/p.s.] Я уже однажды давал на него ссылку в сообщении Форума. Ссылка там до сих пор рабочая - по ней можно пройти и скачать файл.
В VBA-коде того файла есть обработка серии кнопок. Их там аж 16 штук - потому что файл содержит реализацию известной "Игры в 15". Посмотрите, как и что там сделано. Заодно и поиграйте .Gustav
Параметром Функции будет что? Номер кнопки? Одно и то же действие из списка может выполняться для разных кнопок?
Посмотрел реализацию игры, как я понял какой-то дополнительный параметр мне не нужен, можно сразу в вызове указать. Собственно мне нужно попеременно открывать/скрывать некоторые группы столбцов в таблице. У меня реализовано для каждого случая в отдельности, но это очень много кода. А необходимо что бы по заданным значениям в коде кнопки находились нужные строки в функции и производилось соответствующее действие, типа как через индексацию в базе данных. Собственно конечная цель в том, что бы я мог добавлять новые кнопки для различных комбинаций, а тело функции оставалось неизменным. Не исключаю что можно и через if else это решить, вот только что бы без новых добавлений в функцию при каждой новой кнопке.
Что-то типо как-то так: [vba]
Код
Sub Кнопка1() Call Функция (1,5,6) End Sub
Sub Кнопка2() Call Функция (2,3,4) End Sub
Function Функция(Col1 As Integer, Col2 As Integer, Col3 As Integer) Далее должен идти поиск и активация нужных строк по списку ниже'
Параметром Функции будет что? Номер кнопки? Одно и то же действие из списка может выполняться для разных кнопок?
Посмотрел реализацию игры, как я понял какой-то дополнительный параметр мне не нужен, можно сразу в вызове указать. Собственно мне нужно попеременно открывать/скрывать некоторые группы столбцов в таблице. У меня реализовано для каждого случая в отдельности, но это очень много кода. А необходимо что бы по заданным значениям в коде кнопки находились нужные строки в функции и производилось соответствующее действие, типа как через индексацию в базе данных. Собственно конечная цель в том, что бы я мог добавлять новые кнопки для различных комбинаций, а тело функции оставалось неизменным. Не исключаю что можно и через if else это решить, вот только что бы без новых добавлений в функцию при каждой новой кнопке.
Что-то типо как-то так: [vba]
Код
Sub Кнопка1() Call Функция (1,5,6) End Sub
Sub Кнопка2() Call Функция (2,3,4) End Sub
Function Функция(Col1 As Integer, Col2 As Integer, Col3 As Integer) Далее должен идти поиск и активация нужных строк по списку ниже'
Думаю, что "хозяйство" ваше должно выглядеть примерно так: [vba]
Код
Sub Кнопка1() Call Функция(1, 5, 6) End Sub
Sub Кнопка2() Call Функция(2, 3, 4) End Sub
Sub Функция(ParamArray rows() As Variant) Dim i As Integer For i = 0 To UBound(rows, 1) Select Case rows(i) Case 1 Columns("A:C").Hidden = True 'Строка 1 Case 2 Columns("D:F").Hidden = True 'Строка 2 Case 3 Columns("H:J").Hidden = True 'Строка 3 Case 4 Columns("A:C").Hidden = False 'Строка 4 Case 5 Columns("D:F").Hidden = False 'Строка 5 Case 6 Columns("H:J").Hidden = False 'Строка 6 Case Else 'какое-нибудь еще действие для числа, не равного 1..6 End Select Next i End Sub
[/vba]
Думаю, что "хозяйство" ваше должно выглядеть примерно так: [vba]
Код
Sub Кнопка1() Call Функция(1, 5, 6) End Sub
Sub Кнопка2() Call Функция(2, 3, 4) End Sub
Sub Функция(ParamArray rows() As Variant) Dim i As Integer For i = 0 To UBound(rows, 1) Select Case rows(i) Case 1 Columns("A:C").Hidden = True 'Строка 1 Case 2 Columns("D:F").Hidden = True 'Строка 2 Case 3 Columns("H:J").Hidden = True 'Строка 3 Case 4 Columns("A:C").Hidden = False 'Строка 4 Case 5 Columns("D:F").Hidden = False 'Строка 5 Case 6 Columns("H:J").Hidden = False 'Строка 6 Case Else 'какое-нибудь еще действие для числа, не равного 1..6 End Select Next i End Sub