В настоящее время я работаю над созданием панели мониторинга в Excel 2016 с использованием VBA и макросов. В основном это включает в себя выбор кнопок на одном листе для отображения / скрытия различных элементов диаграммы, источники данных которых будут связаны с другим листом. Пока все идет хорошо, но я столкнулся с проблемами эффективности. Первая проблема связана с группировкой объектов, а вторая связана с повторением кода VBA.
1) Есть ли способ перекрестной группировки объектов формы? Сейчас кажется, что мне нужно создать дубликаты для объектов, которые не будут видны, и для которых каждая родительская группа объектов будет скрыта. К сожалению, я не могу найти способ Excel для перекрестной группы. Поэтому, если я хочу группу A и B и группу A и C, у меня может быть только одна группа (A & B или A & C, но не обе). Это заставляет меня дублировать объекты, поэтому у меня есть одна пара для A & B и другая для A & C. Проблема в том, что это может стать довольно утомительным и кошмаром в правильной организации моих объектов, когда я получаю несколько кнопок и подразделов панели управления.
2) Может кто-нибудь посоветовать, как сделать следующий код более эффективным, чтобы не повторять код? Он в основном выделяет группу фигур, которые должны отображаться и скрываться в зависимости от того, какая кнопка нажата. Но сейчас я должен написать все группы, которые должны оставаться видимыми и скрытыми. Ниже приведен пример кода. Пожалуйста, посмотрите аргументы Истина и Ложь ниже, чтобы понять, в чем проблема:
Sub Pic_1_SA_click()
ActiveSheet.Shapes("Group 23").Visible = True
ActiveSheet.Shapes("Group 71").Visible = False
ActiveSheet.Shapes("Group 19").Visible = False
ActiveSheet.Shapes("Group 20").Visible = False
End Sub
Sub Pic_1_SB_click()
ActiveSheet.Shapes("Group 23").Visible = False
ActiveSheet.Shapes("Group 71").Visible = True
ActiveSheet.Shapes("Group 19").Visible = False
ActiveSheet.Shapes("Group 20").Visible = False
End Sub
Sub Pic_2_SA_click()
ActiveSheet.Shapes("Group 23").Visible = False
ActiveSheet.Shapes("Group 71").Visible = False
ActiveSheet.Shapes("Group 19").Visible = True
ActiveSheet.Shapes("Group 20").Visible = False
End Sub
Sub Pic_2_SB_click()
ActiveSheet.Shapes("Group 23").Visible = False
ActiveSheet.Shapes("Group 71").Visible = False
ActiveSheet.Shapes("Group 19").Visible = False
ActiveSheet.Shapes("Group 20").Visible = True
End Sub
Будем весьма благодарны за любые рекомендации по этим двум вопросам. Спасибо!