2016-10-05 5 views
1

Я фиксирующую сильфона ошибка „DataTable операция importsheet не удалось недопустимый файл.“, Используя этот путь:Если Err.Description = «....» Тогда ..... в VBscript

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

Зачем вам сравнивать с 'Err.Description' ?, не имеет смысла использовать' Err.Number' вместо этого. – Lankymart

+0

'/ n' ничего не значит в Basic. В C это означает новую строку, но в Basic ничего. И мы присоединяем строки с '&'. –

+0

@Noodles, вы не имеете в виду '\ n' не'/n'? - [Back Slash Vs Forward Skash] (http://www.cs.ucsb.edu/~pconrad/topics/BackslashVsForwardSlash/) – Lankymart

ответ

1

Я действительно борюсь с тем, что вы пытаетесь сделать, и ваши комментарии не помогает ...

При использовании

On Error Resume Next 

и вы столкнулись с ошибкой при выполнении инструкции следующих вещей случится;

  1. Заявление будет пропущено, и скрипт перейдет к следующему утверждению и продолжит выполнение.
  2. Объект Err будет заполнен информацией об ошибке, вызвавшей пропущение инструкции.

Err object состоит из нескольких ключевых свойств, которые описывают возникшую ошибку;

  • Number - Код ошибки ошибки, поднятой.
  • Source - Источник ошибки, поднятой, это может быть сторонняя библиотека, VBScript Runtime и т. Д.
  • 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." - Ref

    Объект Err не содержит свойство Details, если это не что-то конкретное для QTP, но до сих пор я не смог найти что-нибудь с быстрым Google Search. Итак, как вы можете сказать «сейчас он работает» находится вне меня.

+0

@sourh вы попробовали? Как вы попали на? – Lankymart

+2

Спасибо, я сейчас работаю, используя ваше решение, оно работает. Я использовал Err.description вместо Err.Number, потому что это мое первое использование в Error resume next, и у меня есть пример с использованием описания, но лучше использовать номер ошибки. Еще раз спасибо – sourh

+0

@sourh Добро пожаловать. – Lankymart

0

Основные правила:

  1. двойные кавычки (") экранируются путем удвоения (" ")
  2. не ускользает, как "\ п" в VBScript строковых литералов (конкатенации (или замены) необходимо)
  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 
>> 

Добавлено:

Применительно к вашему сообщению строка/ошибки:

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

моим глазным яблокам не нравится, что ваш выход (хотя правильный) имеет неисчерпаемую строку ... Как очень педантичный из меня! – Dave

-1

Попробуйте заменить Err.Description линию с этим

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

Удачи.!

+2

Зачем вам это делать?Я бы плакал, если мне нужно было изменить этот код, просто используйте «Err.Number». – Lankymart

+0

Мне нужно описание, а не номер, и проблема заключается в использовании Err.Details, а не Err.Description в моем случае. Теперь он работает. – sourh

+1

@sourh what ?, это не имеет смысла, зачем вам нужно проверить возвращаемое описание? плюс я никогда не слышал о «Err.Details», нет такого свойства объекта «Err» в VBScript. – Lankymart

0

Вы получаете синтаксическую ошибку, поскольку двойные кавычки в вашем операторе 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 

Кроме того, вы не можете используйте \ n, если вы хотите сравнить 2 строки в инструкции if. Используйте 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 

Again: Использование err.number будет иметь больше смысла, как и любые дополнительные/недостающее пространство/перевод строки в выше Если условие не получится условие.