传递MSHFLEXGRID对象实现打印时,报错类型不匹配

erdong988 2015-12-11 02:00:46
打印控件的源代码我从网上找的,方法参数定义如下,省略部分都属于Optional 类
Public Function PrintMshflexgrid(objtoprint As Object, Optional title As String = "", Optional tFontSize As Single = 12, Optional alignment As AlignmentConstants = vbLeftJustify, Optional ByVal Repfirstrow As Boolean = True, ……) As Single


我调用代码如下:
         Dim MGrid As MSHFlexGrid
Set MGrid = Nothing
For Each frmTmp In Forms
If frmTmp.Tag = "frmWVLlstSA" Then
Set MGrid = frmTmp.GridList
Exit For
End If
Next
If Not (MGrid Is Nothing) Then
MGrid.WordWrap = True
VBprint1.NewDoc
VBprint1.NewPage
VBprint1.PrintMshflexgrid MGrid, "销售单列表", 16, vbCenter, True, False, True, "1111", , , , , "", "", "", "", "", "", False, False
'VBprint1.PrintMshflexgrid M1, "普通MSHFLexGrid打印预览结果(适应纸张宽度)", 16, vbCenter, True, True, True, "1111", , , , , "左边小标题内容", "中间小标题内容", "右边小标题内容", "表格尾部左边内容", "表格尾部中间内容", "表格尾部右边内容", False, False
VBprint1.EndDoc
End If


报错位置就是 PrintMshflexgrid 方法的第一个参数 MSHFLexGrid对象,就报错
实时错误 ‘13’:
类型不匹配
其他参数,都是非必须的,不传时,依旧报错类型不匹配,所以确认是第一个参数的报错
在立即窗口 MGrid的值是 Grid 当前单元格内容……
此问题现在跟代码有报错,以前也遇到过,把控件重新编译之后就都正常,过段时间又出现报错

老顽固了,恶疾,求救!!!SOS!!!
...全文
816 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
erdong988 2017-03-28
  • 打赏
  • 举报
回复
过去一年多了,印象中后来没再遇到过此问题。 结贴,谢谢各位!
cbm6666 2017-01-08
  • 打赏
  • 举报
回复
PrintMshflexgrid(objtoprint As Object 这是准备被调用的副程序

当你call PrintMshflexgrid(MshflexGrid1,"","") 时 objtoprint就代表着MshflexGrid1你又何必再 Dim MGrid As MSHFlexGrid ??


ruaning 2016-12-27
  • 打赏
  • 举报
回复
编写帮助文件真是一件费时的事,而且没有成就感,因此编写了一部分就不想再写下去了,请见谅。帮助文件中的内容仅供参考,部分属性和函数的参数可能不同或没有。 以下简单说说VSFLEX控件打印所使用的函数 Public Function VSFlexPrint(objtoprint As Object, Optional title As String = "", Optional tFontSize As Single = 12, Optional alignment As AlignmentConstants = vbLeftJustify, Optional ByVal Repfirstrow As Boolean = True, Optional ByVal autoresize As Boolean = False, Optional ByVal mulline As Boolean = True, Optional ByVal myborder As String = "1111", Optional ByVal mulpage As Boolean = False, Optional ByVal mulpageresize As Boolean = False, Optional ByVal colperpage As Integer = 1, Optional ByVal colspace As Single, Optional ByVal lefttitle As String = "", Optional ByVal middletitle As String = "", Optional ByVal righttitle As String = "", Optional ByVal bl As String = "", Optional ByVal bm As String = "", Optional ByVal br As String = "", Optional ByVal ignoreleftcols As Integer = 0, Optional ByVal autoformat As Boolean = False, Optional reptitle As Boolean = False) As Single 该函数可以以普通形式、分页和多栏格式打印VSFlex控件的内容 参数说明 objtoprint 要打印的VSFlex控件 title 表格标题,为空(注意不是空格)则不打印 tfontsize 表格标题字号(字体总是用黑体,不能改变的) alignment 表格的对齐方式(注意不是表格中的单元格对齐方式,单元格的对齐方式依赖您要打印的VSFlex控件中的设置) repfirstrow 对于标题字段(固定行fixedrows)是否每页都要重复打印 autoresize 是否自动根据纸张宽度进行缩放 mulline 内容是否允许换行打印还是只能单行输出 myborder 单元格边框用四位数字"1111"分别代表单元格的左、上、右、下四根线,某一位为0表示无线,如果为大于1的数字,则线宽些 mulpage 指示是否允许横向分页打印,注意,如果要横向分页打印,还必须将autoresize设置为false(即不自动缩放满足纸张宽度) mulpageresize 指在横向多页打印时,要不要根据纸张宽度自动放大(肯定不会缩小的) colperpage 每页要打印的栏数 colspace 栏间距,以VB的TWIPS为计量单位 lefttitle、middletitle、righttitle 表示表格上面的标题,分别为左、中、右 bl、bm、br 表示表格下面的标题,分别为左、中、右 ignoreleftcols 表示要忽略表格左边ignoreleftcols列,即表格左边ignoreleftcols不打印 autoformat 是否自动调整行高与列宽,不建议设置为true,因为表格自动调整列宽与行高很费时,而且由于调整起来比较复杂,结果可能不是很让人满意。 reptitle 标题行是否每页都要重复打印(包括表格上面的标题) printMshflexgrid 打印MSHlfexGrid表格的内容,参数与上面的很相似,含义也相同 本控件未提供打印DataGrid、记录集的功能,您要吧将数据转换为MSHFlexGrid或VSFlex控件进行打印。 printMshflexgridGZ1 以工资条形式打印MSHlfexGrid表格的内容,内容为0或空的内容也打印 printMshflexgridGZ2 以工资条形式打印MSHlfexGrid表格的内容,内容为0或空的内容不打印 用vbprint1.VSFlexPrint M1,........................................ 不会报错。效果都一样
Tiger_Zhao 2015-12-15
  • 打赏
  • 举报
回复
这是找编译错误啊。

如果你确定没有编译错误了,还是出问题,那么很可能是你的工程太复杂了,应该拆分出Dll/OCX工程供EXE调用。
毕竟VB/VC是内存只有几M(这个“几”是个位数)时代的设计,当时的设计概念就没有很复杂的工程。
Tiger_Zhao 2015-12-14
  • 打赏
  • 举报
回复
恭喜获得成就——代码烂到程序都读不懂
Tiger_Zhao 2015-12-14
  • 打赏
  • 举报
回复
不止一次回答类似问题
纯粹是你的代码有太多或太复杂的编译错误,导致VB-IDE无法正确指明编译错误的代码位置。
在“Tools\Options...”中将General下的“Compile on demand”选项取消,将代码全注释起来,逐个恢复逐个编译,最后全编译通过就OK了。

恭喜获得成就——代码烂到程序都读不懂
erdong988 2015-12-14
  • 打赏
  • 举报
回复
引用 1 楼 Tiger_Zhao 的回复:
不止一次回答类似问题 纯粹是你的代码有太多或太复杂的编译错误,导致VB-IDE无法正确指明编译错误的代码位置。 在“Tools\Options...”中将General下的“Compile on demand”选项取消,将代码全注释起来,逐个恢复逐个编译,最后全编译通过就OK了。 恭喜获得成就——代码烂到程序都读不懂
这部分代码 是我从网上找的,要是我写出来这么多的 就好了…… 逐个恢复逐个编译,这样的做法 目的是什么?找被忽略的错误还是……别的? 花时间整理完了,也没改什么……现在是运行是对的…… 以前的代码就是这样的:自定义打印控件重新编译后,一段时间内运行正常,之后就又报错了……

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧