Вызов функции зацикливания из VBA в запрос MS Access - PullRequest
0 голосов
/ 29 октября 2018

Я действительно новичок в VBA. У меня есть довольно сложная функция для Access VBA, которая просматривает таблицу, выполняет кучу вычислений и условных выражений и возвращает значение. Когда я запускаю функцию и использую «Debug.Print» для получения значений функции, она выплевывает именно то, что должна в «Немедленном окне». Однако, когда я пытаюсь вызвать функцию для запроса доступа к той же таблице, запрос возвращает только последнее значение в цикле.

Я построил гораздо более простую функцию зацикливания, чтобы попытаться выяснить, что я делал неправильно (см. Ниже), и происходит то же самое - исправьте значения в непосредственном окне, только последнее значение, возвращенное в выражении в запросе. Может кто-нибудь сказать мне, какую очевидную ошибку я совершаю? Если я могу исправить это здесь, я должен быть в состоянии исправить это в реальном проекте. Очень ценю любую помощь!

Function TestID()
    Dim d As Database
    Dim r As Recordset
    Dim id As Field
    Set d = CurrentDb()
    Set r = d.OpenRecordset (“tblAllocation”)
    r.MoveFirst
    r.MoveLast
    r.MoveFirst
    Do Until r.EOF
        Set id = r.Fields(“IDAllocation”)
        TestID = id
        Debug.Print TestID ‘This lists all the correct values in the Immediate Window'             
        r.MoveNext
        If r.EOF Then Exit Do
    Loop
    r.Close
    Set r = Nothing
End Function

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Чтобы вернуть другое значение для каждой входной строки, ваша функция должна использовать один или несколько параметров из входной таблицы / запроса.

* 1003 Е.Г. *

Function TestID(ID As Long, someField As Double) As Double
    ' do calculations on parameters here
    TestID = CalcResult
End Function

и передать значения столбца в качестве параметров в запросе, например

SELECT foo, bar, TestID([ID], [someField]) AS Calculation
FROM myTable
0 голосов
/ 30 октября 2018

Функция будет только когда-либо возвращать одно значение.

Вы печатаете значение, присвоенное символу TestID для каждой итерации цикла Do, но это значение просто перезаписывается на следующей итерации цикла, оно не будет возвращено функцией.

Если вы хотите, чтобы несколько значений были возвращены, рассмотрите возможность создания и возврата массива значений или добавления значений в другую таблицу - хотя это кажется довольно избыточным, учитывая, что вы получаете значения из существующей таблицы / запроса.

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