Office中国论坛/Access中国论坛

标题: 报表页边距设置如何捕获错误代码? [打印本页]

作者: mrd_wxqs    时间: 2010-12-5 12:31
标题: 报表页边距设置如何捕获错误代码?
在代码中设置报表的页边距,当设置值超出范围时,不能捕获错误代码,如下提示,请问要如何才能捕获这样的错误代码呢?

[attach]44278[/attach]

我写的代码如下:
On Error GoTo Err_View
    If CurrentProject.AllReports(strReport).IsLoaded Then
        Set ActPrinter = Application.Printers(mm)                               ''为选定的打印机选取打印机对象。
        With ActPrinter                                                                       ''读取用户指定的设置。
            .PaperSize = Me.Cmb纸张
            .TopMargin = Me.Text上 * 56.7
            .BottomMargin = Me.Text下 * 56.7
            .LeftMargin = Me.Text左 * 56.7
            .RightMargin = Me.Text右 * 56.7
            .Orientation = Me.Frm方向
            .DataOnly = Me.Chk数据
        End With
        
        'DoCmd.OpenReport strReport, acViewPreview                   ''以预览模式打开报表。
        ActReport.Printer = ActPrinter                                             ''将报表的打印机设置为已修改的打印机对象。
    End If
    Exit Sub
   
Err_View:
    MsgBox Err.Description, vbExclamation, CurrentDb.Properties("AppTitle")

作者: mrd_wxqs    时间: 2010-12-5 21:12
大家都在干嘛呢,都过来这里瞧瞧啊,说点什么都行!
作者: tmtony    时间: 2010-12-6 09:12
试试返回err.number,可否取到, 或者可否把这个设置页面的窗体上传上来, 我们来帮你试试
作者: mrd_wxqs    时间: 2010-12-6 15:13
本帖最后由 mrd_wxqs 于 2010-12-8 19:05 编辑
tmtony 发表于 2010-12-6 09:12
试试返回err.number,可否取到, 或者可否把这个设置页面的窗体上传上来, 我们来帮你试试


回tmtony,谢谢您的关注!

err.number也不能得到错误代码,根本不能捕获错误。

我将窗体代码附上如下:[attach]44303[/attach]

当页边距的设置值达到或超出纸张大小的值时,就出现如下错误,Access崩溃退出:
[attach]44305[/attach]

下面这个错误点击“取消”也会崩溃退出:
[attach]44306[/attach]

是否报表的错误不能用on error来捕获呢?如果不能捕获错误,那么所有的代码都变得没有意义了,呵呵!

谢谢!



作者: tmtony    时间: 2010-12-6 17:14
我试过可以啊,不会出错. 完全正常啊
正常设置如果你的边距是超过纸的大小,也是可以设置的,但再打开 会变成 纸张的最小边界

作者: tmtony    时间: 2010-12-6 17:15
可能跟你的打印机或你的电脑有关系
可以这样排除
在另一台电脑,使用最常见的epson 1600K打印机 驱动来设置
如果不出错,就是你电脑的问题
作者: mrd_wxqs    时间: 2010-12-6 18:51
谢谢tmtony的解答。
这些代码我在两台电脑上试了,都会出错。刚好周六重装了一台电脑,今天上午试了同样也会出错,很是纳闷!比如使用hp-lj1320激光打印机的A5纸(148*210),当上下边距各设置为100时,就崩溃了。
我再多试,主要是想解决在MDE下调整报表页边距的问题!
作者: tmtony    时间: 2010-12-6 21:02
奇怪了,我调到0.01 都可以哦,只不过保存后再打开,变成了打印机允许的最小值
作者: mrd_wxqs    时间: 2010-12-6 21:15
tmtony 发表于 2010-12-6 21:02
奇怪了,我调到0.01 都可以哦,只不过保存后再打开,变成了打印机允许的最小值

哦,是吗,是将页边距往大的方向设置哦!不是往小的方向设置。比如纸高为210,当上下页边距都设置为100时,就会出错崩溃的。

我又重装了一遍电脑,依然如故。

不是用Access自带的“页面设置”来设置,而是用我的“Fs_页面设置”窗体来设置,先预览报表,然后从工具栏的“页面设置”来调用进行设置。
作者: li08hua    时间: 2010-12-6 22:40
哎,想帮你看看都要收费,没道理!
作者: mrd_wxqs    时间: 2010-12-7 08:36
呵呵,我经过多次试验都以为这个没有办法了,而且这个实例在坛子里还算有些参考价值,就改成收费的了。
作者: tmtony    时间: 2010-12-7 10:01
设到大值会提示,但并不非法退出哦.
但为什么你要设置这么大哦, 一般在15以下,你可用代码限制用户不可大于这个值
作者: koutx    时间: 2010-12-7 11:52
在你的With块内部最后加上下面语句,即可捕获此类错误:
            If .TopMargin + .BottomMargin >= .ItemSizeHeight Then MsgBox "上下边距超出纸张页面高度", , "错误提示"
        End With

作者: mrd_wxqs    时间: 2010-12-7 16:51
经过两位大师的提醒,我发觉左右边距比较好检测,用打印机的itemsizewidth、纸张宽度、左右页边距相比较可以得出结果;但上下页边距就复杂得多,itemsizeheight只是报表主体节的高度,若报表还有页面的页眉页脚及报表的页眉页脚,甚至还有其他的节和组,这些部分的高度都得考虑,并且itemsizeheight的值有可能比纸张高度大,也可能很小,可能上下边距设置值的和已大于纸张高度但并不大于itemsizeheight,就不能提示错误了。
如tmtony所说,检测上下边距不大于某值(如15),但如果报表打印的结果是产品标签(如60*50),这时若上下边距各允许设置为15又显得太大,用纸张高度的5%作为允许值也许可行,但也不够合理,请大师们再出出招,这个例子有不小的实用价值,谢谢!
作者: yanghua1900363    时间: 2012-5-5 11:27
遇到同样的问题 所以就下载了 附件  但打开窗体时提示 “你输入的表达式需要一个激活的报表”




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3