Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
EXCEL VBA用户定义函数-else不带if_Vba_Excel_If Statement_User Defined Functions - Fatal编程技术网

EXCEL VBA用户定义函数-else不带if

EXCEL VBA用户定义函数-else不带if,vba,excel,if-statement,user-defined-functions,Vba,Excel,If Statement,User Defined Functions,所附的代码是在VBA上运行的,但我不明白为什么会出现错误,即“else with if”或“if with end if”。我很确定我已经把if语句的每一个端点都匹配好了 Sub teee()仅用于测试十进制函数。这将是极大的检查代码,并告诉我什么是错误的我的代码。。。我几乎接近完成一个项目,如果我可以解决这个功能 Sub teee() sss = "-1-21+" MsgBox (decimalize(sss)) End Sub 提前非常感谢这样更改它: If startp = 2

所附的代码是在VBA上运行的,但我不明白为什么会出现错误,即“else with if”或“if with end if”。我很确定我已经把if语句的每一个端点都匹配好了

Sub teee()仅用于测试十进制函数。这将是极大的检查代码,并告诉我什么是错误的我的代码。。。我几乎接近完成一个项目,如果我可以解决这个功能

Sub teee()

sss = "-1-21+"

MsgBox (decimalize(sss))


End Sub

提前非常感谢

这样更改它:

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”之后写入结果时,如果是,则不应写入end。因此,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
更改如下:

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”之后写入结果时,如果是,则不应写入end。因此,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

@Vityata展示了一种消除特定bug的方法。另一种方法是避免使用
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

另外,您有一个声明某些变量但不声明其他变量的任意模式,并且您至少有一个变量类型:
rigntnum=0
几乎肯定应该是
rightnum=0
。您确实需要在所有模块的顶部使用
Option Explicit
(另外,在VBA编辑器选项中启用
Require Variable Declaration
)。这将帮助您编写不容易出现随机错误的代码。

@vityta展示了一种消除特定错误的方法。另一种方法是避免使用
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

另外,您有一个声明某些变量但不声明其他变量的任意模式,并且您至少有一个变量类型:
rigntnum=0
几乎肯定应该是
rightnum=0
。您确实需要在所有模块的顶部使用
Option Explicit
(另外,在VBA编辑器选项中启用
Require Variable Declaration
)。这将帮助您编写不容易出现随机错误的代码。

感谢您的宝贵建议,John将在下次编写。同时使用几个IF语句总是让我感到很复杂。谢谢你的建议,John,下次会这样做的。同时使用几个IF语句总是让我感到很复杂。非常感谢,Vityata,您的解决方案非常有效!很高兴知道,+1今天的业力:)如果你愿意,你可以点击左边的绿色复选框来选择答案,如下所示:非常感谢,Vityata,你的解决方案非常有效!很高兴知道,+1今天的业力:)如果你愿意,你可以点击左绿色复选框选择答案,如下所示: