如果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 

并且在执行语句时遇到错误,则会发生以下情况:

  1. 该声明将被跳过,脚本将转到下一个声明并继续执行。
  2. 对象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。 所以你怎么能说“现在在工作”已经超出了我的想象。

基本规则:

  1. 双引号(“)通过加倍(”“)
  2. 在VBScriptstring文字(串联(或replace)需要)中没有像“\ n”
  3. 连接运算符是&

基本策略:简化,分化和征服:

 >> 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 

祝你好运。!