Ничего не делать в vba
Есть ли в VBA эквивалент Python "pass", чтобы просто ничего не делать в коде?
например:
For Each ws In ThisWorkbook.Sheets
If ws.Name = "Navy Reqs" Then
ws.Select
nReqs = get_num_rows
Cells(1, 1).Select
If ActiveSheet.AutoFilterMode Then Cells.AutoFilter
Selection.AutoFilter
ElseIf ws.Name = "temp" Then
pass
Else
ws.Select
nShips = get_num_rows
End If
Next
Я получаю ошибку здесь, что проход не определен. Благодарю.
10 ответов
Просто удали pass
и снова запустите код. VBA будет рад принять то, что я верю
Не включайте никаких заявлений:
Sub qwerty()
If 1 = 3 Then
Else
MsgBox "1 does not equal 3"
End If
End Sub
Напишите код, который делает то, что говорит, и говорит, что он делает.
For Each ws In ThisWorkbook.Sheets
If ws.Name = "Navy Reqs" Then
ws.Select
nReqs = get_num_rows
Cells(1, 1).Select
If ActiveSheet.AutoFilterMode Then Cells.AutoFilter
Selection.AutoFilter
Else If ws.Name <> "temp" Then
ws.Select
nShips = get_num_rows
End If
Next
Это все, что вам нужно. Инструкция, которая означает "вот какой-то бесполезный код", не существует в VBA.
Вы хотите комментарии, которые говорят почему, а не что - комментарий, который говорит 'do nothing
полная противоположность этому. Не пишите неоперативный код, это чистый шум.
Предполагая Python pass
работает как C# continue
оператора и переходит к следующей итерации, тогда VBA-эквивалент - это единственное законное использование GoTo
Прыгать:
For ...
If ... Then GoTo Skip
...
Skip:
Next
Просто оставьте это пустым. Вы также можете использовать оператор Select, его легче читать.
For Each ws In ThisWorkbook.Sheets
Select Case ws.Name
Case "Navy Reqs":
'...
Case "temp":
'do nothing
Case Else:
'...
End Select
Next
Этот код показывает тест IF, который продолжает поиск, пока не получит совпадение.
Function EXCAT(Desc)
Dim txt() As String
' Split the string at the space characters.
txt() = Split(Desc)
For i = 0 To UBound(txt)
EXCAT = Application.VLookup(txt(i), Worksheets("Sheet1").Range("Dept"), 2, False)
If IsError(EXCAT) Then Else Exit Function
Next
' watch this space for composite word seach
EXCAT = "- - tba - -"
End Function
Создайте свою собственную версию «pass» с помощью следующей подпрограммы:
Public Sub Pass ()
'This subroutine does nothing except to act as a placeholder
End Sub
Затем просто вызовите подпрограмму, например:
Call Pass
Я кодировал на COBOL много лет, и эквивалентное выражение "ничего не делать" звучит так: NEXT SENTENCE
.
В VBA я создаю фиктивную переменную (иногда глобальную) dim dummy as integer
а затем, когда мне нужно действие "ничего не делать" в If..Then..Else
Я ввел строку кода: dummy = 0
.
Я использую «DoEvents» как отсутствие рабочих строк, где мне может понадобиться точка останова для отладки VBA. Дополнительным преимуществом является возможность всегда останавливаться при нажатии клавиши «Esc» на клавиатуре или кнопке паузы в редакторе VBA.
На самом деле это законный вопрос. Я хочу запустить процедуру отладки, которая останавливается при достижении определенного критического значения, скажем, 8, т. Е. Устанавливает точку останова на x = 8, а затем поэтапно. Так что полезна следующая конструкция:
Select Case x
Case 21
'do nothing
Case 8
'do nothing
Case 14
'do nothing
Case 9
'do nothing
End Select
- Поскольку вы не можете поставить точку останова на комментарии, необходимо собственное выражение.
- Вы также не можете поставить точку останова на операторах Case, потому что они выполняются каждый раз.
Очевидно, здесь все в порядке, например, x=x
, но было бы неплохо иметь что-нибудь формальное, например pass
.
Но я использовал x=x
.
В большинстве языков есть "пустой" или "пустой" оператор, как в Python
pass
. Эти утверждения эволюционировали, потому что они практически полезны, а в некоторых грамматиках необходимы. Например, как предлагали другие, пустые операторы могут служить в качестве якорей без побочных эффектов для отладчика.
Я использую:
Debug.Assert True
Обратите внимание, что если ваш вариант использования - установить условную точку останова, вы можете найти
Stop
более полезно, например:
If targetShape.Type = msoAutoShape Then
Stop
End