アプリ版:「スタンプのみでお礼する」機能のリリースについて

アクセスのフォームに内容という名前のテキストボックスがあります。
このテキストボックスのコントロールソースも同じく内容という名前ですが、この内容の中身の改行コードはchr$(0A)のみなので、アクセスのフォームでは改行表示されないので、chr$(0D)+chr$(0A)に置き換えたいのです。

その為に、このテキストボックスのコントロールソースに、
= Replace ( [内容] , chr(10), chr(13) & chr(10), , , 1)
としましたが、エラーとなります。
エラーの内容は、指定した式の構文が正しくありません。
たとえば値または識別子が前にないのにカンマを指定しています。
というエラーです。

どうすればいいのでしょうか?

以上、よろしくお願い致します。

A 回答 (4件)

こんばんは。



私は、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],""))

もしかしたら、ぜんぜん、見当はずれのことを書いているかもしれませんが、そうでしたら、レスは必要ありません。
    • good
    • 0
この回答へのお礼

Wendy02さん
詳細なご回答ありがとうございます。
テキストボックスの内容は、テーブルにある内容というフィールドで、これはエクセルを読み込んだデータです。
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9,・・・
エクセルのセルの中の改行はvbLFのみでした。ですから、これをアクセスのフォームでは、改行されません。このテキストボックスの名前も内容という名前にしています。テーブルのフィールドと同じ名前ですが。

それで、プロパテイのコントロールソースに
=myReplace(nz([TxBx2],""))を入れたらエラーになりませんでした。
でも、フォーム表示したら、内容のテキストボックスは#エラーと出て、ここは編集出来ないです。

アクセスって思うようにいかないので、非常に難しいと思い知らされています。よろしくお願いします。

お礼日時:2006/10/17 11:22

こんにちは。

Wendy02です。

>それから、myReplace関数で、End Ifが1つ足りないのでエラーとなります。End Ifを追加して下さいね。

本当ですね。どうしてミスったのか、自分でも訳が分かりません。

>Private Sub Form_Current()のところで、
>Me.内容.Value = myReplace(Nz(Me.内容.Value, ""))と
>入れてみたらうまくいきました!

質問者と回答者が、逆転してしまいましたが、そうですね、私も、そちらのほうがスッキリしているように思います。不完全なレスのために、お手数かけさせてしまい、大変にすみません。私は、年内、もう一度、最初からやり直しするつもりです。
    • good
    • 0
この回答へのお礼

いいえ、これはWendy02さんのお陰です。
貴重なヒントを頂けて、感謝しています。
どうもありがとうございます。

これからもお互いに頑張りましょう。よろしくお願いします。

お礼日時:2006/10/23 12:49

こんにちは。

Wendy02です。

>=myReplace(nz([TxBx2],""))を入れたらエラーになりませんでした。
>でも、フォーム表示したら、内容のテキストボックスは#エラーと出て、ここは編集出来ないです。

もちろん、TxBx2 は、私のつけたコントロールのTextBox の名前ですから、そのままでは、エラーは出ます。

そちらのフィールド名に合わせれば、
=myReplace(nz([内容],""))

ということかな?フィールドにきちんとあわせてくださいね。

こちらでは、しっかり改行はされています。エラーも出ていません。

この回答への補足

遅くなりました。
プロパティのコントロールソースではなく、
Private Sub Form_Current()のところで、
Me.内容.Value = myReplace(Nz(Me.内容.Value, ""))と
入れてみたらうまくいきました!
ありがとうございます。

それから、myReplace関数で、End Ifが1つ足りないのでエラーとなります。End Ifを追加して下さいね。

これに関して、何かコメントお願いします。その後、締め切ります。
よろしくお願いします。

補足日時:2006/10/20 14:53
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/10/17 12:49

Accessのバージョンは何でしょう?


2000にはReplace等の新規組み込み関数が
クエリなどで使えないというバグがあります

使えよるようにするには
ユーザ関数内でこれらの関数を使い結果を返すようにします

Public Function myReplace(expression, find, replace, start, count, compare) As String
myReplace = Replace(expression, find, replace, start, count, compare)
End Function

この回答への補足

やはり、コントロールソースにReplaceとかmyRepreceを使うのは非常に困難なので、あきらめることにします。

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

補足日時:2006/10/16 17:23
    • good
    • 0
この回答へのお礼

CHRONOS_0さん
早速の回答ありがとうございます。
バージョンは2003です。そうですか。バグなんですか。
それで、ユーザ関数に組み込んで見ました。

しかし、エラーでうまくいきません。もう一度見直してみます。
申し訳ありません。

お礼日時:2006/10/16 17:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています