Функция формата vba выдает ошибку несоответствия типа

Я пытаюсь отформатировать число как валюту в Access VBA.

В ближайшем окне, когда я ввожу:

? Format(123, "Currency")

Я получаю ожидаемый ответ: "$123,00"

Однако в окне кода, когда я ввожу:

Debug.Print Format(123, "Currency")

Я получаю сообщение об ошибке, указывающее на эту строку: «Ошибка времени выполнения« 13 »: несоответствие типов»

Почему один и тот же простой код работает в непосредственном окне, но выдает ошибку при запуске из окна кода?


person LFurness    schedule 14.09.2010    source источник


Ответы (3)


Я не понимаю, почему ваш второй пример должен вызывать ошибку. Следующая подпрограмма компилируется и выполняется без ошибок в моей системе Access 2003:

Public Sub test_Format()
    Debug.Print Format(123, "Currency")
End Sub

Попробуйте эту подпрограмму в новой базе данных. Возможно, ваша текущая база данных повреждена.

См. Часто задаваемые вопросы о поврежденных MDB Microsoft Access Тони Тьюза.

person HansUp    schedule 14.09.2010
comment
Я попробовал это в новой базе данных, и это сработало. Как я могу точно сказать, повреждена ли моя база данных? Другой код выполняется правильно. - person LFurness; 14.09.2010
comment
Посетите ссылку, которую я добавил для получения подробной справочной информации. Первым делом я бы сделал резервную копию базы данных. Затем попробуйте сжать и восстановить ... если проблема исчезнет, ​​вы знаете, что она была повреждена. Если Compact & Repair не исправит вас, вы можете попробовать декомпилировать. Но я думаю, что могу просто импортировать все, что вы хотите сохранить из вашей старой базы данных, в новую новую базу данных. - person HansUp; 14.09.2010
comment
Также проверьте ссылки вашего проекта в редакторе VBE. Странные вещи случаются с отсутствующими/неработающими ссылками, хотя ваша проблема на самом деле не является симптомом, который я замечал раньше. Проверить не помешает. - person HansUp; 14.09.2010
comment
Странные вещи также могут произойти, если процедура или макрос названы зарезервированным словом. - person Fionnuala; 14.09.2010
comment
Я бы декомпилировал перед импортом в новую базу данных. При импорте вы теряете множество вещей, таких как история объектов, параметры запуска и любые пользовательские свойства. Первую из них невозможно восстановить, а две последние приходится воссоздавать с нуля. Если декомпиляция не работает, я все равно попробую объекты с помощью SaveAsText/LoadFromText, прежде чем создавать новую базу данных. - person David-W-Fenton; 15.09.2010
comment
Обновление по этому поводу: я попробовал сжать и восстановить, а также декомпилировать. Нет игральных костей. Собираюсь попробовать импортировать в новую базу данных, так как я не думаю, что элементы, упомянутые @David-W-Fenton, применимы к этой базе данных, и у меня в любом случае есть резервная копия. - person LFurness; 22.09.2010
comment
Просто проверка ... проверили ли вы ссылки на свой проект и убедитесь, что у вас нет конфликтов имен с именами процедур и макросов? - person HansUp; 22.09.2010
comment
Если вы выполняете декомпиляцию, а затем не перекомпилируете, вы не знаете, решили ли вы проблему или нет. - person David-W-Fenton; 24.09.2010

Что вы подразумеваете под кодовым окном?

Это работает:

Private Sub Form_Load()
       Debug.Print Format(123, "Currency")

End Sub
person JeffO    schedule 14.09.2010

В окне отладки вы просто НЕ используете Debug.
Print эквивалентно ?
Таким образом, Debug.Print Format(123, "Currency") в коде должно быть
Print Format(123, "Currency") в окне отладки или ? Format(123, "Currency")

person Patrick Honorez    schedule 22.05.2014