2016-10-24 5 views
0

私は自分のコードをVBScriptで書いています。下記のコードの特定の部分でエラーが発生しています。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のオブジェクトを作成し、だけではなく、何度も何度もそれらのインスタンスを作成し、破壊のサブ内のファイルを処理することもできます。

関連する問題