2013-07-02 4 views
8

問題があり、試したすべてが機能しません。私は '3055558798'の書式設定なしの数字を返す電話番号データフィールドを持っていますが、これは '(305)555-8798'のようになります。電話番号をフォーマットし、戻り値がヌルの場合は#ERRORを非表示にします。SSRS

= Format(Convert.ToDouble(Fields!MyFieldName.Value), "(###)###-####") 

唯一の問題は、戻り値がnullの場合、スペース内に#ERRORを得ることです。私は#ERRORを取り除いた式を見つけましたが、それでも両方を一緒に置く運はありません。私は表現を見つけるために私のレポートを掘り下げなければならないが、うまくいけば誰かが私を助けることができるだろう。私は数ヶ月間報告してきましたが、私はまだそこにあるすべての表現ではあまりよくありません。私はちょうど電話番号をフォーマットする必要があり、戻り値がnullの場合は何も表示しません。同じサイトにもこれがありますが、私は表現を見いだしましたが、うまくいきませんので、なぜその男が彼のために働いたと言われているのかわかりません。ちょうど私のために動作しません

=Iif (Fields!MyFieldName.Value Is Nothing, Nothing, 
Format(Convert.ToDouble(Fields!MyFieldName.Value), "(###)###-####")) 

、私は構文が間違っていると考えているが、私はそれを修正するために変更するのか分かりません。ありがとう。

+0

を私は 'MyFieldName = '3055558798組合を選択し、すべてが選択MyFieldName = null'なので基づいて、単純なデータセット上でこれを試してみました2番目の式はエラーなしで必要に応じて機能しました。表現自体に本質的に間違ったものはないようです。 –

答えて

22

エラーは書式設定とは関係ありませんが、それは失敗しているDoubleへの変換です。だからあなたのフィールドが完全に数字で構成されている限り、あなたの式は完全に機能します。ただし、数字のない文字を含むデータがあるため、Convert.ToDouble()関数でエラーが発生します。

残念ながら、IIF式では解決できません。IIFは関数であり、言語構成ではないため、ブール条件パラメータの値に関係なく、関数trueとfalseが評価されます。

=IIF(IsNumeric(Fields!Phone.Value), Format(Convert.ToDouble(Fields!Phone.Value), "(###)###-####"), Fields!Phone.Value) 

は関係なく、常にIsNumeric関数の結果の倍増への変換を試みますこれは、次のことを意味します。これを解決するには、2つの方法があります。

利用ヴァルの代わりに、ToDouble

ToDoubleに問題が文字列が不適切な形で変換することのエラーですが。 Valにはそのような問題はありません - それは何でもできる数字をつかむだけです。だから今私たちが表現を使用することができます

=IIF(Fields!Phone.Value Is Nothing, 
    Nothing, 
    IIF(IsNumeric(Fields!Phone.Value), 
    Format(Val(Fields!Phone.Value), "(###)###-####"), 
    Fields!Phone.Value) 
) 

フィールドがNullであれば、この式はNothingを返すが、それが数値であるので、それを数値に変換し、フォーマット場合かどうかを確認し、それ以外の場合は、単にあるものを返します現場で。

Val関数はフィールドが数値ではなくても実行されていますが、Val関数ではToDoubleのようなエラーが発生しないため、この式は成功します。計算を行い、結果を破棄するだけです。

カスタムコードReportメニューで

Report Properties...をクリックしてCode]タブに移動します。次のコードを挿入します。

Function FormatPhone(Phone AS String) AS String 
    IF (Phone Is Nothing) Then 
    Return Nothing 
    Else If (IsNumeric(Phone)) Then 
    Return Format(Convert.ToDouble(Phone), "(###)###-####") 
    Else 
    Return Phone 
    End If 
End Function 

は、あなたの電話番号のセルに次の式を使用します

=Code.FormatPhone(Fields!Phone.Value) 
+0

クリスは非常によく言葉を述べ、返信をしてくれてありがとう。残念ながら、レポートにコードを書くのは避けていますので、あなたの言ったことをすることができないかもしれませんが、問題がどのように修正されるのか分かります。私はいつも数値を返すと思うので別の見方をする必要がありますが、それらは常に10桁ではないので、フォーマット式は関係なく処理しますが、NULLのための#ERRORを投げます問題を引き起こします。私はまだこれをより良く理解するためにあなたのアイデアを試してみます。どうもありがとうございました。 –

+0

フォーマットが10桁未満または10桁を超えても、エラーは発生しません。あなたのパターンに基づいて、 '30555587'は'(3)055-5587'を与え、 '305555879800'は'(30555)587-9800'を与えて、右から塗りつぶして左手部分にlessorまたはそれ以上の桁を入れますフォーマットの無効な文字のためにエラーになっているのは、倍精度に変換することだけです。 –

+1

値式のVBAコードとは対照的に、カスタムコードエリアのVBAコードに対する偏見がなぜあるのか分かりません.VBAはどこにあってもVBAです。しかし、私はVal変換関数が使えるので、エラーを投げないので、動作する式を持つことができます。私はこれを答えに加えました。 –

関連する問題