Office中国论坛/Access中国论坛
标题: 统计报表审核模块如何编写 [打印本页]
作者: 余瑞龙 时间: 2005-1-28 00:20
标题: 统计报表审核模块如何编写
有两个表:一个为农业统计表(Sheet3)、一个为审查公式表(Sheet7),现在编制一宏(如下)从(Sheet7)中逐条读取公式对(Sheet3)进行平衡关系检查,但运行出错,好象是变量类型不匹配,请版主或高手不吝赐教,小的多了。
Sub Macro1()
' Macro1 Macro
' 宏由 Lenovo User 录制,时间: 2005-1-27
Dim shgs, cwxx As Variant ' 定义“审核公式”、“错误信息”两个变量
shgs = ""
cwxx = ""
For i = 1 To 5
shgs = Sheet7.Cells(i, 1)
If Not shgs Then '就这一句出错
cwxx = cwxx + Sheet7.Cells(i, 2) + Chr(10)
End If
Next
MsgBox cwxx
End Sub
[attach]8807[/attach]
[此贴子已经被作者于2005-1-27 16:20:32编辑过]
作者: 老鬼 时间: 2005-1-28 01:36
我想你的意思是不是这样:If shgs<>"" Then
作者: 余瑞龙 时间: 2005-1-28 02:57
如果这一句直接写上公式是可以运行的,即:If Not [D22]=[D14]+[D15]-[D16] Then 或 If Not [D5]>[D6] Then 但用变量进行替代就不行,不知什么原因?
作者: 老鬼 时间: 2005-1-28 03:50
not运算符是用以对某值进行逻辑否定的,能够进行逻辑否定的,当然只有逻辑值。如果你的变量不是“true”或“false”这样的逻辑值,就会出现类型不匹配的错误。而[D22]=[D14]+[D15]-[D16]和[D5]>[D6]返回的都是逻辑值,所以不会出错。
作者: 余瑞龙 时间: 2005-1-28 03:59
哦,我明白了.谢谢你的指点!
不过这种写法在 VFP 中是可行的.只不过字符型变量要用宏替换函数替换出来才行.
老鬼:你真行,我很佩服你!
我是初学编程,还没入门,VBA程序有许多句子我还看不懂.望有机会得到您的指教.
我是安徽歙县人,现在歙县农调队工作,主要是处理统计报表数据,常接触 Excel
所以想学编程,减轻负担提高效率.
你是何地人,能交流一下吗?我的联系是话: 05596512702 余瑞龙
[此贴子已经被作者于2005-1-27 20:08:23编辑过]
作者: 余瑞龙 时间: 2005-1-28 04:15
我已把那段程序改成如下这样了,运行已经没问题,你看看是否可以优化一下,或改其它思路,更简洁,运行更快.
Sub test()
' bbsh Macro
' 宏由 余瑞龙 录制,时间: 2005-1-27
'
'
Dim temp1
Dim shgs, cwxx As Variant
Dim rng As Range
shgs = ""
cwxx = ""
temp1 = Range("q3")
For i = 2 To 7
shgs = Sheet7.Cells(i, 1)
shgs = Replace(shgs, "[", "")
shgs = Replace(shgs, "]", "")
Range("q3").Formula = "=if(" & shgs & ",true)"
If Range("q3") <> True Then
cwxx = cwxx + Sheet7.Cells(i, 2) + Chr(10)
End If
Next
Range("q3") = temp1
MsgBox cwxx
End Sub
作者: 老鬼 时间: 2005-1-28 05:31
我是福建人。你的程序当然是可以优化的,比如考虑使用SELECT CASE结构,去除临时表和临时单元格等。当然,数据量不大时效果不会明显,这种问题你可以在以后不断改进。
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) |
Powered by Discuz! X3.3 |