フィルタリング後にレコードがない場合、VBAを使用してDatagridviewのフィルタを無効にするにはどうすればよいですか?ここでAccess 2010 - エラー処理フィルタサブフォーム
私の最初の試み:最初のコードは、「作品」が、3061は最終的にではない、私はエラーを取得する第二のコードで
Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone
rs.Filter = Replace(Me.Filter, "[Tabelle1].", "")
Set rs = rs.OpenRecordset()
If rs.EOF Then
Cancel = True
End If
End Sub
:ここ
Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
If Me.RecordsetClone.RecordCount = 0 Then
MsgBox ("Kein Datensatz gefunden. Filter wird entfernt.")
Me.Form.FilterOn = False
Me.Form.Requery
End If
End Sub
は2回目の試行で私は必要としたい。
理由:
私は3つのフォームを持っています。 MAIN、Sub1およびSub2。
MAINには、Sub1、Sub2、および単一のTextBoxがあります。 TextBoxは "psoudoID"と呼ばれます。 Sub1は、さまざまなレコードセットの詳細を表示する通常のFormで、MAINの上部に配置されます。 Sub1の下はSub2です。 Sub2はDatagridviewです。ユーザーがSub2のレコードセットをクリックすると、Sub2からのIDはpsoudoIDに、そしてそこからSub1に移動します。分かるでしょう?
ここで、ユーザーはDatagridのすべての列をフィルタリングして、ここで必要なレコードセットを見つけ出し、上のすべての詳細を示すことができます。しかし、フィルタリング後にDataGridが空の場合、Sub2はpsoudoIDにIDを与えることができず、Sub1はMAINにもっと長く表示されません。その場所の画面は空です。グリッドの[フィルタ]ボタンをクリックすると、Sub1が画面上に再び表示されます。
MsgBoxの[OK]をクリックしてフィルタを無効にするか、グリッドビューの[フィルタ]ボタンをクリックせずにフィルタを無効にします。
私の賛否両論を理解できたら幸いです。そして私の悪い英語のために申し訳ありません:-)
THX。
ベジータ
最初の行でエラー3061が発生するのは、どの行ですか? 'Me.FilterOn'を' False'に設定したり、 'Cancel'を' True'に設定する代わりにフィルタを修正する理由はありますか? ( 'Cancel'は現在のフィルタアクションをキャンセルし、もしあれば前のフィルタに戻り、' Me.FilterOn = False'はフィルタをオフにします、 'Cancel'はあなたが望むものに対して適切です) –
最初のコードが動作します。しかし、私は正しい場所でそれを "発射"できません。エラー3061は2番目のコードにあります。交換時に。 –
'Set rs = rs.OpenRecordset()'を 'Dim rsf As Recordset_ Set rsf = rs.OpenRecordSet'に置き換えてみてください。それは役に立ちますか? –