jtm2020hyo 发表于 2020-5-24 02:45:33

修复嵌套的If-Then语句

大家好

可能我发现VBScript有一个bug。我用VBScript函数if-then-elseif-else语句创建和实验了很多,我发现在保存我的绘图之前有些东西是可以工作的,但我知道我再次检查时只是停止工作



我将多个函数链接到函数名;“按对象命名”;这会为每个不同的对象生成不同的名称。在图1和图2中,一切都是正确的…
…但我添加了对象类型后,发生了一些奇怪的事情;吊架:


再次重申,一切正常,但仅限于吊架,但我正在检查电缆槽和电缆槽是否合适。这种情况发生时:


我不知道这里发生了什么
;那么:我做了什么坏事吗
如果是,我该如何解决
如果没有,有什么错,还有什么替代方案

PD:附件[代码0
之后:

If "" = "Cable Tray" Then
        RESULT = ""
ElseIf "" = "Cable Tray Fitting" Then
        RESULT = ""
ElseIf "" = "Hanger" Then
        RESULT = ""
Else
        RESULT = "NA"
End If

**** Hidden Message *****

JohnK 发表于 2020-5-24 20:24:39

我不知道'我不会做很多VB脚本的东西,所以你必须告诉我这是否合法
嵌套的IF-Then语句是糟糕的编程。你应该尽量避免使用它们。而且,您永远不应该在return语句之后使用ELSE语句。虽然,我不'不要认为;结果“;必须是一个;return“返回”;这就是为什么我说你需要告诉我我发布的代码剪贴是否合法
你最好用下面这样的小IF语句。您为变量建立了一个默认值(如果您绝对需要),并使用这样的小if语句。理论是,当RESULT关键字是return时(在这种情况下,省略第一行),当if语句变为true时,代码将停止执行
如果结果关键字不是;return“返回”;然后你应该使用这样的语句:
RESULT = "NA"
If "" = "Cable Tray" Then
        RESULT = ""
End If
If "" = "Cable Tray Fitting" Then
        RESULT = ""
End If
If "" = "Hanger" Then
        RESULT = ""
End If 然而,如果结果关键字是一个;return“返回”;语句,则代码如下所示:
If "" = "Cable Tray" Then
        RESULT = ""
End If
If "" = "Cable Tray Fitting" Then
        RESULT = ""
End If
If "" = "Hanger" Then
        RESULT = ""
End If 否则,我想elseif语句是有限制的,也就是说你只能使用一个

jtm2020hyo 发表于 2020-5-26 02:05:24


很抱歉回答得太晚了。我正在测试很多东西来解决这个问题,我在测试你的代码,你的代码可以工作,但是当不是嵌套函数时,这仍然不能解决嵌套的if语句,因为支持每个函数的字符数可能存在任何未记录的限制或类似的限制,我正在尝试找到它。所以我以后会继续更新这个帖子
谢谢你的帮助,也谢谢你是一位很棒的主持人。

jtm2020hyo 发表于 2020-5-26 13:15:27


您好,我终于找到了一个可能的解决方案
您的代码发布在这里:
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语句
If "" = "Cable Tray" Then
        RESULT = ""
ElseIf "" = "Cable Tray Fitting" Then
        RESULT = ""
ElseIf "" = "Hanger" Then
        RESULT = ""
Else
      RESULT = "NA"
End If 这是原始脚本,理论上应该可以用,但它没有#039;t、 最后,Else语句应该是'不让代码工作?我的意思是,否则最终应该等于;结果=“”;一开始。我在做坏事

JohnK 发表于 2020-5-26 13:32:10

很高兴我的代码有效
我不会'不要过分担心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语句旨在提供一个;“违约”;价值
我发布的代码块可能没有'pretty'但它读起来非常清晰(毫无疑问,你的意图是什么)。也就是说(从处理器的角度):"变量集。测试:测试失败。。。测试:变量重新定义

jtm2020hyo 发表于 2020-5-27 09:09:14

1;我已经很久没有做VB了;Elseif在VB中不错;清理代码并执行与分解代码相同的操作;我的直觉告诉我,是这个词引起了这个问题 请参阅#1。您是否尝试过测试不同的标签而不是吊架?

JohnK 发表于 2020-5-28 01:38:34


我同意,增加一个名字不应该破坏公式……问题已经解决了。
页: [1]
查看完整版本: 修复嵌套的If-Then语句