Структура файла Excel следующая:
отображаются нужные строки с именами в зависимости от выбранных условий в табличке.
Нашел стандартный код для реализации:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("f3").Value = "Да" Then
Rows("2").EntireRow.Hidden = True
Rows("3").EntireRow.Hidden = True
Else
Rows("2").EntireRow.Hidden = False
Rows("3").EntireRow.Hidden = False
End If
End Sub
Все бы ничего, но условий пара десятков, а строк попадающих под Скрыть/Показать около сотни. Т.е код сам простой, но его доволно много, т.к. много If-ов и вот этих строк Rows("N").EntireRow.Hidden = True/False.
В итоге на полпути компилятор стал ругаться, выдавая "Procedure too large".
Стал гуглить, на форумах всплыла подсказка, мол, если свыше 1000 строк в коде, то процедура считается перегруженной и следует разбить код на несколько процедур, а затем соединить их событием клика.
И описали:
Private Sub A
...
End Sub
Private Sub B
...
End Sub
Private Sub cmbGo_Click()
A:B
End Sub
Я было обрадовался, но не тут то было.
Фигня в том, что Worksheet_SelectionChange - это базовая процедура, обращающаяся к своим переменным и каким-то библиотекам.
Т.е. переименовать ее на №1, №2 и т.д. - нельзя.
Тогда напрашивалось очевидное: обернуть блоки кода в новые процедуры, обозначая в каждом блоке, что работаем в этом самом Worksheet_SelectionChange:
Private Sub A
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
...
End Sub
End Sub
Private Sub B
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
...
End Sub
End Sub
но и так васёк ругается, видимо нельзя содержать процедуру в процедуре:(
Вот и дошли до вопроса:
КАК БЫТЬ?
Если никак иначе кроме разбивки на подпроцедуры не обойти ошибку "Procedure too large", то как грамотно разделять их выполняя по сути все ту же Worksheet_SelectionChange?
Есть ли другие решения задачи?
отображаются нужные строки с именами в зависимости от выбранных условий в табличке.
Нашел стандартный код для реализации:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("f3").Value = "Да" Then
Rows("2").EntireRow.Hidden = True
Rows("3").EntireRow.Hidden = True
Else
Rows("2").EntireRow.Hidden = False
Rows("3").EntireRow.Hidden = False
End If
End Sub
Все бы ничего, но условий пара десятков, а строк попадающих под Скрыть/Показать около сотни. Т.е код сам простой, но его доволно много, т.к. много If-ов и вот этих строк Rows("N").EntireRow.Hidden = True/False.
В итоге на полпути компилятор стал ругаться, выдавая "Procedure too large".
Стал гуглить, на форумах всплыла подсказка, мол, если свыше 1000 строк в коде, то процедура считается перегруженной и следует разбить код на несколько процедур, а затем соединить их событием клика.
И описали:
Private Sub A
...
End Sub
Private Sub B
...
End Sub
Private Sub cmbGo_Click()
A:B
End Sub
Я было обрадовался, но не тут то было.
Фигня в том, что Worksheet_SelectionChange - это базовая процедура, обращающаяся к своим переменным и каким-то библиотекам.
Т.е. переименовать ее на №1, №2 и т.д. - нельзя.
Тогда напрашивалось очевидное: обернуть блоки кода в новые процедуры, обозначая в каждом блоке, что работаем в этом самом Worksheet_SelectionChange:
Private Sub A
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
...
End Sub
End Sub
Private Sub B
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
...
End Sub
End Sub
но и так васёк ругается, видимо нельзя содержать процедуру в процедуре:(
Вот и дошли до вопроса:
КАК БЫТЬ?
Если никак иначе кроме разбивки на подпроцедуры не обойти ошибку "Procedure too large", то как грамотно разделять их выполняя по сути все ту же Worksheet_SelectionChange?
Есть ли другие решения задачи?