アプリ版:「スタンプのみでお礼する」機能のリリースについて

ACCESSVBAでの質問です。こちらへの質問で大丈夫でしたでしょうか。。

初心者で、本やサイトを見よう見まねで書いており、
おかしな記述をしている可能性がありますが、すみませんお許しください。

Private Sub 金額_AfterUpdate()
Set objdb = Application.CurrentProject.Connection
strSQL = "SELECT [残高] FROM 入出金テーブル where [ID] = " & Me![ID] - 1
Set objrs = objdb.Execute(strSQL)

If objrs.EOF = False Then
Call aaa(Me.[入出金区分].Value, Me.[残高].Value, objrs("残高").Value, Me.[金額].Value)
Else
MsgBox "ありません", vbOKOnly + vbExclamation, "該当なし"
Cancel = True
End If
End Sub

Sub aaa(wInOut As Integer, wZandaka As Currency, wRSZandaka As Currency, wKingaku As Currency)
Select Case wInOut
Case 1, 4, 7
wZandaka = wRSZandaka + wKingaku
Case 2, 3, 5, 6
wZandaka = wRSZandaka - wKingaku
Case Else
Exit Sub
End Select
End Sub

金額が変更されたら残高を更新したいというもので、
上記のほかにも残高再計算などでaaa subを使いたいと思っています。
(call文の練習をかねてやってみたいと思っています)
そこで上記のように記載したのですが、wZandakaの値がMe.[残高].Valueにかえってきません。

どなたか教えていただけないでしょうか。
また、ほかにも書き方におかしな点は多々あると思います。
その点も教えていただければ助かります。

A 回答 (1件)

VB/VBAのサブプロシージャの引数は基本的には ByValの値渡しになります



呼び出し元に値を返したい場合は ByRefの参照渡しにしないとできません
また、1つの値だけ返すのであれば Function(関数)として定義する方法もありますよ

Sub aaa(wInOut As Integer, ByRef wZandaka As Currency, wRSZandaka As Currency, wKingaku As Currency)
  Select Case wInOut
    Case 1, 4, 7
      wZandaka = wRSZandaka + wKingaku
    Case 2, 3, 5, 6
      wZandaka = wRSZandaka - wKingaku
    Case Else
      Exit Sub
  End Select
End Sub
といった具合にします

関数定義なら

Function aaa(wInOut As Integer, wRSZandaka As Currency, wKingaku As Currency) as Currency
  dim wZandaka as Currency
  Select Case wInOut
    Case 1, 4, 7
      wZandaka = wRSZandaka + wKingaku
    Case 2, 3, 5, 6
      wZandaka = wRSZandaka - wKingaku
    Case Else
      Exit Sub
  End Select
  aaa = wZandaka
End Sub
として
呼び出し側は
Me.[残高].Value = aaa(Me.[入出金区分].Value, objrs("残高").Value, Me.[金額].Value)
といった具合に使います
    • good
    • 0
この回答へのお礼

すごくよくわかりました!!
1人で色々見ながらやっているのですが、なかなかうまくいかず、
callの説明をされているサイトを見たりもしたのですが、自分ののぞんでいるものに置き換えることがなかなかできなくて困っていました。
functionの書き方もこのようにするのですね!
勉強になります、是非functionも使ってみます!
本当にありがとうございました!

お礼日時:2008/09/10 16:18

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