2

私はまだ MS Access をいじっていて、頭がおかしくなっています。現在の問題は次のとおりです。レコード ナビゲーション バーをサブフォームとして再作成し、それをメインフォームに追加しました。このコードはサブフォームで使用されます

...
Private WithEvents frmParent As Access.Form
...

Private Sub Form_Load()
   ...
   Set frmParent = Me.Parent
   frmParent.OnCurrent = "[Event Procedure]"
   frmParent.Recordset.MoveLast
   frmParent.Recordset.MoveFirst
   ...
End Sub

Private Sub frmParent_Current()
   If frmParent.CurrentRecord = frmParent.Recordset.Count Then
       Me.butNext.Enabled = False
   Else
       Me.butNext.Enabled = True
   End If
   If frmParent.CurrentRecord = 1 Then
       Me.butPrevious.Enabled = False
   Else
       Me.butPrevious.Enabled = True
   End If
End Sub
...
Other MainForm Events...

このことから、いくつかの問題が生じます。最初: MainForm からのイベントは発生しません。2番目:時々(特にエラーの後)vbaがメインフォームへの参照を失います。CopyMemory で Win32 API の回避策を使用できますが、これはやり過ぎのようです。

いつものように、助けてくれてありがとう。

どうもありがとう

ジョン

4

1 に答える 1

1

実際には、これは Access のバグのようです...問題の親フォームが空のままで、すべてが正常に機能する場合でも、コード ファイルを作成するだけです。

編集:私は自分自身を修正する必要があります。これは意図された動作です。Litwin et.al. から引用: Access 2002 Desktop Developer's handbook, p. 508

... WithEvents 変数を使用してフォームのイベントに反応する場合、フォームには関連付けられたモジュールが必要です。つまり、HasModule プロパティが False の場合、Access はフォームのイベントを発生させないので、フォームのイベントに反応することを期待しているフォームの外部のコードは Access によって呼び出されません。

于 2013-11-29T19:04:05.613 に答える