2009-09-29 1 views
1

не может поверить, что я теряю столько времени на этом.Доступ: Отмена генерации отчетов вызывает ошибку 2501

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

В одном из этих отчетов есть несвязанное текстовое поле Мне нужно, чтобы пользователь вводил данные. Элемент управления этим полем присваивается свойству Name. При запуске отчета появляется окно ввода с кнопкой «ОК» и «Отмена». Всякий раз, когда я ввожу некоторые данные, все в порядке.

Но когда я нажимаю «Отмена», приложение выходит из строя, и я получаю сообщение об ошибке: «Ошибка выполнения 2501: действие OpenReport отменено» (перевод с немецкого).

Отчет вызывается через этот код:

DoCmd.OpenReport vBerichtName, nAnsicht 
End If 

On Error Resume Next 
    DoCmd.Close acForm, "F_BerichtDrucken" 
On Error GoTo 0 

1) Почему обработка ошибок не пинайте в?
2) Я googled и нашел много странных решений для этого, как официальный Microsoft, говорящий, что вам нужно установить/обновить драйвер принтера (давай ...). Ничего не помогло.

Я делаю это для друга, и я обычно работаю над linux/php, java и т. Д. Приносим извинения, если решение несколько очевидно или что-то в этом роде.

ответ

2

То же, что и ответ Филиппа. вы не дали нам целые процедуры, но вы должны сделать что-то вроде этого ...

Sub MyButton_Click 
On Error Goto myError 

DoCmd.OpenReport vBerichtName, nAnsicht 


MyExit: 
    Exit Sub 

MyError: 
    If Err.number = 2501 then goto myExit 
    msgbox err.description 
    goto myExit 

End Sub 

Это общая ошибка, но вы можете поймать его, как и любую другую ошибку, и игнорировать его, если это 2501.
Seth

+0

ОК, ребята, спасибо, я сделал шаг дальше. Теперь это выглядит так: On Error GoTo CancelError If Not IsNull(vFilter) Then DoCmd.OpenReport vBerichtName, nAnsicht, , vFilter Else DoCmd.OpenReport vBerichtName, nAnsicht End If Echo True CancelError: Exit Function (Эй, я редактирую чужой код, и я довольно новичок в VB, пожалуйста, подумайте;) Теперь на самом деле это работает, но когда я нажимаю на отмену, я возвращаюсь с диалогом - но приложение зависает .... нужно перезапустить Access, чтобы иметь возможность продолжить! – faboolous

+0

Извините за уродливое форматирование кода в комментариях, нужно выяснить, как это сделать;) – faboolous

+0

Yup - в любое время, когда вы используете DoCmd.OpenReport, вам нужно поймать эту ошибку –

1

Ошибка, вероятно, происходит из строки DoCmd.OpenReport. Вот почему обработчик ошибок не работает.

Я предполагаю, что запрашиваемая вами стоимость как-то обязательна в отчете. Вы пытались поставить свою линию управления ошибками перед docmd.openReport?

0

OK, сейчас он работает.

После ваших предложений, я поставил такой код:

On Error GoTo CancelError 
    If Not IsNull(vFilter) Then 
     DoCmd.OpenReport vBerichtName, nAnsicht, , vFilter 
    Else 
     DoCmd.OpenReport vBerichtName, nAnsicht 
    End If 
CancelError: 
    DoCmd.Close acReport, vBerichtName 
    DoCmd.Close acForm, "F_BerichtDrucken" 
    Echo True ' this did the trick 
    Exit Function 

Как только я положил Echo Истинных в обработку ошибок, он работает Теперь плавно, возвращаясь к прежней форме и позволяя к продолжать работать - похоже, что «Эхо» - это нечто вроде обновления для экрана ...?

+0

да ... эхо - это боль. Его нужно использовать с большой осторожностью. Seth –

+0

fablife ... еще одна вещь ... вместо того, чтобы делать блок if, вы могли бы сделать что-то вроде этого .... Docmd.OpenReport vBerichtName, nAnsicht ,, NZ (vFilter, vbnNullString) ..., который преобразует null до ', который будет рассматриваться как «показать все записи» –

+0

Последнее, что ... ECHO False ПРЕДОТВРАЩАЕТ экран обновляется ... поэтому, когда я говорю, что вы должны быть осторожны, я имею в виду, что вы должны абсолютно убедиться, что Echo установлен на Правда в какой-то момент. Вы должны использовать только Echo, если ваш код или макросы делают много вещей, которые заставят экран прыгать и мигать и т. Д. –

1

Проверьте принтер по умолчанию. Я получал ту же ошибку & весь мой код работал исправно. Кто-то, использующий компьютер, установил принтер по умолчанию на принтер этикеток. Как-то Access проверял принтер & знал, что у него не было правильных настроек размера для печати, поэтому он остановил отображение отчета.

Я поменял принтер по умолчанию на другой принтер для полноразмерных листов, и он отлично работал.

Я надеюсь, что это помогает кому-то, потому что я был в растерянности, когда это произошло впервые.