修复嵌套的If-Then语句
大家好。可能我发现了VBScript的一个错误。我用VBScript函数if-then-elseif-else语句做了大量的创建和试验,我发现在保存我的绘图之前有些东西是有效的,但我知道我再次检查只是停止工作。
我将多个函数链接到函数名“NAME_BY_OBJECT”,它为每个不同的对象生成不同的名称。在图1和图2中,一切都是正确的...
...但是当我添加对象类型“吊架”时,发生了一些奇怪的事情:
...同样,一切正常,但只是使用了吊架,但我在检查电缆槽和电缆槽配件时发生了这种情况:
我不知道这里发生了什么。
那么:
1)我是不是做错了什么?
2)如果是,我该如何解决这个问题?
3)如果不是,是什么问题,有哪些替代方案?
PD:附件
之前:
If "" = "Cable Tray" Then
RESULT = ""
ElseIf "" = "Cable Tray Fitting" Then
RESULT = ""
Else
RESULT = "NA"
End If
之后:
If "" = "Cable Tray" Then
RESULT = ""
ElseIf "" = "Cable Tray Fitting" Then
RESULT = ""
ElseIf "" = "Hanger" Then
RESULT = ""
Else
RESULT = "NA"
End If
**** Hidden Message ***** 我不做很多VB脚本的东西,所以你必须告诉我这是否合法。
嵌套的IF-Then语句是糟糕的编程。你应该尽可能避免使用它们。并且永远不要在return语句后使用ELSE语句。虽然,我认为在VB脚本中“结果”不一定是“返回”语句,所以这就是为什么我说你需要告诉我我发布的代码片段是否合法。
您最好使用下面这样的小IF语句。你为你的变量建立一个缺省值(如果你绝对需要的话),并且像这样使用小的if语句。理论是,当且如果,结果关键字是一个返回(在这种情况下,你可以省略第一行),当一个if语句为真时,代码将停止执行。
如果RESULT关键字不是“return”语句,那么您应该使用类似下面的语句:
RESULT = "NA"
If "" = "Cable Tray" Then
RESULT = ""
End If
If "" = "Cable Tray Fitting" Then
RESULT = ""
End If
If "" = "Hanger" Then
RESULT = ""
End If
但是,如果RESULT关键字是“return”语句,则代码将如下所示:
If "" = "Cable Tray" Then
RESULT = ""
End If
If "" = "Cable Tray Fitting" Then
RESULT = ""
End If
If "" = "Hanger" Then
RESULT = ""
End If
否则,我猜elseif语句是有限制的,也就是说您只能使用一个。
很抱歉这么晚才回答。我测试了很多东西来解决这个问题,我测试了你的代码,你的代码工作正常,但是当不是嵌套函数时,这仍然不能解决嵌套的if语句,因为在支持每个函数的字符数方面可能存在任何未记录的限制或类似的限制,我正在尝试找到它。所以以后我会继续更新这个帖子。
PD:谢谢你的帮助,也谢谢你是一个伟大的版主。
再次向您问好,我终于找到了一个可能的解决方案。
您的代码发布在此处:
RESULT = "NA"
If "" = "Cable Tray" Then
RESULT = ""
End If
If "" = "Cable Tray Fitting" Then
RESULT = ""
End If
If "" = "Hanger" Then
RESULT = ""
End If
...工程和解决问题,但我需要在每个公式函数中插入这个结构,但我需要添加一个额外的比较语句和过滤器对象,最终减少字符的数量。
...大概是这样的:
RESULT = "NA"
If ("") = ("Cable Tray") And ("ParType" = "Trunking") Then
RESULT = ""
End If
If ("") = ("Cable Tray Fitting") And ("ParType" = "Elbow")Then
RESULT = ""
End If
If ("") = ("Hanger") Then ("Anchor_System" = "Electric")
RESULT = ""
End If
但是这需要分析每个公式,且完全失去了它们美丽,出于这个动机,我在结尾添加了If ElseIf Else End If语句代码6]
这是原始脚本,理论上应该可以工作,但实际上不行。Else语句,最后不应该让代码工作吗?我的意思是,Else在结尾应该等同于开头的“RESULT=”。我在做坏事吗?
很高兴我的代码有效。
我不会太担心IF-IFELSE-ELSE语句中未记录的限制;我会避免使用它们。它们通常是非常糟糕的编程方法。
尝试替换它:
If(boolean_expression) Then
Statement n
ElseIf (boolean_expression) Then
Statement n
ElseIf (boolean_expression) Then
Statement n
Else
Statement n
End If
使用这种方法:
Select Case expression
Case expressionlistN
statementN
Case expressionlistN
statementN
Case Else
elsestatementN
End Select
您是对的,ELSE语句旨在提供一个“默认”值。
我发布的代码块可能不那么“漂亮”,但它读起来干净多了(您的意图毋庸置疑)。也就是说(从处理器的角度来说):
“变量集。测试:测试-失败。...测试:变量被重新定义"
1.我已经很久没有使用VB了。
2.Elseif在VB中还不错。它清理代码,并做与分解代码相同的事情。
3.我的直觉告诉我,是“挂钩”这个词导致了这个问题。请参见#1。
您是否尝试过测试不同的标签而不是衣架?
我同意,增加一个名字不应该打破公式…问题已经解决了。
页:
[1]