如果Err.Description =“…”然后…在VBscript
我正在修复波纹pipe错误“数据表导入操作失败。无效的文件”使用这种方式:
On error resume next DataTable.ImportSheet Environment("STPFilePath"),Environment("TestScriptName"),"Action2" If Err.Description = "The DataTable.ImportSheet operation failed. Invalid file." \n "Line (20): "DataTable.ImportSheet Environment("STPFilePath"),Environment("TestScriptName"),"Action2""." Then list of instructions end if
但是我得到这个错误:
由于语法错误,testing运行无法继续。
Expected 'Then' Line (24): "If Err.Description = "The DataTable.ImportSheet operation failed. Invalid file." \n "Line (20): "DataTable.ImportSheet Environment("STPFilePath"),Environment("TestScriptName"),"Action2""." Then".
一切看起来不错。 请帮忙吗? 我错了?
我真的很努力想要做什么,你的意见并没有帮助…
使用时
On Error Resume Next
并且在执行语句时遇到错误,则会发生以下情况:
- 该声明将被跳过,脚本将转到下一个声明并继续执行。
- 对象
Err
将填充导致语句被跳过的错误的详细信息。
Err
对象由描述发生的错误的几个关键属性组成;
-
Number
– 引发错误的错误代码。 -
Source
– 被提出的错误的来源,这可以是第三方库,VBScript运行时间等。 -
Description
– 错误的自由文本描述。
如果你想检查错误
DataTable.ImportSheet操作失败。 无效文件。
什么时候
DataTable.ImportSheet Environment("STPFilePath"),Environment("TestScriptName"),"Action2"
执行您需要捕获对应于该特定错误的Err.Number
代码。
像这样的东西;
On Error Resume Next DataTable.ImportSheet Environment("STPFilePath"),Environment("TestScriptName"),"Action2" 'Check that an error occurs If Err.Number <> 0 Then 'Identify specific error and deal with accordingly. Select Case Err.Number Case 20012 'Code for DataTable.ImportSheet operation failed 'List of instructions... Case Else 'Unhandled error show to screen MsgBox "Error: " & Err.Number & " (" & Err.Source & ") - " & Err.Description End Select 'Finished handling the error Call Err.Clear() End If
我觉得最容易混淆的是这个线程中的信息丢失。
-
“我需要的是描述而不是数字,问题是使用Err.Details而不是Err.Description,现在正在工作。” – 参考
Err
对象不包含一个名为Details
的属性,除非这是QTP特有的东西,但是到目前为止我还没有find任何快速的Googlesearch。 所以你怎么能说“现在在工作”已经超出了我的想象。
基本规则:
- 双引号(“)通过加倍(”“)
- 在VBScriptstring文字(串联(或replace)需要)中没有像“\ n”
- 连接运算符是&
基本策略:简化,分化和征服:
>> s = "1" & vbCrLf & "-""pi""-" >> t = "1" & vbCrLf & "-""pi""-" >> WScript.Echo s >> WScript.Echo t >> If s = t Then >> WScript.Echo "no surprise" >> End If >> 1 -"pi"- 1 -"pi"- no surprise >>
添加:
应用于您的string/错误消息:
's = "The DataTable.ImportSheet operation failed. Invalid file." \n "Line (20): "DataTable.ImportSheet Environment("STPFilePath"),Environment("TestScriptName"),"Action2""." s = "1" & vbCrLf & "2: ""3(""4""),5(""6""),""7""." WScript.Echo s
输出:
cscript 39878005.vbs 1 2: "3("4"),5("6"),"7".
你得到一个语法错误,因为你的if语句中的双引号不会被转义。
我不知道你在这里试图做什么,也许使用Err.Number更有意义,但如果你想避免语法错误,然后使用此代码:
If Err.Description = "The DataTable.ImportSheet operation failed. Invalid file."" \n ""Line (20): ""DataTable.ImportSheet Environment(""STPFilePath""),Environment(""TestScriptName""),""Action2""." Then ''' list of instructions End If
另外,如果要比较if语句中的2行,则不能使用\ n。 使用CHR(13)
或CHR(10)
代替\ n。 即
If Err.Description = "The DataTable.ImportSheet operation failed. Invalid file."& CHR(13) &"Line (20): ""DataTable.ImportSheet Environment(""STPFilePath""),Environment(""TestScriptName""),""Action2""." Then '''list of instructions End If
再一次:使用Err.Number会更有意义,因为任何额外的/缺less的空间/新行如果条件将失败条件。
尝试用此replaceErr.Description行
If Err.Description = "The DataTable.ImportSheet operation failed. Invalid file." & vbCrLf & "Line (20): DataTable.ImportSheet Environment(" & STPFilePath & "),Environment(" & TestScriptName & ")," & Action2 & "." Then
祝你好运。!