• ベストアンサー

超初心者です。シングルクォーテーションとカンマが出ればmsgboxにエラーを表示するプログラム。

いつもありがとうございます。現在VB.NETでつまずいているところがございます。プログラム暦1ヶ月ですのでわからないことだらけです。 以下のソースを引数を使って短くしたいのですが、よくわかりません。引数についてわかりやすくご指導いただけるとありがたいです。宜しくお願い致します。 Me.errmojichk()はシングルクォーテーションもしくわカンマがあればメッセージボックスにエラーを表示させ、intchk=1を入れる関数です。 Private Function mojichk() As String Private mojik As String InStr(Me.txt_顧客名.Text, "'") Me.errmojichk() If Me.intChk = 1 Then Me.txt_顧客名.Focus() Exit Function End If mojik = mojik + InStr(Me.txt_住所1.Text, "'") Me.errmojichk() If Me.intChk = 1 Then Me.txt_住所1.Focus() Exit Function End If 'シングルクォテーションのチェック------------------ここまで 'カンマのチェック------------------ mojik = InStr(Me.txt_顧客名.Text, ",") Me.errmojichk() If Me.intChk = 1 Then Me.txt_顧客名.Focus() Exit Function End If mojik = mojik + InStr(Me.txt_住所1.Text, ",") Me.errmojichk() If Me.intChk = 1 Then Me.txt_住所1.Focus() Exit Function End If End Function

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

  • ベストアンサー
  • takkunnet
  • ベストアンサー率74% (32/43)
回答No.3

#1さんの関数を少し改良して Private Function mojichk(EvaluateString as String) As Long 'シングルコーテーションかカンマがあれば戻り値を1とする If InStr(EvaluateString,"'")>0 Or InStr(EvaluateString,",")>0 Then mojichk = 1 Else mojichk = 0 End If End Function というのはいかがでしょうか?

その他の回答 (2)

回答No.2

#1です。 呼びだし側では intchk = mojichk("あいうえお") または intchk = mojichk(Me.txt_顧客名.Text) として呼び出します。 関数というのは、基本的に何か情報を与えれば、なんらかの処理をしてその結果を返す、というものだと考えます。 数学でよくf(x)という関数を使いましたが、これはxに値を代入すれば、f(x)の値が導かれるということです。これとにたようなかんがえ方です。f(x)の関数がたとえばf(x)=x^2という式であった場合、VBでは下記のようになります。 public function f(x as long) as long f = x^2 end fucntion んー、わかりづらいかな・・・・?

54545
質問者

お礼

scheimpflugさん親切にありがとうございます。 初心者でも理解することが出来ました。 Private Function mojichk(ByVal EvaluateString As String) As Boolean Dim sText() As String sText = Split(EvaluateString, "'", ) If UBound(sText) > 0 Then mojichk = True MsgBox("err") Exit Function End If に改造して 呼び出し側は If mojichk(Me.txt_顧客名.Text) Then Me.txt_顧客名.Focus() Exit Function End If にしました。問題なく動くことが出来ました。 もっとよりスマートな方法があればご教授ください。ありがとうございました。

回答No.1

はじめまして。 私なら下記のように、ファンクション内ではフォーム上のオブジェクトに直接操作をしません。なぜなら、ファンクション内でフォームに固有のオブジェクトにアクセスすると汎用性が無くなるからです。従って、ファンクションの引数に、評価するべき文字列をセットして戻り値にその評価の結果を収めるのが賢明かと思います。 ちなみに、文字列の評価は動的メモリを使い、カンマあるいはシングルクオーテーションによってその文字列を分割できたならば、1を返し、それ以外は0を返す仕様になっています。 この関数を呼び出し、戻ってきた値を参考にしてフォームに関連する処理を記述するほうがスマートですね。 Private Function mojichk(EvaluateString as String) As Long  Dim sText() as String  sText = Split(EvaluateString , "'")  If Ubound(sText) > 0 Then   mojichk = 1   Exit Function  End If  'シングルクォテーションのチェック------------------ここまで  'カンマのチェック------------------  sText = Split(EvaluateString , ",")  If Ubound(sText) > 0 Then   mojichk = 1   Exit Function  End If End Function

54545
質問者

お礼

早速の回答ありがとうございます。 初心者ですので、Ubound関数の意味を理解するのに時間がかかりました。こんなにみじかくできるなんて・・・・ 呼び出し側ではどのような記述にすればよろしいのでしょうか?引数を理解するにあたりポイントなどあればご教授ください宜しくお願い致します。

関連するQ&A