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