Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Выбор из ряда действий - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выбор из ряда действий (Макросы/Sub)
Выбор из ряда действий
Vertep7 Дата: Суббота, 06.04.2024, 13:39 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 52
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Здравствуйте. Подскажите как реализовать операцию с кнопками. Например существует перечень однотипных действий. Нажимая на первую кнопку выполняется одна комбинация действий (пара, несколько или по одному), а нажимая на вторую другая комбинация действий. Возможно ли это реализовать без if else, так как планируется несколько кнопок и множество комбинаций действий к ним. Ну или как либо по другому не как в описании ниже. Спасибо.

[vba]
Код
Sub Кнопка1()
Параметр
Call Функция
End Sub

Sub Кнопка2()
Параметр
Call Функция
End Sub

Function Функция(Параметр)
Действие1
Действие2
Действие3
Действие4
Действие5
End Function
[/vba]


Сообщение отредактировал Vertep7 - Суббота, 06.04.2024, 14:20
 
Ответить
СообщениеЗдравствуйте. Подскажите как реализовать операцию с кнопками. Например существует перечень однотипных действий. Нажимая на первую кнопку выполняется одна комбинация действий (пара, несколько или по одному), а нажимая на вторую другая комбинация действий. Возможно ли это реализовать без if else, так как планируется несколько кнопок и множество комбинаций действий к ним. Ну или как либо по другому не как в описании ниже. Спасибо.

[vba]
Код
Sub Кнопка1()
Параметр
Call Функция
End Sub

Sub Кнопка2()
Параметр
Call Функция
End Sub

Function Функция(Параметр)
Действие1
Действие2
Действие3
Действие4
Действие5
End Function
[/vba]

Автор - Vertep7
Дата добавления - 06.04.2024 в 13:39
Gustav Дата: Суббота, 06.04.2024, 15:09 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2748
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Сложно что-либо посоветовать, не видя конкретной реализации - не в псевдокоде, как Вы представили сейчас, а именно в нормальном рабочем тексте VBA. Параметром Функции будет что? Номер кнопки? Одно и то же действие из списка может выполняться для разных кнопок?

Не очень понятно, чем здесь Вам If'ы могут не нравиться. С их помощью внутри Функции можно все нормально развести. Впрочем, можете вместо If'ов попробовать Select Case использовать. Я всегда так поступаю, если в конкретном месте мне чем-то не нравятся If'ы.

[p.s.]На просторах Интернета есть мой файл Puzzle.xls.[/p.s.] Я уже однажды давал на него ссылку в сообщении Форума. Ссылка там до сих пор рабочая - по ней можно пройти и скачать файл.

В VBA-коде того файла есть обработка серии кнопок. Их там аж 16 штук - потому что файл содержит реализацию известной "Игры в 15". Посмотрите, как и что там сделано. Заодно и поиграйте :) .


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Суббота, 06.04.2024, 15:47
 
Ответить
СообщениеСложно что-либо посоветовать, не видя конкретной реализации - не в псевдокоде, как Вы представили сейчас, а именно в нормальном рабочем тексте VBA. Параметром Функции будет что? Номер кнопки? Одно и то же действие из списка может выполняться для разных кнопок?

Не очень понятно, чем здесь Вам If'ы могут не нравиться. С их помощью внутри Функции можно все нормально развести. Впрочем, можете вместо If'ов попробовать Select Case использовать. Я всегда так поступаю, если в конкретном месте мне чем-то не нравятся If'ы.

[p.s.]На просторах Интернета есть мой файл Puzzle.xls.[/p.s.] Я уже однажды давал на него ссылку в сообщении Форума. Ссылка там до сих пор рабочая - по ней можно пройти и скачать файл.

В VBA-коде того файла есть обработка серии кнопок. Их там аж 16 штук - потому что файл содержит реализацию известной "Игры в 15". Посмотрите, как и что там сделано. Заодно и поиграйте :) .

Автор - Gustav
Дата добавления - 06.04.2024 в 15:09
Vertep7 Дата: Суббота, 06.04.2024, 17:58 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 52
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Параметром Функции будет что? Номер кнопки? Одно и то же действие из списка может выполняться для разных кнопок?

Посмотрел реализацию игры, как я понял какой-то дополнительный параметр мне не нужен, можно сразу в вызове указать.
Собственно мне нужно попеременно открывать/скрывать некоторые группы столбцов в таблице. У меня реализовано для каждого случая в отдельности, но это очень много кода. А необходимо что бы по заданным значениям в коде кнопки находились нужные строки в функции и производилось соответствующее действие, типа как через индексацию в базе данных.
Собственно конечная цель в том, что бы я мог добавлять новые кнопки для различных комбинаций, а тело функции оставалось неизменным. Не исключаю что можно и через 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)
    Далее должен идти поиск и активация нужных строк по списку ниже'

    Columns("A:C").Hidden = True 'Строка 1
    Columns("D:F").Hidden = True 'Строка 2
    Columns("H:J").Hidden = True 'Строка 3
    
    Columns("A:C").Hidden = False 'Строка 4
    Columns("D:F").Hidden = False 'Строка 5
    Columns("H:J").Hidden = False 'Строка 6    
End Function
[/vba]


Сообщение отредактировал Vertep7 - Суббота, 06.04.2024, 18:13
 
Ответить
Сообщение
Параметром Функции будет что? Номер кнопки? Одно и то же действие из списка может выполняться для разных кнопок?

Посмотрел реализацию игры, как я понял какой-то дополнительный параметр мне не нужен, можно сразу в вызове указать.
Собственно мне нужно попеременно открывать/скрывать некоторые группы столбцов в таблице. У меня реализовано для каждого случая в отдельности, но это очень много кода. А необходимо что бы по заданным значениям в коде кнопки находились нужные строки в функции и производилось соответствующее действие, типа как через индексацию в базе данных.
Собственно конечная цель в том, что бы я мог добавлять новые кнопки для различных комбинаций, а тело функции оставалось неизменным. Не исключаю что можно и через 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)
    Далее должен идти поиск и активация нужных строк по списку ниже'

    Columns("A:C").Hidden = True 'Строка 1
    Columns("D:F").Hidden = True 'Строка 2
    Columns("H:J").Hidden = True 'Строка 3
    
    Columns("A:C").Hidden = False 'Строка 4
    Columns("D:F").Hidden = False 'Строка 5
    Columns("H:J").Hidden = False 'Строка 6    
End Function
[/vba]

Автор - Vertep7
Дата добавления - 06.04.2024 в 17:58
Gustav Дата: Суббота, 06.04.2024, 22:10 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2748
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Думаю, что "хозяйство" ваше должно выглядеть примерно так:
[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]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеДумаю, что "хозяйство" ваше должно выглядеть примерно так:
[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]

Автор - Gustav
Дата добавления - 06.04.2024 в 22:10
Vertep7 Дата: Суббота, 06.04.2024, 23:53 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 52
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
должно выглядеть примерно так:

Да, именно так как нужно было) Спасибо за помощь и за игру. Игрульку подопечным своим передам, пускай развлекаются)
 
Ответить
Сообщение
должно выглядеть примерно так:

Да, именно так как нужно было) Спасибо за помощь и за игру. Игрульку подопечным своим передам, пускай развлекаются)

Автор - Vertep7
Дата добавления - 06.04.2024 в 23:53
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выбор из ряда действий (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!