2013-10-10 2 views
1

У меня есть событие щелчка на форме в Access 2010, которая выглядит так:Проблема прохождения формы в модуль в VBA

Private Sub SaveRecord_Click() 
    checkDataIntegrity(Me) 
End Sub 

Где checkDataIntegrity определяется следующим образом:

Function checkDataIntegrity(ByVal fForm As form) As Boolean 

Это прекрасно работает и денди. Тем не менее, у меня есть еще одно событие щелчка:

Private Sub LFS_Flashed_Successfully_Fail_Click() 
    preventSimultaneousPassAndFail (Me) 
End Sub 

Где preventSimultaneousPassAndFail определяется следующим образом:

Function preventSimultaneousPassAndFail(ByVal fForm As form) As Boolean 

Когда я вызываю этот щелчок событие, я получаю следующую ошибку:

Run-time error '13': 
Type mismatch 

Что я Я здесь делаю неправильно? Оба вызова вызова вызываются в одной и той же форме и выполняют функции вызова в том же модуле.

ответ

0

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

'preventSimultaneousPassAndFail (Me) 
preventSimultaneousPassAndFail Me 

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

Хотя мы не знаем никаких подробностей об этих функциях, предлагаю рассмотреть возможность передачи объектов формы ByRef вместо ByVal.

+1

спасибо. Это решило мою проблему. access-vba (или, может быть, все vba) вызывает разочарование в сообщениях об ошибках. – ttremblay

+0

'ByRef' или' ByVal' не имеет никакого отношения к данной ошибке. Передача параметров 'ByRef' необходима только в редких случаях, когда вызываемый метод должен иметь возможность изменять значение, переданное вызывающим. В случае ссылки на объект, который, скорее всего, не тот, кого кто-то захочет. В любом случае свойства объекта могут быть изменены. – paulroho

0

Причина, почему вы получите ошибку в том, что в случае

preventSimultaneousPassAndFail (Me) 

выражение скобки пытается вызвать элемент по умолчанию объекта. В случае Access.Form это свойство Name имеет тип String. В этом причина ошибки несоответствия типа.

В случае

preventSimultaneousPassAndFail Me 

ссылка на самой форме передается методу.

Смежные вопросы