2016-10-12 3 views
0

SSRSレポートには、Excel VBAでテストデータを実行すると完全にうまく動作するカスタムコードがありますが、エラー

テキストボックス「textbox72」の値式は、エラーを含む:オブジェクト参照がオブジェクト

レポートは、単純なテーブルレポートであるのインスタンスに設定されていません。カスタムコードは、監査レポートの「前」と「後」の文字列を比較し、追加または削除された詳細を返信する必要があります。文字列はchar(10)で区切られています。文字列行は追加または削除のみ可能です。文字列の行自体は変更されません。 Null文字列はありません。私は正常にExcel VBAでこれをテストしたので、コードはおそらく大丈夫だと思います。何か案は?SSRS VBAコードオブジェクト参照がオブジェクトのインスタンスに設定されていない

textbox72のコード呼び出しが

=iif(len(Fields!AOS.Value) > 0 and len(Fields!AfterAOS.Value) > 0,code.go_compare(ReportItems),"") 

あるレポートのコードがある:(エクセルVBA試験から)

Function go_compare(Items as ReportItems) as string 
Dim j As Integer 
Dim x As Integer 
Dim Diff(50) As String 
Dim DiffInd As Integer 
Dim Intmatch As Integer 
Dim StrDiff as string 
Dim Arr() As String 
Dim Arr1() As String 
Dim StrVal As String 
Dim StrFinal As String 
Dim y As Integer 
Dim Str1 as string 
Dim Str2 as string 

Str1 = items("AOS_1").value 
Str2 = items("AfterAOS").value 
StrFinal = "" 
StrDiff = "" 

For y = 0 To 1 
    Erase Diff 
    If y = 1 Then 
     StrVal = "Removed" 
     Arr = Split(Str1, Chr(10)) 
     Arr1 = Split(Str2, Chr(10)) 
     Else 
     StrVal = "Added" 
     Arr = Split(Str2, Chr(10)) 
     Arr1 = Split(Str1, Chr(10)) 
    End If 
    For j = 0 To UBound(Arr) 
    Intmatch = 0 
    For x = 0 To UBound(Arr1) 
     If Trim(Arr(j)) = Trim(Arr1(x)) Then 
     Intmatch = 1 
     End If 
    Next x 
    If Intmatch = 0 Then 
     Diff(DiffInd) = Trim(Arr(j)) 
     DiffInd = DiffInd + 1 
    End If 
    Next j 

    StrDiff = StrDiff & StrVal & " Values" + vbCrLf 
    For j = 0 To UBound(Diff) 
    If Diff(j) = "" Then Exit For 
    StrDiff = StrDiff + Diff(j) + vbCrLf 
Next j 
If Len(StrDiff) > 16 Then 
    StrFinal = StrFinal + StrDiff 
End If 
StrDiff = "" 
Next y 
Return StrFinal 
End Function 

サンプルデータ

Dim StrStr1 As String 
Dim StrStr2 As String 

StrStr1 = "xxxx" & Chr(10) 
StrStr1 = StrStr1 & "yyyy" & Chr(10) 
StrStr1 = StrStr1 & "zzzz" & Chr(10) 
StrStr1 = StrStr1 & "aaaa" & Chr(10) 
StrStr1 = StrStr1 & "bbbb" & Chr(10) 
StrStr1 = StrStr1 & "cccc" & Chr(10) 
StrStr1 = StrStr1 & "dddd" & Chr(10) 

StrStr2 = "xxxx" & Chr(10) 
StrStr2 = StrStr2 & "yyyy" & Chr(10) 
StrStr2 = StrStr2 & "zzzz" & Chr(10) 
StrStr2 = StrStr2 & "aaaa" & Chr(10) 
StrStr2 = StrStr2 & "bbbb" & Chr(10) 
StrStr2 = StrStr2 & "dddd" & Chr(10) 
StrStr2 = StrStr2 & "eeee" & Chr(10) 

期待される結果

Removed Values 
cccc 

Added Values 
eeee 
+0

私はわからないんだけど、私はReportItems'はあなたが '関数go_compare(ReportItemsなどの項目)' –

+0

おかげ@PaulOgilvieに使うタイプの名前である 'ことcode.go_compare(ReportItems)' 'に気づきます。私は、レポートアイテムコレクション全体ではなく個別にフィールドを送信するが、同じエラーが発生するような場所で、これを試してみました。 '= code.go_compare(Fields!AOS.Value、Fields!AfterAOS.Value)'(これを反映するようにコードを変更する) – MiguelH

答えて

0

問題はErase Diffステートメントから発生しているようです。私が配列のReDimでこれを実行すると、ルーチンが動作します!

元のコード(つまりReDimがない)がExcel VBAでは動作しますが、SSRSでは動作しない理由がわかりますか?

For y = 0 To 1 
    Erase Diff 
    Redim Diff(100) 
関連する問題