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にかえってきません。
どなたか教えていただけないでしょうか。
また、ほかにも書き方におかしな点は多々あると思います。
その点も教えていただければ助かります。
No.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)
といった具合に使います
すごくよくわかりました!!
1人で色々見ながらやっているのですが、なかなかうまくいかず、
callの説明をされているサイトを見たりもしたのですが、自分ののぞんでいるものに置き換えることがなかなかできなくて困っていました。
functionの書き方もこのようにするのですね!
勉強になります、是非functionも使ってみます!
本当にありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 exitの使い方
-
フォームを開くときに、コンボ...
-
Excel-vba 文字列と変数を...
-
VBAで配列のNULL判定
-
数字の位ごとの値を表示するプ...
-
1つ前の値を変数に保存する方法
-
c++ 二体問題のソースコードを...
-
vbaで極大値を抽出する方法
-
VB6.0-整数と余りを求める
-
Excel VBA でデータ転記について
-
DWORDって
-
ラジオボタンの値の取得につい...
-
10進数をアスキーコードに変換
-
エラーの意味は? Lvalue req...
-
Variant型で宣言してるのにEmpt...
-
VBAでダブルコーテーション入り...
-
Accessで文字列のバイト数読み込み
-
VisualStudio2022でC言語プログ...
-
EXCEL/VBA 変数の値をクリップ...
-
初心者プログラミング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フォームを開くときに、コンボ...
-
足して100になるような乱数のア...
-
Excel-vba 文字列と変数を...
-
C言語 exitの使い方
-
VB6.0-整数と余りを求める
-
VBAで配列のNULL判定
-
数字の位ごとの値を表示するプ...
-
VBAの定数の使い方で、計算値を...
-
フリーランタイマーの時間差分...
-
C#で動的にコントロールを取得...
-
10進数をアスキーコードに変換
-
コンボボックスの名前を変数に...
-
1つ前の値を変数に保存する方法
-
ラジオボタンの値の取得につい...
-
スピンボタンで小数点
-
相関係数p値の出し方
-
C言語でCLAMP(a,b,c)
-
DataGridView 複数行同時変更...
-
VBAのチェックボックス結果を集...
-
データ構造のmapとは?
おすすめ情報