1

我将数据从 frmSearchEmployeeWorksheets 发送到运行查询 (qryStatsCorr) 的 frmStatsCorr。在 frmStatsCorr 我正在检查以确保查询返回记录,否则我将向用户发送消息并返回到搜索表单。我的问题是我在“忽略”由我在 Stackoverflow 上学到的DoCmd.OpenForm ("frmStatsCorr")引起的 2501 时遇到问题...

我做错了什么导致我对 Access VBA 感到沮丧?

这是搜索表单 (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

我建议采用这种方法,因为我怀疑frmStatsCorr'sForm_Load可能会在它自行关闭时触发 2501 错误。但我不确定这是错误的原因,而且我没有足够的动力来设置测试。

如果我建议的方法仍然出现 2501 错误,那么我遇到了另外两个可能的原因:

  1. 腐败
  2. 损坏的引用
于 2013-03-05T21:43:58.303 回答