Это распространенная проблема, с которой сталкиваются многие новички, так или иначе, но не настолько конструктивно «ну, просто следуйте синтаксису языка правильно!», На самом деле существуют реальные методы, позволяющие избежать этой проблемы.
Самый простой из них - это отступ - точнее, последовательность в отступе.
отступ
Проблема начинается здесь:
If vShts = "0" Then
Sheets("BLANK ORDER").PrintOut
Else
'####Beginning of changed code####
With ActiveWorkbook
Отступ должен быть увеличен прямо здесь:
If vShts = "0" Then
Sheets("BLANK ORDER").PrintOut
Else
'####Beginning of changed code####
With ActiveWorkbook
Ключ к простому и правильному соединению If...End If
блоков - или любых блоков, на самом деле,является последовательным отступом.
Всякий раз, когда вы видите «открывающий блок», где следующая строка кода не имеет отступов, вы можете ожидать появления этой проблемы.Как этот With
блок, который никогда не завершается и вызывает ошибку компиляции, которую вы получаете - потому что компилятор достиг End If
, но ожидал End With
:
With ActiveWorkbook
ThisWorkbook.Sheets("GO BACK PAGE 1").Select
...
End If
Другой метод -немного сложнее реализовать на практике, но действительно окупается в долгосрочной перспективе, когда вы начинаете реально именовать вещи и структурируете свои скрипты и программы.
Меньшие процедуры
Большие процедуры, которые делают много вещей, «сложнее» получить, чем они должны быть.Один из способов облегчить управление большой процедурой - разделить ее на более мелкие процедуры, выполняющие меньше задач.Таким образом, вместо этого:
If condition Then
'do stuff
'do more stuff
'some more stuff
Else
'do other stuff
End If
Вы можете перетащить содержимое условной ветви в его собственную более узкую, более специализированную процедуру:
If condition Then
DoStuff
Else
DoOtherStuff
End If
Вы можете сделать это, введя новый Sub
операторы вне макроса / процедуры, в которой вы уже находитесь:
Private Sub DoStuff()
'do stuff
'do more stuff
'some more stuff
End Sub
Private Sub DoOtherStuff()
'do other stuff
End Sub
Затем вы можете передавать параметры между процедурами, а затем использовать Function
процедуры, которые оценивают эти параметры и возвращаютзначение соответственно, и все становится действительно очень интересно, как только вы освоите эти строительные блоки.Продолжай!