![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
いつもありがとうございます。現在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
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
というのはいかがでしょうか?
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
んー、わかりづらいかな・・・・?
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
早速の回答ありがとうございます。
初心者ですので、Ubound関数の意味を理解するのに時間がかかりました。こんなにみじかくできるなんて・・・・
呼び出し側ではどのような記述にすればよろしいのでしょうか?引数を理解するにあたりポイントなどあればご教授ください宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP 文字列を段落で分ける方法を教えて下さい。 2 2023/03/09 10:03
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
重複確認
-
{ CONTROL Forms.Label.1}が...
-
マクロの記録を使用したマクロ...
-
エクセルのVBAコードについて教...
-
VBAでCOPYを繰り返すと、処理が...
-
vbaにてseleniumを使用したedge...
-
エクセルのマクロについて教え...
-
VBAなくなるの?
-
VBの色を変えるにはどうしたら...
-
VBA一覧取得 再投稿
-
IEを使わないでhtmlテキストを...
-
【VBA】カーソルのある行の1行...
-
Excel 範囲指定スクショについ...
-
vba アクティブシートの名前変...
-
Vba SelStart、SelLen教えてく...
-
for 文の 繰り返し処理に使える...
-
ユーザーフォームに別シートか...
-
久しぶりのプログラミング
-
ExcelのVBAコードについて教え...
-
Excel VBA ダブルクリックで入...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチ処理 特定の文字以降を...
-
VBA テキストボックスを選択状...
-
Access VBA エラー2448について
-
[コンパイルエラー 修飾子が不...
-
verilog HDLについての質問です...
-
SQLでテキストボックスの文字を...
-
型の値をDataGridViewセルに変換...
-
teratermで、ファイル名をinput...
-
フォームのResizeイベントについて
-
MS-DOSバッチファイルコマンド...
-
複数の数字が書かれた文字列をs...
-
分数の計算のプログラミングです。
-
エクセルVBAで公用宣言した...
-
ruby テキストファイル書き出し...
-
バッチファイル フォルダ名をフ...
-
プログラミングによるオセロゲ...
-
バッチ for /f 空白、スペース...
-
Fileの読み込み処理について
-
言語[RUBY]を用いて、特定列を...
-
超初心者です。シングルクォー...
おすすめ情報