excel 在vba中什么也不做

taor4pac  于 2023-03-24  发布在  其他
关注(0)|答案(9)|浏览(205)

在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

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

ffx8fchx

ffx8fchx1#

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

omhiaaxx

omhiaaxx2#

不包含任何声明:

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

yhived7q3#

你也可以使用Select语句,这样更容易阅读。

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

        Case "temp":
            'do nothing

        Case Else:
            '...
    End Select
Next
p3rjfoxz

p3rjfoxz4#

编写代码,做到它所说的 *,并说它所做的 *。

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中不存在一个意思是“这里有一些无用的代码”的指令。
你想要的注解应该是 why,而不是 what --如果注解是'do nothing,那就完全相反了。不要写无操作代码,那纯粹是噪音。
假设Python的pass像C#的continue语句一样工作,并且跳到下一个迭代,那么VBA等价物是GoTo跳转的唯一合法使用:

For ...    
        If ... Then GoTo Skip
        ...
Skip:
    Next
iq0todco

iq0todco5#

这段代码显示了一个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
zsohkypk

zsohkypk6#

我用COBOL编程很多年了,等价的“什么都不做”语句是NEXT SENTENCE
在VBA中,我发现自己创建了一个虚拟变量(有时是全局变量)dim dummy as integer,然后当我需要在If..Then..Else中执行“什么都不做”操作时,我会放入一行代码:dummy = 0 .

cs7cruho

cs7cruho7#

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

njthzxwz

njthzxwz8#

大多数语言都有一个“null”或“empty”语句,比如Python的pass。这些语句的发展是因为它们实际上很有用,在某些语法中是必要的。例如,正如其他人所建议的,null语句可以作为调试器的无副作用锚。
我用途:

Debug.Assert True

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

If targetShape.Type = msoAutoShape Then
            Stop
        End
bwleehnv

bwleehnv9#

我使用“DoEvents”作为没有操作行的地方,我可能需要一个断点进行VBA调试。它有一个额外的好处,总是停止键盘上的“Esc”键或VBA编辑器中的暂停按钮。

相关问题