電子書籍の厳選無料作品が豊富!

いつもありがとうございます。現在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

A 回答 (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

というのはいかがでしょうか?
    • good
    • 0

#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

んー、わかりづらいかな・・・・?
    • good
    • 0
この回答へのお礼

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
にしました。問題なく動くことが出来ました。
もっとよりスマートな方法があればご教授ください。ありがとうございました。

お礼日時:2005/12/14 13:30

はじめまして。


私なら下記のように、ファンクション内ではフォーム上のオブジェクトに直接操作をしません。なぜなら、ファンクション内でフォームに固有のオブジェクトにアクセスすると汎用性が無くなるからです。従って、ファンクションの引数に、評価するべき文字列をセットして戻り値にその評価の結果を収めるのが賢明かと思います。
ちなみに、文字列の評価は動的メモリを使い、カンマあるいはシングルクオーテーションによってその文字列を分割できたならば、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
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/12/14 11:32

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