レポートで非常に頻繁に必要とするいくつかの式をレポート関数にカプセル化しようとしています。これにより、一度コードを記述して、レポートのどこでも使用できるようになります。しかし、私は本当に Pascal / C# プログラマであり、VB(A) 構文に苦労しています.....
しかし、この小さな日付書式設定機能でさえ、どういうわけか機能しません...
Public Function DateFmt (ByVal dt As DateTime) As String
Return IIF(IsNothing(dt), "", FormatDateTime(dt, 2))
End Function
基本的に、DateTimeフィールドがNULLデータベースにある場合は空の文字列 (空のセル) を表示したいのですが、それ以外の場合は「短い日付」の書式設定オプションを使用します。
セルでは、これをセル式として追加しようとしていますが、次のように式を入力し始めると:
=Code.
インテリセンスが起動しますが、私の関数がそのリストに表示されません.....うーん....何が欠けていますか?
更新:
=Code.DateFmt(.....)インテリセンスが機能しない場合でも、セルに式を入力できることに気付きましたが、残念ながら機能しません。式を直接追加する
NULLと表示される日付が適切に抑制されますが、この共有関数を使用するとレポートNULLに日付が01.01.0001再び表示されます。なぜ?
また、選択肢のリストに応じて値を返す関数、つまりSWITCH基本的にステートメントが必要です。このコードは正しいですか?
Public Function GetGrp(ByVal grp As String)
Select Case grp
Case "Region"
Return fields!RegionId.Value
Case "Somedate"
Return YEAR(Fields!Somedate.Value)
End Select
End Function
この関数により、実際にはコンパイルが失敗し、次のエラー メッセージが表示されます。
ユーザー定義コードの 7 行目のエラー: [BC30469] 非パブリック メンバーへの参照にはオブジェクト インスタンスが必要です
?!?!?!?!? ここでSSRSが私に伝えようとしているのは正確には何ですか?
更新 #2:
OK、これを理解しました -Fieldsコレクションはカスタム コードでは使用できません (理由は明らかではありません - とにかく....)。
したがって、この関数を次のように変更する必要がありました。
Public Function GetGrp(ByVal grp As String, ByVal fields As Fields)
そして今、その部分が機能します