1

frmSearchEmployeeWorksheetsからクエリを実行するfrmStatsCorr(qryStatsCorr)にデータを送信しています。frmStatsCorrで、クエリがレコードを返すことを確認しています。そうでない場合は、ユーザーにメッセージを送信して検索フォームに戻ります。私の問題は、 Stackoverflowでここで学んだDoCmd.OpenForm( "frmStatsCorr")によって引き起こされた2501を「無視」する問題が発生していることです...

私が大きなAccessVBAフラストレーションを引き起こしているのは何が間違っているのですか?

これは、検索フォーム(frmSearchEmployeeWorksheets)のサブです。

Private Sub btnSearch_Click()
    ' I only change focus to force the updated data to submit to query
    Me.[txtEmployee].SetFocus
    Me.txtShift.SetFocus

If txtUnit = "7" Then
    'First close the form in order to update
    DoCmd.Close acForm, "frmStatsCorr"
    ' Open Stats form
    On Error GoTo myErr
    **DoCmd.OpenForm ("frmStatsCorr") 'causes error** 
End If

myExit:
    Exit Sub

myErr:
    Echo True
    If Err.Number = 2501 Then GoTo myExit
        MsgBox Err.Description
    GoTo myExit

End Sub

frmStatsCorrでは、クエリがレコードを返すことを確認するだけです。そうでない場合は、ユーザーに通知し、フォームを閉じて、frmSearchEmployeeWorksheetsに戻ります。

Private Sub Form_Load()
    If strFormStatus = "view" Then

    If DCount("*", "qryStatsCorr") = 0 Then
        MsgBox "Your search does not produce any results. Try a different search.", vbOKOnly
        DoCmd.Close
        DoCmd.OpenForm ("frmSearchEmployeeWorksheets")
        Exit Sub
    End If
    txtDay = WeekdayName(Weekday(Me.WorkDate)) 'This line returns an error so I check for an empty query and return to the search form.
    Me.[WorkDate].SetFocus
    Me.txtUnit.Enabled = False...
4

1 に答える 1

1

あなたのコードやその背後にあるロジックをどれだけ理解しているかわかりません。DCountからの結果を確認する必要がありbtnSearch_Click、 を閉じてから再度開いたり、データが含まれていないときにそれ自体frmStatsCorrを閉じたりする必要はありません。データが含まれてfrmStatsCorrいない場合は開かないでください。frmStatsCorr

frmSearchEmployeeWorksheetsプロシージャを保持する現在のフォーム ( )btnSearch_Clickに保存されていないデータ変更が含まれている場合は、次のコマンドを使用してそれらを保存できます。Me.Dirty = False

Private Sub btnSearch_Click()
    Dim strPrompt As String

    If Me.Dirty Then ' unsaved data changes
        Me.Dirty = False ' save them
    End If

    If Me.txtUnit = "7" Then
        If DCount("*", "qryStatsCorr") = 0 Then
            strPrompt = "Your search does not produce any results. " & _
                "Try a different search."
            MsgBox strPrompt, vbOKOnly
        Else
            ' if frmStatsCorr is open, just Requery
            ' else open frmStatsCorr
            If CurrentProject.AllForms("frmStatsCorr").IsLoaded Then
                Forms("frmStatsCorr").Requery
            Else
                DoCmd.OpenForm "frmStatsCorr"
            End If
            ' uncomment next line to close current form
            'DoCmd.Close acForm, Me.Name
        End If
    End If
End Sub

が開いていて、それがデザイン ビューにあるかどうかを確認する必要がある場合は、そのプロパティfrmStatsCorrを調べます。CurrentView

Forms("frmStatsCorr").CurrentView ' Design View = 0

が閉じたときに 2501 エラーが発生するfrmStatsCorrのではないかと疑ったため、このアプローチを提案しました。Form_Loadしかし、それがエラーの原因であるとは確信が持てず、テストをセットアップするほどの意欲もありません。

私が提案したアプローチでまだ 2501 エラーが発生する場合は、他に 2 つの原因が考えられます。

  1. 腐敗
  2. 壊れた参照
于 2013-03-05T21:43:58.303 に答える