【问题标题】:own function VBA else will not execute [duplicate]自己的函数VBA否则不会执行[重复]
【发布时间】:2021-10-03 05:10:39
【问题描述】:

您好,我完全不知道为什么带有“exit for”的 else 不会执行。

我各自的 Excel 测试单元格的值如下:

“VERS.GR.III,KENNNR.1905,VERS.NR.1023461”

Function DebitorVorhanden(Debitor As String) As Boolean
    Dim Ausgabe As Boolean
    Ausgabe = False
    Dim TextLänge As Integer
    TextLänge = Len(Debitor)
    Dim Prüfer As Integer
    
    For Prüfer = 1 To TextLänge
        If Mid(Debitor, Prüfer, 1) = "1" Then

            Dim PrüferLänge As Integer
            PrüferLänge = 0
            
            Dim Prüfer2 As Integer
            
            For Prüfer2 = Prüfer To Prüfer + 6
                
                If Int(Mid(Debitor, Prüfer2, 1)) = 1 Or 2 Or 3 Or 4 Or 5 Or 6 Or 7 Or 8 Or 9 Then
                        PrüferLänge = PrüferLänge + 1
                    Else
                        Exit For
                End If
                
            Next Prüfer2
            
            If PrüferLänge = 7 Then
                Ausgabe = True
                GoTo DebitorGefunden
            End If
            
        End If
    Next Prüfer
    
DebitorGefunden:
    DebitorVorhanden = Ausgabe
End Function

【问题讨论】:

    标签: vba if-statement


    【解决方案1】:
    If Int(Mid(Debitor, Prüfer2, 1)) = 1 Or 2 Or 3 Or 4 Or 5 Or 6 Or 7 Or 8 Or 9 Then
    

    始终为真,因此 if 案例正在运行。 Or 2 语句返回值 2 并且不将两者与 int(...) 值进行比较。

    一个可行的解决方案是:

    dim tmp
    tmp=Int(Mid(Debitor, Prüfer2, 1))
    If tmp=1 or tmp=2 or tmp=3 Then 
    

    更短的方法是:

    If InStr("123456789", Mid(Debitor, Prüfer2, 1) ) Then
    

    【讨论】:

    • 不幸的是,无论做多还是做空都不会给我带来结果
    • 这正在工作If Mid(Debitor, Prüfer2, 1) = "0" Or Mid(Debitor, Prüfer2, 1) = "1" Or Mid(Debitor, Prüfer2, 1) = "2" Or Mid(Debitor, Prüfer2, 1) = "3" Or Mid(Debitor, Prüfer2, 1) = "4" Or Mid(Debitor, Prüfer2, 1) = "5" Or Mid(Debitor, Prüfer2, 1) = "6" Or Mid(Debitor, Prüfer2, 1) = "7" Or Mid(Debitor, Prüfer2, 1) = "8" Or Mid(Debitor, Prüfer2, 1) = "9"
    • @Bigbe 谢谢。我修好了它。另外:较短的版本现在应该可以使用了。
    【解决方案2】:

    Or 运算符“对两个表达式执行逻辑分离。”
    因此,运算符两侧的表达式完全分开处理。
    这意味着要让它工作,它必须是这样的:

    If Int(Mid(Debitor, Prüfer2, 1)) = 1 Or Int(Mid(Debitor, Prüfer2, 1)) = 2 Or Int(Mid(Debitor, Prüfer2, 1)) = 3....
    

    有几种方法可以解决问题;处理数字的常用方法是使用Select Case statement,因为您可以执行Case 1 To 9 之类的操作

    但我喜欢 Samuel 的 InStr 方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      相关资源
      最近更新 更多