我把文本框的内容输出到打印机打印,当运行到 If Printer.TextWidth(mbsgjg) < 8600 Then 这段代码时,总是出现"实时错误'6'",可是当我在文本框中少输入几个汉字是,上面的错误又没有了,是什么原因?

解决方案 »

  1.   

    这是一个溢出错误,估计是你的Printer边界溢出了??
      

  2.   

    mbsgjg为数据类型,如
    Dim mbsgjg As String
      

  3.   

    出错时mbsgjg是什么值,加 debug.print mbsgjg 查看一下
      

  4.   

    在立即窗口运行的结果:
    debug.print mbsgjg
        经我队调查证实,在此事故中,刘芬驾驶湘HJ596学号北京现代教练车注意力不集中妨碍安全驾驶,驾驶车辆驶入逆行,驾驶车辆超限速行驶,其行为违反了《中华人民共和国道路交通安全法》第三十五条以及《中华人民共和国道路交通安全法实施条例》第四十五条前款、第六十二条第(三)项之规定;陈志才驾驶湘H59536号车辆超限速行驶,其行为违反了《中华人民共和国道路交通安全法实施条例》第四十五条前款之规定。根据《中华人民共和国道路交通安全法实施条例》第九十一条:" 公安机关交通管理部门应当根据交通事故当事人的行为对发生交通事故所起的作用以及过错的严重程度,确定当事人的责任。及《道路交通事故处理程序规定》第四十六条前款(二)项:"因两方或两方以上当事人的过错发生道路交通事故的,根据其行为对事故发生的作用以及过错的严重程度,分别承担主要责任、同等责任和次要责任。"之规定认定:
      

  5.   

    加个val试试
    If val(Printer.TextWidth(mbsgjg))<8600 then
      

  6.   

    改成
    If Printer.TextWidth(mbsgjg) < 8600& Then 
    再试试
    要不就是mbsgjg的长度太长了?
      

  7.   

    val函数的作用是返回一个数据,而If Printer.TextWidth(mbsgjg) < 8600 Then 计算的是打印机打印的文本字符串的宽度,超过8600会在下一行打印的.
      

  8.   

    改成If Printer.TextWidth(mbsgjg) < 8600& Then还是不行呀?
    我用mbsgjg字符串打印另一个比这更长的文本也没问题呀?
      

  9.   

    Printer.TextWidth
    检查下它的数据类型。
      

  10.   

    改在If val(Printer.TextWidth(mbsgjg)) <8600 then还是没用
      

  11.   

    debug.print Printer.TextWidth(mbsgjg)
      

  12.   

    TextWidth 内部其实是先用像素进行计算的,使用的是 Integer 类型,超过 32767 就会出现溢出错误。通常纸张没有这么宽(200DPI 就有 4m 多),所以先判断一下字符串长度,如果超过一定值(比如 1000)肯定会折行,不用调用 TextWidth 去计算打印宽度了。
      

  13.   

    不用试了,TextWidth 计算结果与当前字体有关。lcsfxs 的字体大所以马上溢出了,我用了 String(4275,"W") 才溢出。
    lcsfxs 这种字体下判断一下超过 200 个字符就可以直接认为有折行了。
      

  14.   

    lz用什么字体这么大?
    光用字数判断折行,因为字体等原因,不准确,效果不好
    建议先判断字数,截取TextWidth能承受的字数(保证比1行多),截取后再用TextWidth判断
      

  15.   

    我用的是:
        Printer.Font.Name = "仿宋_GB2312"
        Printer.Font.Size = 14
        Printer.Font.Bold = False
    不行吗?
      

  16.   

    高明,我改成Printer.Font.Size = 10程序就好的.