マイクロソフト アクセス365でメインフォームに都道府県をチェックぼっくで並べ、サブフォームにも都道府県チェックボックスを47都道府県ごとに一覧表を並べ、メインフォームから入力できるフォームを作りたいと思っています。未熟者で思うようにいかず苦しんでおります。ステップ実行で流れを確認しているのですが、MyVariable1に進めないです。変数に値が入らないです。新規登録に進めません。ご指導いただければ幸いです。
モジュール
Option Compare Database
Option Explicit
'共通変数 標準モジュール
Public MyVariable1 As Variant
Public MyVariable2 As Variant
Public MyVariable3 As Variant
Public MyVariable4 As Variant
Public MyForms As Variant
Public MyFlag As Variant
Pulic Sub MyFunction()
'MyVariable=0 初期化
'MyVariable=1 新規登録の時の識別番号
'MyVariable=2 修正するときの識別番号
'MyVariable=3 削除するときの識別番号
'MyVariable=4 復元するときの識別番号
Dim a(3) As Variant
Select Case MyVariable1
Case1
a(1)="新規登録しますか?"
Case2
a(1)="修正しますか?"
Case3
a(1)="削除しますか?"
Case4
a(1)="復元しますか?"
End Select
'オペレータに処理内容をするかを問いかける
a(2)=Msgbox("" & a(1) & "", vbYesNo)
'”いいえ”を押したら処理を抜ける
if a(2)=vbNo Then
'パブリック半数に1を代入する
'Callプロシージャを抜けて元のプロシージャでキャンセルさせるため
MyVariable2 = 0
MyFlag = 0
MsgBox ("処理を中断しました。")
Exit Sub
End If
'インプット
a(2) = InputBox("パスワードを入力してください。パスワードは1234です。")
'キャンセルを押したら処理を抜ける
if a(2) ="" Then
MyVariable2 = 0
MyFlag = 1
Exit Sub
Else
MyVariable2 = "YES"
End If
End Sub
'メインフォーム
Option Compare Database
Option Base 1
'共通変数
Dim MyVriable1 As Variant
Dim MyVriable2 As Variant
Dim MyVriable3 As Variant
Private Sub ComboBoxInIT()
On Error Resume Next
Dim Ctlas As Control
Dim strSQL As Control
For Each strSQL In Me.Controls
With strSQL
If (.ControlType = acComboBox Or .ContorolType = acTextBox) And _
.Name <> Me.ActiveControl.Name Then
.Value = Null
End If
End With
Next strSQL
End Sub
Private Sub Call2()
Select Case MyVariable1
case1
'新規登録
MsgBox("新規入力を許可します。")
Me.Chk許可flg.Enabled = True
Me.Cmb担当者.Enabled = True
Me.Chk北海道.Enabled = True
Me.Chk秋田.Enabled = True
' ↓
Me.Chk鹿児島.Enabled = True
Me.Chk沖縄.Enabled = True
Me.Txt曜日.SetFocus
Exit Sub
'編集
Case2
End Select
End Select
End Sub
Private Sub Cmd新規登録_Click()
On Error GoTo Skip新規登録
MyForms = Forms!メインフォーム!サブフォーム!Chk許可flg
If Me.Chk許可flg = True Then
GoTo LstLine
End If
MyVariable1 = 1
Call MyFunction
If MyVariable2 = "YES" Then
Call Call2
Exit Sub
Else
Exit Sub
End If
'___________________________________________________________________
LastLine:
Dim aa As Variant
If Me.Cmb担当者.Value ="" Or IsNull(Me.Cmb担当者)
Then
MsgBox("担当者名が空白です。")
Me.Cmb担当者.SetFocus
Exit Sub
End If
'ADO接続開始
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim strSQL As String
Dim a As Variant
Set Cn = CurrentProject.Connection
Set Rs = New ADODB.Recordset
Rs.Open "MST都道府県",Cn, adOpenKeyset, adLockOptimistic
Dim b,c,d As Variant
if me.txt曜日.value = "" Or IsNull(Me.Cmb担当者)
Then
a = MsgBox("曜日か担当者の項目が未入力です。", vbYesNo)
If a = vbNo Then
Me.Txt曜日.SetFocus
Exit Sub
End If
End If
'登録
Rs.AddNew
Rs.Update
'ADO接続を切断
Cn.Close
Set Cn = Nothing
Rs.Open strSQL,Cn, adOpenKeyset, adLockOptimistic
FormsS("メインフォーム").Form("Subフォーム").Form.Requery
Me.サブフォーム.Form.Filter = strSQL
ME.サブフォーム.Form.fIlterOn = True
SKIP新規登録:
End Sub
職場で作っているソースコードを問題ない範囲でプリントアウトし、手作業で移しました。若干の不備等あるかもしれません。ご了承ください。
私がわからないことは なぜステップ実行で”新規実行”(変数に値 1 がはいらないのか?)ご指導ください。
提示のコードは実際のコードをコピーして貼り付けたものですか。
そのコードではステップ実行以前に、構文エラーで実行すらできないですが。
実際のコードを貼り付けてもらわないと回答のしようがありません。
なお、コードはMarkDown記法のコードブロック内にいれてください。
質問は、管理者権限で修正しておきました。
この掲示板の使い方の詳細は下記を参照してください。
Microsoft Access 掲示板 の使い方 Microsoft Access 掲示板 - zawazawa
会社の決まりでUSBでソースコードの持ち出しは禁止です。会社ではステップ実行まで他とりつき、コンパイルエラー 実行時エラーの類は出ませんが、変数に値が入りません。
私としてもソースコードを外部に持ち出したいのですが、厳禁なもので。。。;;
なにはともあれ早急なご対応ありがとうございます
お礼もせずに失礼な子だとは思われたくないので 一言感謝言葉を伝えたくメール書かせていただきました
ありがとうございました
コンパイルエラーの部分は無視して、
これについて共通変数についての理解をもう一度確認してください。
メインフォーム
標準モジュールとメインフォームで同じ名前の変数を宣言していますが、
これによって格納されている値を共有できると勘違いしてませんか。
名前が同じでもこの変数は全く別物ですので値を共有しているわけではありません。
メインフォームで MyVriable1 に1を代入しても、メインフォーム内の変数 MyVriable1 に代入されるだけで、標準モジュールの MyVariable1 には何の変化もありません。
メインフォームの方の変数を削除してください。
そうすれば、標準モジュールの変数は Public で宣言しているので、メインフォームの方から参照可能になり、MyVariable1 に代入できるようになります。
Public宣言してない変数は、そのモジュール内でしか参照できません。
「VBA 変数 スコープ」をキーワードにWEB検索して解説ページで学習してください。
共通変数はいつでも、どこでも、だれでも使用できるので便利ではありますが、その分、コードが読みづらくなりますし、バグの原因になりやすいので、できれば避けたいです。
共通変数以外で、別モジュール間でデータをやりとりする方法は、
引数でデータを渡す、戻り値で結果を受け取る、という方法があります。
こちらの方法も学習して理解されることをお勧めします。
この方法の簡単なサンプルを提示しておきます。
これで共通変数なしでデータのやり取りができます。
データがどのように移動しているか読みやすいし、知らない間に変数の中身が変更されというような不安もなくなります。
「VBA 引数 戻り値」などをキーワードにWEB検索して学習されることをお勧めします。
行き違いになり申し訳ございません。未熟な私が端折ったソースコードを提示し、ご指導を受けることは 先生方に失礼に当たると思い、きちんと現状でのすべてのソースコードを書いたうえで、ご指導を仰ぐつもりでおりました。
hatenaさんのご指導感謝いたします。勉強に励みます。
改めて ソースコードを掲載させていただきます。
あらためてきちんと全てのソースコードを書き直して再投稿させていただきます。今現在の状況です。ステップ実行で流れを確認しているのですが、MyVariable1に進めないです。変数に値が入らないです。新規登録に進めません。ご指導いただければ幸いです。最終的にはメインフォームに各地域を並べ、サブフォームにも一覧表にチェックボックスを並べ、一覧で閲覧および回数が把握できるようなものを作りたいと思っております。
ご指導 何卒宜しくお願い致します。
マイクロソフト アクセス365でメインフォームに都道府県をチェックぼっくで並べ、サブフォームにも都道府県チェックボックスを47都道府県ごとに一覧表を並べ、メインフォームから入力できるフォームを作りたいと思っています。未熟者で思うようにいかず苦しんでおります。
ごめんなさい
ソースコードが長すぎて掲載することができません
Functionコードのご指導ありがとうございます^^
これについては、前回の投稿でも回答してますが、
標準モジュールの変数と同名のフォームのモジュールの変数を削除すれば変数に値が入るようになります。
それで、ステップ実行で動作を確認するといいでしょう。
それがうまくできたら、Functionでデータを引き渡したり、結果を戻す方法にトライするといいでしょう。
できました^^ あっさりできました^^
ほんとうにありがとうございました
これからもご指導何卒宜しくお願いします^^