EXCEL VBA用户定义的function – 否则无if

附加的代码在VBA上运行,但我不明白为什么有一个错误说,否则没有如果或如果没有结束如果。 我很确定,如果用if语句,我已经匹配了每一个结尾。

Sub teee()仅用于testingdecimalize函数。 这将是很大的检查代码,并告诉我什么是我的代码错误…我几乎接近完成一个项目,如果我可以解决这个function。

Sub teee() sss = "-1-21+" MsgBox (decimalize(sss)) End Sub 

 Function decimalize(s As Variant) As Long Dim checkers As Variant Dim ab As Long Dim leftnum As Long Dim rightnum As Long Dim poneg As Integer checkers = s ab = 0 leftnum = 0 rigntnum = 0 poneg = 0 'Positive payup or negative payup If Left(checkers, 1) = "-" Then poneg = 1 lencheckers = Len(checkers) checkers = Mid(checkers, 2, lencheckers - 1) Else: poneg = 0 End If startp = InStr(checkers, "-") If startp = 2 Then leftnum = Left(checkers, 1) ElseIf startp = 3 Then leftnum = Left(checkers, 2) ElseIf startp = 4 Then leftnum = Left(checkers, 3) End If rightnum = Mid(checkers, startp + 1, 2) If InStr(checkers, "+") > 0 Then ab = 0.5 ElseIf InStr(checkers, "1/4") > 0 Then ab = 0.25 ElseIf InStr(checkers, "1/8") > 0 Then ab = 0.125 End If rightnum = rightnum + ab If poneg = 0 Then decimalize = rightnum + leftnum * 32 ElseIf poneg = 1 Then decimalize = (rightnum + leftnum * 32) * -1 End If End Function 

提前谢谢了

@Vityata展示了一种消除特定错误的方法。 另一种方法是避免If使用一个Select Case 。 结果代码更具可读性:

 Select Case startp Case 2: leftnum = Left(checkers, 1) Case 3: leftnum = Left(checkers, 2) Case 4: leftnum = Left(checkers, 3) End Select 

此外,你有一个任意的模式声明一些variables,而不是其他人,你至less有一个variables错字: rigntnum = 0几乎可以肯定是rightnum = 0 。 您确实需要在所有模块的顶部使用Option Explicit (也可以在VBA编辑器选项中启用“ Require Variable Declaration )。 这将帮助您编写不容易出现随机错误的代码。

像这样改变它:

 If startp = 2 Then leftnum = Left(checkers, 1) ElseIf startp = 3 Then leftnum = Left(checkers, 2) ElseIf startp = 4 Then leftnum = Left(checkers, 3) End If 

信息:当你在同一行的“then”后面写结果时,不应该写结束如果。 因此,VBA不了解下一个ElseIf来自哪里。

你可以使用以下两个例子:

 'Example 1 (no end if here) if startp = 2 then leftnum = Left(checkers,1) 'Example 2 (you need end if here) if startp = 2 then leftnum = Left(checkers,1) end if