レポートで非常に頻繁に必要とするいくつかの式をレポート関数にカプセル化しようとしています。これにより、一度コードを記述して、レポートのどこでも使用できるようになります。しかし、私は本当に 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)
そして今、その部分が機能します