• ベストアンサー

フォームのコントロールソースにReplace関数を使うには?

アクセスのフォームに内容という名前のテキストボックスがあります。 このテキストボックスのコントロールソースも同じく内容という名前ですが、この内容の中身の改行コードはchr$(0A)のみなので、アクセスのフォームでは改行表示されないので、chr$(0D)+chr$(0A)に置き換えたいのです。 その為に、このテキストボックスのコントロールソースに、 = Replace ( [内容] , chr(10), chr(13) & chr(10), , , 1) としましたが、エラーとなります。 エラーの内容は、指定した式の構文が正しくありません。 たとえば値または識別子が前にないのにカンマを指定しています。 というエラーです。 どうすればいいのでしょうか? 以上、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 私は、Access 専門ではありませんが、2003で、標準モジュールにユーザー定義関数を作って、エラーを出さずに、テキストボックスのコントロールソース表示させることは出来ます。また、Chr(10)→ Chr(13)&Chr(10) コードも変換し、テキストボックス内に、改行させることが可能です。 しかし、多少、作りながら、元のソースは何かと、もう一度、ご質問を読んでみると、 >このテキストボックスのコントロールソースも同じく内容という名前ですが、この内容の中身の改行コードはchr$(0A)のみなので、 どうも、よく分かりません。テキストボックスの名前、「内容」に、どのようにして、Chr$(&h0A) つまり、Lf コードのみのテキストを入れるのでしょうか?Winの環境だと、多少、特殊な環境下にあるように思います。Form上では、Label の場合、そのようにします。 プロパティの「Enter入力時の動作---フィールドに行を追加」にしておけば、通常、改行コード(CrLf)が入りますが、どのようになさっているのでしょうか?エディタで、Crコードだけを削除して、テキストボックスに貼り付けましたが、実際にどのようにしているのかは、よく分かりませんでした。通常、表面に出てくるテキストデータでは、このような処理はめったにしたことがありません。 今回のテストは、 '標準モジュールで、以下のようにしてみました。 Public Function myReplace(arg1 As String) As String  If arg1 <> "" Then  '一つでも、CrLf があれば、そのまま出力   If InStr(arg1, vbCrLf) > 0 Then    myReplace = arg1   Else   myReplace = Replace(arg1, vbLf, vbCrLf)  End If End Function プロパテイのコントロールソース =myReplace(nz([TxBx2],"")) もしかしたら、ぜんぜん、見当はずれのことを書いているかもしれませんが、そうでしたら、レスは必要ありません。

hiroi
質問者

お礼

Wendy02さん 詳細なご回答ありがとうございます。 テキストボックスの内容は、テーブルにある内容というフィールドで、これはエクセルを読み込んだデータです。 DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9,・・・ エクセルのセルの中の改行はvbLFのみでした。ですから、これをアクセスのフォームでは、改行されません。このテキストボックスの名前も内容という名前にしています。テーブルのフィールドと同じ名前ですが。 それで、プロパテイのコントロールソースに =myReplace(nz([TxBx2],""))を入れたらエラーになりませんでした。 でも、フォーム表示したら、内容のテキストボックスは#エラーと出て、ここは編集出来ないです。 アクセスって思うようにいかないので、非常に難しいと思い知らされています。よろしくお願いします。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。Wendy02です。 >それから、myReplace関数で、End Ifが1つ足りないのでエラーとなります。End Ifを追加して下さいね。 本当ですね。どうしてミスったのか、自分でも訳が分かりません。 >Private Sub Form_Current()のところで、 >Me.内容.Value = myReplace(Nz(Me.内容.Value, ""))と >入れてみたらうまくいきました! 質問者と回答者が、逆転してしまいましたが、そうですね、私も、そちらのほうがスッキリしているように思います。不完全なレスのために、お手数かけさせてしまい、大変にすみません。私は、年内、もう一度、最初からやり直しするつもりです。

hiroi
質問者

お礼

いいえ、これはWendy02さんのお陰です。 貴重なヒントを頂けて、感謝しています。 どうもありがとうございます。 これからもお互いに頑張りましょう。よろしくお願いします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。Wendy02です。 >=myReplace(nz([TxBx2],""))を入れたらエラーになりませんでした。 >でも、フォーム表示したら、内容のテキストボックスは#エラーと出て、ここは編集出来ないです。 もちろん、TxBx2 は、私のつけたコントロールのTextBox の名前ですから、そのままでは、エラーは出ます。 そちらのフィールド名に合わせれば、 =myReplace(nz([内容],"")) ということかな?フィールドにきちんとあわせてくださいね。 こちらでは、しっかり改行はされています。エラーも出ていません。

hiroi
質問者

お礼

すみません。間違いです。実際は、=myReplace(nz([内容],"")) と入れています。でも、エラーですからどこかが間違ってると思います。別のサンプル作ってよく調べてみます。 ありがとうございます。また、何か判明したら報告します。よろしくお願いします。

hiroi
質問者

補足

遅くなりました。 プロパティのコントロールソースではなく、 Private Sub Form_Current()のところで、 Me.内容.Value = myReplace(Nz(Me.内容.Value, ""))と 入れてみたらうまくいきました! ありがとうございます。 それから、myReplace関数で、End Ifが1つ足りないのでエラーとなります。End Ifを追加して下さいね。 これに関して、何かコメントお願いします。その後、締め切ります。 よろしくお願いします。

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.1

Accessのバージョンは何でしょう? 2000にはReplace等の新規組み込み関数が クエリなどで使えないというバグがあります 使えよるようにするには ユーザ関数内でこれらの関数を使い結果を返すようにします Public Function myReplace(expression, find, replace, start, count, compare) As String myReplace = Replace(expression, find, replace, start, count, compare) End Function

hiroi
質問者

お礼

CHRONOS_0さん 早速の回答ありがとうございます。 バージョンは2003です。そうですか。バグなんですか。 それで、ユーザ関数に組み込んで見ました。 しかし、エラーでうまくいきません。もう一度見直してみます。 申し訳ありません。

hiroi
質問者

補足

やはり、コントロールソースにReplaceとかmyRepreceを使うのは非常に困難なので、あきらめることにします。 コントロールソース以外に方法はないでしょうか? とにかくchr$(0A)をchr$(0D)+chr$(0A)に置き換えて、フォームのテキストボックスに入れる方法をお願いします。