在做收取金额,退还金额信息查询这两个窗体时,出现了两个大问题,一个是查找一个时间范围内的所有列,一个是在导出excel表时提示“对象不支持该属性或方法”,这两个问题困扰了我很长时间。
首先,说一下第一个问题,在选择时间控件时 ,我一开始是这样选择的
可是上面的月份是英文的,很显然不实用,也不对,后来又从网上查,说让用Microsoft 日历控件11.0,可是我的“工程”-“部件”中没有,网上说在office中添加一下就可以,可是我还是没找到,郁闷至极,我问了同学,
选择下面的部件Monthview
在对一个时间段内的数据进行搜索并加载到MSHFlexGrid时,我不知道用什么样的sql语句去取一个范围内的值,并且是将两个combobox的值赋予数据库进行查询,还有一个关键的问题就是数据类型不一致,无法进行隐式转换,重复提示“无法将varchar数据类型“2013/9/20”转换为int类型”,在百度了好多次以后,终于算是找到方法了
Private Subcmdinquire_Click()
Dim mrc As ADODB.Recordset
Dim txtsql As String
Dim msgtext As String
txtsql ="select * from recharge_info where date between '" & Format(ComboStartDate.Text,"yyyy-mm-dd") &"' And '"& Format(ComboEndDate.Text, "yyyy-mm-dd") &"'"
Set mrc = executeSQL(txtsql, msgtext)
If mrc.EOF Then
MsgBox "没有记录", vbOKOnly +vbExclamation, "警告"
Exit Sub
Else
With myFlexGrid
.Rows = 1
.CellAlignment = 4
.TextMatrix(0, 0) = "卡号"
.TextMatrix(0, 1) ="充值金额"
.TextMatrix(0, 2) ="充值日期"
.TextMatrix(0, 3) ="充值时间"
.TextMatrix(0, 4) ="充值教师"
.TextMatrix(0, 5) ="结账状态"
Do While Not mrc.EOF
.Rows = .Rows + 1
.CellAlignment = 4
.TextMatrix(.Rows - 1, 0) =mrc.Fields("cardno")
.TextMatrix(.Rows - 1, 1) =mrc.Fields("addmoney")
.TextMatrix(.Rows - 1, 2) =mrc.Fields("date")
.TextMatrix(.Rows - 1, 3) =mrc.Fields("time")
.TextMatrix(.Rows - 1, 4) =mrc.Fields("userid")
.TextMatrix(.Rows - 1, 5) =mrc.Fields("status")
mrc.MoveNext
Loop
End With
End If
End Sub
这里的format真的很重要,可以避免数据类型不匹配造成的困扰,尤其是时间的比较,还有就是注意单引号,双引号的应用,以及sql语句查询一定范围内列的方法
第二个问题就是在导出数据时,因为之前以及有其他窗体导出excel成功了,在与依他窗体对比完代码后,我发现代码没有出入,而且在模块中编写的导出Excel的函数也是正确的,于是查了又查,点了又点,将窗体上的控件删了重新加,才发现,原来是MSHFlexGrid与monthview的位置前后的问题,如果将monthview控件放在MSHFlexGrid的时候,就是弹出“对象不支持该属性或方法
”的错误提示,可是怎么样才能使窗体运行时既不会让MSHFlexGrid挡住,又能将monthview正常显示呢?做法如下:
然后再编写一段代码:
其中标注部分表示MSHFlexGrid控件位置总是滞后,这样就可以正常导出excel了
在发现问题和解决问题的过程中,其实最重要的是用好网络,多尝试,不管对错,都要试一试,还有就是断点调试真的很好用,当需要多次调用一个功能时,可以想办法将其写成函数、过程,利用call将其调用出来就ok了,只要耐下心来去想,去查,都能做出来的。