Доступ к VBA: введите выражение в форме пользователя, сохраните вычисленный результат в таблице? - PullRequest
1 голос
/ 30 сентября 2011

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

Например:

  1. Пользователь вводит "1 + 5" в текстовое поле.
  2. Ответ 6 хранится в таблице базы данных.

В настоящее время ввод «1 + 5» в поле числовой формы приводит к ошибке «ввод текста в числовое поле». Есть ли способ сделать это?

1 Ответ

3 голосов
/ 30 сентября 2011

Вы можете написать скрипт VBA для анализа входных данных и выполнения любых необходимых вычислений. Это может быть вызвано событием BeforeUpdate поля несвязанной формы.

Шаги:

  1. Создайте поле с именем Field1 для вычисленного значения (привязанного к соответствующему полю базы данных).
  2. Добавьте несвязанное поле к форме и назовите его Input1.
  3. В представлении «Дизайн» щелкните правой кнопкой мыши Input1 и выберите «Свойства». В разделе «События» -> «Перед обновлением» нажмите кнопку «...».
  4. Вставьте написанный мной код VBA (ниже).
  5. Сохраните изменения и закройте редактор VBA.
  6. Вернитесь в представление формы и введите выражение в поле Input1. Когда вы выходите из поля, выражение будет оценено, и значение появится в Field1.

Обратите внимание, что по соображениям безопасности и / или целостности данных вам может потребоваться санировать вводимые пользователем данные, прежде чем оценивать их как выражение. Детали «как» и «почему» выходят за рамки исходного вопроса.

Private Sub Input1_BeforeUpdate(Cancel As Integer)
  ' TO-DO: Validate/sanitize input as necessary for security & validity;
  '        Exit Sub prior to the Eval() if we see something we don't like
  Dim result As Variant
  result = Eval(Input1.Value)                ' Evaluate the contents of Input1
  If IsNumeric(result) Then Field1 = result  ' Save any numeric result to Field1
End Sub
...