Access 2016 Subform VBA Использование двойной константы в качестве объекта? - PullRequest
0 голосов
/ 05 октября 2018

Итак, у меня есть функция VBA подчиненной формы, которая выглядит следующим образом:

Function GetVariable() As Double

    '  <control>   = DLookup("<table var>","<table>", "<other table var>  = <control>" 
    [someFunction] = DLookup("[Var]", "[tblExample]", "[tblExampleVar] = [subFormControl]")

    ' (return)  = (   <control>    - <otherControl>) / 12345.12
    GetVariable = ([finalPosition] - [someFunction]) / 12345.12

End Function

И когда я открываю родительскую форму (форма, которая содержит эту подчиненную форму), я получаю сообщение об ошибке «Ошибка времени выполнения»'2447' Недопустимо использование оператора. (Точка) или! Или недействительные скобки. "

Из этого я заключаю, что Access интерпретирует 12345.12 как объект, и я не понимаю, почему.Когда я запускаю эту подчиненную форму самостоятельно, она работает, но когда она является подчиненной, это не так.Кто-нибудь имел дело с этим раньше?

Дополнительная информация: У меня есть две подчиненные формы в этой родительской форме, которые используют один и тот же расчет, оба повторяются в их VBA для конкретной формы, и я не думаю, чточто они будут конфликтовать друг с другом, потому что они не разделяют сферу.Таким образом, я пришел к выводу, что Access пытается использовать 12345.12 как (объект) .member.

Спасибо за чтение.

Ответы [ 2 ]

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

Попытайтесь позаботиться о Нулевых значениях и быть более конкретными.

Кроме того, десятичное значение должно быть объединено в виде строки с десятичным разделителем точек:

Function GetVariable() As Double

    If Not IsNull(Me![subFormControl].Value) Then
        Me![someFunction].Value = DLookup("[Var]", "[tblExample]", "[tblExampleVar] = " & Str(Me![subFormControl].Value) & "")

        If Not IsNull(Me![finalPosition].Value - Me![someFunction].Value) Then
            GetVariable = (Me![finalPosition].Value - Me![someFunction].Value) / 12345.12#
        End If
    End If

End Function
0 голосов
/ 05 октября 2018

Ссылки, которые работают, когда форма открывается независимо, не обязательно будут работать, если эта же форма используется в качестве подчиненной.Это требует ссылки для включения имени контейнера подчиненной формы.

Я не вижу, как запуск автономной формы мог вернуть правильные данные.Я предполагаю, что [subFormControl] - это поле или элемент управления в форме.Это переменный ввод.Переменная должна быть объединена в выражении условия DLookup () WHERE.

Кажется, эти поля возвращают имена элементов управления или таблицы.У этих имен есть пробелы или знаки препинания / специальные символы (кроме подчеркивания).На самом деле не следует использовать в именах и использовать зарезервированные слова в качестве имен.Если вы это сделаете, нужно разделить с помощью [].

Если вы ссылаетесь на поля / элементы управления в форме для создания DLookup (), то все входные данные являются переменными и должны быть объединены.

[someFunction] = DLookup("[" & [Var] & "]", "[" & [Table] & "]", "[" & [Condition] & "] = '" & [subformControl] & "'")

Необходимость разделителей (и какие) в зависимости от типа поля, которое будет возвращено входным условием в критериях фильтра.

...