在vba中什么都不做

时间:2017-10-17 17:11:04

标签: vba excel-vba excel

在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

我在这里得到一个错误,没有定义pass。感谢。

8 个答案:

答案 0 :(得分:8)

删除pass并重新运行代码。 VBA很乐意接受我相信

答案 1 :(得分:4)

请留空。您也可以使用Select语句,它更容易阅读。

For Each ws In ThisWorkbook.Sheets
    Select Case ws.Name
        Case "Navy Reqs":
            '...

        Case "temp":
            'do nothing

        Case Else:
            '...
    End Select
Next

答案 2 :(得分:4)

不要包含任何陈述:

Sub qwerty()
    If 1 = 3 Then
    Else
        MsgBox "1 does not equal 3"
    End If
End Sub

答案 3 :(得分:4)

编写符合其说法的代码,并说出它的作用

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

这就是你所需要的一切。一条指令意味着&#34;这里有一些无用的代码&#34;在VBA中不存在。

您希望评论说为什么,而不是什么 - 评论说'do nothing与此完全相反。不要写无操作码,这是纯粹的噪音。

假设Python的pass像C#的continue语句一样工作并跳到下一次迭代,那么VBA等价物是唯一合法使用的{{1}跳转:

GoTo

答案 4 :(得分:2)

此代码显示了一个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

答案 5 :(得分:1)

这实际上是一个合法的问题。我想运行一个调试例程,该例程将在某个临界值(例如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

答案 6 :(得分:0)

我用COBOL编码了很多年,等效的'do no'语句是NEXT SENTENCE

在VBA中,我发现自己创建了一个虚拟变量(有时是全局变量)dim dummy as integer,然后当我需要在If..Then..Else中执行“不执行任何操作”操作时,我输入了以下代码: {1}}。

答案 7 :(得分:0)

大多数语言都有“ null”或“空”语句,例如Python的pass。这些陈述已经演变,因为它们实际上是有用的,并且在某些语法上是必需的。例如,正如其他人所建议的那样,空语句可以充当调试器的无副作用锚点。

我使用:

Debug.Assert True

请注意,如果您的用例是设置条件断点,您可能会发现Stop更有用,如:

        If targetShape.Type = msoAutoShape Then
            Stop
        End