如果 Err.Description = "....." 那么 ..... 在 VBscript 中

If Err.Description = "...." Then ..... in VBscript

我正在使用这种方式修复波纹管错误 "datatable importsheet operation failed. Invalid file":

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 

但是我得到了这个错误:

由于语法错误,测试 运行 无法继续。

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

一切正常。请任何帮助?我哪里错了?

基本规则:

  1. 双引号 (") 通过加倍转义 ("")
  2. 在 VBScript 字符串文字中没有像“\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/error 消息:

'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".

尝试用此替换 Err.Description 行

If Err.Description = "The DataTable.ImportSheet operation failed. Invalid file." & vbCrLf & "Line (20): DataTable.ImportSheet Environment(" & STPFilePath & "),Environment(" & TestScriptName & ")," & Action2 & "." Then

祝你好运!

我真的为你正在尝试做的事情而苦苦挣扎,你的评论也没有帮助...

使用时

On Error Resume Next

如果您在执行语句时遇到错误,则会发生以下情况;

  1. 该语句将被跳过,脚本将移至下一条语句并继续执行。
  2. 对象 Err 将填充导致语句被跳过的错误的详细信息。

Err object 由一些描述发生的错误的关键属性组成;

  • Number - 所引发错误的错误代码。
  • Source - 引发错误的来源,这可以是第 3 方库、VBScript 运行时等。
  • Description - 错误的自由文本描述。

如果要检查错误

The DataTable.ImportSheet operation failed. Invalid file.

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

我觉得最令人困惑的是这个线程中的错误信息。

  • "I need the description and not the number and the problem is to use Err.Details and not Err.Description in my case. Now, it is working." -

    Err 对象不包含名为 Details 的 属性 除非这是 QTP 特有的东西,但到目前为止我还没有能够快速找到任何东西 Google 搜索。所以你怎么能说 “它现在正在工作” 超出了我的范围。

您收到语法错误,因为您的 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 将更有意义,因为上面的任何 extra/missing space/newline 如果条件将失败条件。