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

У меня есть текстовое поле под названием [Возраст], и когда я нажимаю кнопку [AgeRoll], мне нужно ввести случайно выбранный возраст в [Age] (ps: это база данных rpg)

Для нескольких гонок это другая формула.

Мне удалось вывести правильную формулу, единственная проблема в том, что она читается как текст, а не вычисляется как число.

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

Это код, который я использую, когда вы нажимаете кнопку:

Dim AgeMemory As Variant
Dim Raceid As Variant
Raceid = [Race ID].Value
AgeMemory= DLookup("AgeRol", "Race table", "[Id] =" & Raceid)
Age.Value = AgeMemory 'changes the value of Age into that of AgeMemory 
Age.SetFocus

Agerol — это поле в таблице «Таблица рас», которое представляет собой текст. Возраст — это текстовое поле в виде целого числа (числа).

Это дает ошибку, что AgeMemory является неправильным типом данных (вместо этого это не число, а текст)

Когда я просматриваю окно отладки, значение AgeMemory — это формула, которую я хочу использовать, но в виде текста, а не числа, которое является результатом формулы, которую она показывает сейчас.

Одна из формул, которые он возвращает мне:

(16+((rnd*20)+1))

Очень короткая версия, мне нужно число вместо формулы, которую я получаю сейчас.


person Mithrandir    schedule 13.09.2015    source источник


Ответы (1)


В VBA есть функция Eval, которая оценивает формулы, представленные в виде строки.

Debug.Print Eval("(16+((rnd*20)+1))") '==> 31.1109502315521 
Debug.Print Eval("(16+((rnd*20)+1))") '==> 27.6684803962708
Debug.Print Eval("(16+((rnd*20)+1))") '==> 22.7912492752075 

Dim Formula As String
Dim Raceid As Long

Raceid = [Race ID].Value
Formula = DLookup("AgeRol", "Race table", "[Id] =" & Raceid)
Age.Value = Eval(Formula)
Age.SetFocus
person Olivier Jacot-Descombes    schedule 13.09.2015
comment
Спасибо. функция Eval() прекрасно справилась со своей задачей. Я изменил Age.Value = AgeMemory на Age.Value = Eval(AgeMemory) и работает как шарм. - person Mithrandir; 13.09.2015
comment
Почему не Cng или CInt? Dlookup всегда возвращает null или текст. - person Fionnuala; 23.11.2016
comment
Потому что ОП сохранил формулу в таблице. - person Olivier Jacot-Descombes; 23.11.2016