Я не уверен, как оптимизировать код, прикрепленный ниже, в какую-то форму цикла, и я надеюсь, что кто-то сможет проиллюстрировать, как лучше всего справиться с этим.
По сути, я унаследовал электронную таблицу с несколькими модулями VBA, записанными с устройства записи макросов и / или написанными кем-то, не имеющим опыта работы с VBA, и он работает очень медленно.Я проходил и сокращал множество избыточных секций типа 'nested if' в циклы for, пытаясь оптимизировать и ускорить процесс, однако я также очень неопытен и на самом деле сам не кодер, как вы, наверное, догадались!
If Range("Link1").Value = "" Then
Application.CutCopyMode = False
GoTo Finale:
Else
If Range("Link2").Value = "" Then
ActiveSheet.Shapes.Range(Array("Group1")).Select
Selection.Copy
Else
If Range("Link3").Value = "" Then
ActiveSheet.Shapes.Range(Array("Group1", "Group2")).Select
Selection.Copy
Else
If Range("Link4").Value = "" Then
ActiveSheet.Shapes.Range(Array("Group1", "Group2", "Group3")).Select
Selection.Copy
Else
If Range("Link5").Value = "" Then
ActiveSheet.Shapes.Range(Array("Group1", "Group2", "Group3", "Group4")).Select
Selection.Copy
Else
If Range("Link6").Value = "" Then
ActiveSheet.Shapes.Range(Array("Group1", "Group2", "Group3", "Group4", "Group5")).Select
Selection.Copy
Else
If Range("Link7").Value = "" Then
ActiveSheet.Shapes.Range(Array("Group1", "Group2", "Group3", "Group4", "Group5", "Group6")).Select
Selection.Copy
Else
If Range("Link8").Value = "" Then
ActiveSheet.Shapes.Range(Array("Group1", "Group2", "Group3", "Group4", "Group5", "Group6", "Group7")).Select
Selection.Copy
Else
ActiveSheet.Shapes.Range(Array("Group1", "Group2", "Group3", "Group4", "Group5", "Group6", "Group7", "Group8")).Select
Selection.Copy
End If
End If
End If
End If
End If
End If
End If
End If
Код имеет дело с копированием 8 групп «вещей» (в данном случае каждая содержит текстовые поля и графику) и проверяет, была ли заполнена ссылка, копируя предыдущие группы, когда находитненаселенная ссылка.Следовательно, идея заключается в том, что копируются только населенные группы.
Второй вопрос, касающийся всего этого, заключается в том, что, когда у вас есть несколько операторов if, подобных этому, действительно ли это значительно быстрее или более оптимально сводить такие вещи в циклы, или я должен искать другое место для дальнейшей оптимизации электронной таблицы?Превращать длинные отрывки рекурсивного кода в минимальные циклы, безусловно, приятно (!), Но я не знаю, действительно ли это нужно делать для повышения скорости и стабильности, или это действительно мало что дает.