2

非常に奇妙な問題があります。フォーム フィールドがフォーカスされたときに呼び出される関数があります。この関数には 4 つの引数が渡されます。そのうちの 3 つはフォーム フィールドからの値で、4 つ目はフォームのロード時に設定されるグローバル変数です。関数はこれらの変数を使用して、関数を呼び出したフィールドの値を計算します。この関数は、2 つの異なる場所で呼び出されます。すべてが正常に機能していましたが、ある場所から呼び出されたときに関数が突然機能し、別の場所からは機能しなくなり、2467 実行時エラー「入力した式は、閉じられているか存在しないオブジェクトを参照しています」が生成されます'。渡される引数の値が正しいこと、関数が正常に存在することを確認したので、このエラーが発生する理由がわかりません。誰でもアイデアはありますか?

Private Sub cboFinalStage_GotFocus()
  'lookup stage based on TNM values
  cboFinalStage = FindStage(cboFinalStageT, cboFinalStageN, cboFinalStageM, gblCancer)
End Sub


Public Function FindStage(cboT As ComboBox, cboN As ComboBox, cboM As ComboBox,  
  strCancer As String) As String
  'use the TNM values entered to find the correct stage for the site and return it
  'error handling
  If gcfHandleErrors Then On Error GoTo PROC_ERR

  'declare variables
  Dim strTemp As String
  Dim strTable As String
  Dim db As DAO.Database
  Dim rs As DAO.Recordset
  Dim strQuery As String
  Dim strSite As String
  Dim strSiteFull As String
  Dim strT As String
  Dim strN As String
  Dim strM As String

  'initialise variables - if there are no values entered in the 3 comboboxes, exit 
  'load tumour first in case it isn't already loaded
  Forms!frmContainer.subTumour.SourceObject = "fsubTumour"
  If Not IsNull(Forms!frmContainer.subTumour.Form!txtICD10) Then
    strSite = Left(Forms!frmContainer.subTumour.Form!txtICD10, 3)
    strSiteFull = Forms!frmContainer.subTumour.Form!txtICD10
  End If
  If Not IsNull(cboT.Value) Then
    strT = cboT.Value
    Debug.Print "T is " & strT
  End If
  If Not IsNull(cboN.Value) Then
    strN = cboN.Value
    Debug.Print "N is " & strN
  End If
  If Not IsNull(cboM.Value) Then
    strM = cboM.Value
    Debug.Print "M is " & strM
  End If
  If (IsNull(strT) Or IsNull(strN) Or IsNull(strM)) Then
    Debug.Print "null so exiting"
    Exit Function
  End If

  'identify the correct AJCC lookup table by cancer site
  Select Case [strCancer]
    Case "bla"
        strTable = "lkp_AJCC_bladder"
    Case "bre"
        strTable = "lkp_AJCC_breast"
    ...
  End Select
  Debug.Print "AJCC table is " & strTable

  'query the AJCC lookup table for the stage
  strQuery = "SELECT c_stage FROM " & strTable & " WHERE (((t_value)='" & strT & "')
   AND ((n_value)='" & strN & "') AND ((m_value)='" & strM & "'))"
  Debug.Print "query is " & strQuery
  Set db = CurrentDb
  Set rs = db.OpenRecordset(strQuery)
  If Not rs.EOF Then
    strTemp = rs.Fields(0).Value
    Debug.Print "result is " & strTemp
  End If
  rs.Close
  db.Close

  'return stage
  FindStage = strTemp

'error handling
PROC_EXIT:
  Exit Function
PROC_ERR:
  If (Err.Number = 2467) Then
    MsgBox "Unable to evaluate the stage", vbOKOnly, "Processing error"
    Resume PROC_EXIT
  Else
    MsgBox "Error: (" & Err.Number & ") " & Err.Description, vbCritical
    Resume PROC_EXIT
  End If
End Function
4

0 に答える 0