2016-10-24 5 views
0

Я написал свой код в VBScript.I'm получил ошибку в определенной части моего кода, показанного ниже.Ошибка выполнения Microsoft VBScript

[ActiveX Script Task] Error: User script threw an exception: Error Code: 0
Error Source= Microsoft VBScript runtime error
Error Description: Object required: 'REGroupSBUOps'

Error on Line 85

'Declaring and connection string statements 
strREGroupSBUOps ="sp_CPVarianceOpsReport6" 
Set REGroupSBUOps = oDBCon.Execute(strREGroupSBUOps) 

Dim arr() 
ReDim arr(6) 

Dim i  
arr(0) = "REGroupSBUOps" 
arr(1) = "DandBSBUOps" 
arr(2) = "Tristate/Central/EastSBUOps" 
arr(3) = "WestSBUOps" 
arr(4) = "EastSBUOps" 
arr(5) = "UKSBUOps" 
If Not (arr(i).EOF) Then ' <--error on this line 
    'followed by other statements 
+1

'arr' - это массив строк. Строки не имеют свойства 'EOF'. Что такое 'arr (i) .EOF', должно быть, все равно? Что вы хотите проверить с этим заявлением? –

+0

strREGroupSBUOps назначается с сохраненной процедурой, а REGroupSBUOps - это набор результатов sp. Проверяются имена наборов результатов в массиве и состоянии. –

+0

Строка не волшебным образом становится переменной, если вы не используете ['Eval'] (https://msdn.microsoft.com/en-us/library/0z5x4094.aspx), который я настоятельно рекомендую против **. Кроме того, это выглядит как [проблема X-Y] (http://mywiki.wooledge.org/XyProblem). Почему вы не можете просто использовать переменную (ы)? Пожалуйста, объясните фактическую проблему, которую вы пытаетесь решить, вместо того, что вы воспринимаете как решение. –

ответ

0

Поместите код внутри For петли в подлодки, наряду с фактическим исполнением хранимых процедур. Передайте вызовы хранимой процедуры и имена из вашего массива в качестве параметров к югу. Замените все вхождения arr(i) именем переменной, которая берет записи, возвращенные вызовом хранимой процедуры (rs в моем примере ниже).

Sub ExportData(sp, name) 
    Set rs = oDBCon.Execute(sp) 

    If Not rs.EOF Then 
     sFileName1 = "\\CTSC00579895801\ime\MailReports\" & name & ".xls" 
     Set oFSOExcelFile = CreateObject("Scripting.FileSystemObject") 
     Set objExcel = CreateObject("Excel.Application") 
     objExcel.Visible = True 
     ... 
     objExcel.Quit 
     Set objExcel = Nothing 
    End If 
End Sub 

ExportData "sp_CPVarianceOpsReport 1" "Tristate_Central_EastSBUOps" 
ExportData "sp_CPVarianceOpsReport 2" "UKSBUOps" 
... 

В дальнейшей оптимизации вы можете создавать объекты Excel и FileSystemObject как глобальные одиночка и просто обрабатывать файлы внутри подразделов вместо того, чтобы создавать и уничтожать эти экземпляры снова и снова.

Смежные вопросы