Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1089 / 2272 ツリー ←次へ | 前へ→

【8823】フォーム上フィールドの引数化 ぼっこ 06/11/23(木) 22:14 質問[未読]
【8824】Re:フォーム上フィールドの引数化 Gin_II 06/11/24(金) 8:37 回答[未読]
【8826】Re:フォーム上フィールドの引数化 ぼっこ 06/11/24(金) 15:28 お礼[未読]

【8823】フォーム上フィールドの引数化
質問  ぼっこ  - 06/11/23(木) 22:14 -

引用なし
パスワード
   フォーム上に電話番号やFAX番号等、数字だけを取り扱う項目があり、
下記のような、チェックプロシージャ-を作りました。

チェックでエラーになれば、エラーメッセージを出力し
該当項目を赤字で表示するという単純なものです。
定型入力が使えればいいのですが、
入力形式が複数あり使えません。

項目ごとにこのコーディングをするのでなく、
項目自体を引数にして、プロシージャ-をコールしたいと思いますが、
オブジェクトの考えがまだ理解できてなくて、
どうやって、引数を渡してやればいいのかわかりません。
よろしくお願いします。 m(_ _)m


Private Sub MEP_Tel_LostFocus()
  
  If IsNull(Me!MEP_Tel) Then
  Else
    ret = fc_num(2, Me!MEP_Tel)
    If ret <> 0 Then
      MsgBox ("Not allow Letter! Number Only")
      DoCmd.Beep
      With Me!MEP_Tel
        .ForeColor = 255
      End With
    Else
      With Me!MEP_Tel
        .ForeColor = 0
      End With
    End If
  End If
End Sub

【8824】Re:フォーム上フィールドの引数化
回答  Gin_II  - 06/11/24(金) 8:37 -

引用なし
パスワード
   > 項目自体を引数にして、プロシージャ-をコールしたいと思いますが、
> オブジェクトの考えがまだ理解できてなくて、
> どうやって、引数を渡してやればいいのかわかりません。

>     ret = fc_num(2, Me!MEP_Tel)

この、fc_num 関数はどうなっているのでしょうか?
現状、途中まででも作っているのなら、引数の内容・実際のコード等、説明して
いただかないと分かりませんけど ^^;

【8826】Re:フォーム上フィールドの引数化
お礼  ぼっこ  - 06/11/24(金) 15:28 -

引用なし
パスワード
   Gin_IIさん

ごめんなさい。

fc_numの関数は出来上がっています。
簡単なニューメリックチェックですが、
いくつかパターンがあるので、パターンと文字列を引数で渡してます。
(下記、孫関数を参照下さい)

そもそも質問した件については、何とか出来ました。
オブジェクトとかコントロールをどうやってセットするのか
悩んでましたが、テキストボックスを渡してやることで落ち着きました。
(未だ、オブジェクトがわかってはいませんが...)

コーディングはもう少しシャープにするつもりですが、
取り急ぎ、お礼まで!

失礼しました。


<親>
Private Sub MEP_Fax_LostFocus()
  Dim chkfld As TextBox
  
  Set chkfld = Me!MEP_Fax    <=これがわかりませんでした!
  
  Call fc_nums(chkfld)
  
End Sub

<子>
Private Sub fc_nums(txt As TextBox)
  Dim wkTxt As String
  wkTxt = txt
  
  If IsNull(wkTxt) Then
  Else
    ret = fc_num(2, wkTxt)
    If ret <> 0 Then
      MsgBox ("Not allow Letter! Number Only")
      DoCmd.Beep
      With txt
        .ForeColor = 255
      End With
      DoCmd.GoToControl txt.name
    Else
      With txt
        .ForeColor = 0
      End With
    End If
  End If
End Sub

<孫>
Public Function fc_num(pat As Integer, chkData As String) As Integer

  Dim words(3)  As Variant
  Dim wk As String
  Dim ret  As Integer
  Dim i  As Integer
  Dim j  As Integer
  
  words(0) = "0123456789"
  words(1) = "0123456789 "
  words(2) = "0123456789 /"
  words(3) = "0123456789abcdefghijklmnopqrstuvwxyz"
  
  j = Len(chkData)
  fc_num = 0
  
 
  For i = 1 To j
    wk = Mid(chkData, i, 1)
    ret = InStr(1, words(pat), wk, vbTextCompare)
    If ret = 0 Then
      fc_num = 9
      Exit For
    End If
  
  Next i

End Function

1089 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078210
(SS)C-BOARD v3.8 is Free