GoToRecord работает отлично, но самый простой способ вернуть значение для этой записи - PullRequest
0 голосов
/ 26 февраля 2019

Частью проблемы является открытие таблицы для набора записей и необходимость фокусировки на подчиненную форму.Мне не удалось отсортировать таблицу через VBA.Цель состоит в том, чтобы найти значение MEDIAN таблицы, отсюда и сортировка.

Private Sub cboUser_AfterUpdate()
Dim sourceReset As String
Dim dbMedian As DAO.Database
Dim rsMedian As DAO.Recordset

sourceReset = sbf.SourceObject  '<--Is Table.TEMPtable btw.
Me.sbf.SourceObject = ""
Forms!frm.Requery
Forms!frm.Refresh


'Create new TEMPtable
    DoCmd.SetWarnings False
    DoCmd.OpenQuery "qryTEMPtable"   '<--Is sorted here as desired
    DoCmd.SetWarnings True

Set dbMedian = CurrentDb()
Set rsMedian = dbMedian.OpenRecordset("TEMPtable") '<--Gets unsorted here

sbf.SourceObject = sourceReset
Me.OrderBy = "NetWrkDays ASC" '<--Re-sorting, but on subform, which.. is 
fine if I can return the column value later.
Forms!frm.Refresh

Me.[sbf].SetFocus

Records= DCount("[ColA]", "TEMPtable")

'Even number of records
If Records - 2 * Int(Records / 2) = 0 Then
    MEDrcd = Records / 2
    DoCmd.GoToRecord , , acGoTo, MEDrcd '<-Can see value in debug, how to 
assign it to a useful variable???
    ''''Me.CurrentRecord ("NetWrkDays")
    ''''Me.RecordSource ("NetWrkDays")
    Me.txtMED = rsMedian("NetWrkDays")
End If

'Odd number of records
If Records - 2 * Int(Records / 2) = 1 Then
    MEDrcd1 = (Records - 1) / 2
    MEDrcd2 = (Records + 1) / 2
    DoCmd.GoToRecord acDataForm, "TempTable", acGoTo, MEDrcd1
    MED1 = rsMedian("NetWrkDays")
    DoCmd.GoToRecord acDataForm, "TempTable", acGoTo, MEDrcd2
    MED2 = rsMedian("NetWrkDays")
    Me.txtMED = (MED1 + MED2) / 2
End If

Полагаю, я не вижу смысла пытаться использовать DoCmd.GoToRecord, если вы не можете вернуть значение в этой точке.

  1. Каков наилучший / правильный метод для возврата значения после перехода к записи.

  2. Поскольку подчиненная форма и таблица совпадают,Я просто побежал с настройкой фокуса на подчиненную форму, поскольку я сказал, что проблема с сортировкой таблицы в vba.Хотя тогда использование rsMedian не имеет смысла, так как таблица rs никогда не перемещается ... но я не могу получить значение для перемещения через подчиненную форму с помощью GoToRecord.

  3. Я собираюсь кругами здесьи я надеюсь не искажать, чтобы понять.Спасибо.

1 Ответ

0 голосов
/ 26 февраля 2019

Нашел этот метод онлайн.Отлично работает, если кто-то еще окажется в подобной ситуации.

Private Sub cboUser_AfterUpdate()
Dim sourceReset As String, sqlMED As String, sTable As String, sField As String
Dim j As Integer, varVal As Single
Dim rs As DAO.Recordset

sourceReset = sbf.SourceObject
Me.sbf.SourceObject = ""
Forms!frmSTATS.Requery
Forms!frmSTATS.Refresh

   'Create new TEMPtable table
    DoCmd.SetWarnings False
    DoCmd.OpenQuery "qryTEMPtable"
    DoCmd.SetWarnings True

'Get MEDIAN Data/Value
sTable = "TEMPtable"
sField = "NetWrkDays"
sqlMED = "SELECT " & sField & " from " & sTable & " WHERE " & sField & ">0 Order by " & sField & ";"
Set rs = CurrentDb.OpenRecordset(sqlMED)
    rs.MoveLast
        j = rs.RecordCount
    rs.Move -Int(j / 2)

If j Mod 2 = 1 Then 'odd number of elements
   getMedian = rs(sField)
Else                'even number of elements
   varVal = rs(sField)
   rs.MoveNext
   varVal = varVal + rs(sField)
        getMedian = varVal / 2
End If
Me.txtAnswer = getMedian
rs.Close

sbf.SourceObject = sourceReset
Me.OrderBy = "NetWrkDays ASC"
Forms!frmSTATS.Refresh

End Sub

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...