Microsoft Access Club >SampleFile Q & A >インデックス >このページ >次頁 < 前項  サイト内検索


Q&A-014 設定文字数以上の文字を削除または非表示にして保存する一例



タイトル : 文字数を制限したいのですが・・・
記事No : 11142
投稿日 : 2003/05/01(Thu) 15:09
投稿者 : hana

OS:win2000
Access Version:2000
いつも聞いてばかりですみませんが、誰か教えてください。

コメント欄に入力しながら文字数をチェックし、オーバーした場合はエラーを表示し、オーバー分をカットして表示するようにしたいのですが、オーバー分をカットすることが上手くできません。
コメント欄をcomment、コメント欄の文字数を表示しているのがtxt_Mojisuです。(formの種類毎に文字数の制限は異なります。)


Private Sub comment_KeyUp(KeyCode As Integer, Shift As Integer)

  Dim Mojisu As Integer

  Me!txt_Mojisu = Len(StrConv(Me.label_comment.Text, vbFromUnicode))

  comment = Me!label_comment
  Mojisu = Me!txt_Mojisu
  
  Select Case form
    Case 1, 3
      If Mojisu > 108 Then
        MsgBox ("文字数をオーバーしています。最大108文字までです。")
      End If
    Case 2
      If Mojisu > 65 Then
        MsgBox ("文字数をオーバーしています。最大65文字までです。")
      End If
  End Select

End Sub


文字数を制御する機能は、テーブルフィールドにある「フィールドサイズ」プロパティに行うのが一般的ですが、投稿記事のようにフォーム上のテキストボックス毎に何らかの制御を行わざるを得ないこともありますね。

今回のポイントは、

  • テキストボックスの更新前処理イベントと更新後処理イベントの利用
  • Len関数で文字数を事前に把握

です。

サンプルファイルとしては、

  1. テキストボックスに入力された文字数が**文字以上の場合、オーバー分を削除してテーブルデータとして保存する。
  2. フォーム上のテキストボックスに表示する際に、**文字以上の文字をカットする。

以上のことを行っています。

 

テーブルデータは下記のようになっています。

 

ID コメント 備考
1 おはようございます。(10文字超削除) おはようございます。Miss Yuki
2 今回、サンプルファイ(10文字超削除) 今回、サンプルファイを作成しました。一度、ご覧ください。
3 更新後処理イベントの(10文字超削除) 更新後処理イベントにプロシージャを記述しています。
4 テーブルフィールドの(10文字超削除) テーブルフィールドのフィールドサイズプロパティをもって、文字制限を行うことができます。
5 このテキストボックス(10文字超削除) このテキストボックスは、ある特定の文字数(Len関数)を超える場合、削除または非表示にするプロシージャを備えています。

 

下記フォーム図をご覧ください。

 

 

■「コメント」欄に入力された文字は、10文字(任意の数を設定可能)以上であれば下記のようなメッセージを表示させて、オーバー分を削除し保存します。

 

 

これを実現するために、「txtコメント」の更新前処理イベントに下記のプロシージャを記述しています。

 

Private Sub txtコメント_BeforeUpdate(Cancel As Integer)

    Dim intCount As Integer
    Dim txtA As TextBox
    Dim strmsg As String
    Const Mojisu = 10 '一例として、10文字を設定。
    
    Set txtA = Me.txtコメント
    intCount = Len(txtA)
    strmsg = "制限文字数(" & Mojisu & "文字以内)を " & intCount - Mojisu & _
             " 文字数分オーバーしています。"
    strmsg = strmsg & vbNewLine & "オーバー分を削除し保存してよろしいか?"
    
    If intCount > Mojisu Then

        If msgbox(strmsg, vbOKCancel, "管理者") <> vbOK Then
            Cancel = True
        End If
        
    End If

End Sub

 

次に、更新後処理イベントに下記のプロシージャを記述します。

 

Private Sub txtコメント_AfterUpdate()

'サンプルでは、10文字数を超える入力があった場合、
'以降の文字を削除してテーブルフィールドに保存する。

    Dim intCount As Integer
    Dim txtA As TextBox
    
    Set txtA = Me.txtコメント
    intCount = Len(txtA)
    
    If intCount > 10 Then '一例として、10文字を設定。

        txtA = Left(txtA, 10) & "(10文字超削除)"
    
    End If

End Sub

 

 

■表示時に、制限文字数以上のデータがあれば、オーバー分を非表示にして表示させる。

これを実現するためには独自関数を作成しクエリを利用します。

 

独自関数----

Function Str非表示(Var対象 As Variant) As Variant

'サンプルでは、10文字数を超えるフィールドデータであった場合、
'以降の文字を非表示にしてデータ表示を行う。

    Dim varCount As Variant
    Const Mojisu = 10

    varCount = Len(Var対象)
    
    If varCount > Mojisu Then  '一例として、10文字を設定。

        Str非表示 = Left(Var対象, Mojisu) & "(10文字超非表示)"
    
    End If

End Function

 

この関数をフォームのレコードソースに設定しているクエリに下記のように配置します。

 

 

 

 

2003/05/10


Q&A-014 設定文字数以上の文字を削除または非表示にして保存する一例


 

-Microsoft Access Club-