Access编程交流网
  • 设为首页|收藏本站|繁体中文|手机版
  •     
  • Access培训-Access开发平台-Access行业开发

  • 首页
  • 资讯
  • 技巧
  • 源码
  • 行业
  • 资源
  • 活动
  • 关于

技巧

ACCESS数据库

启动/设置/选项/背景

修复/压缩

安全/加密/解密

快捷键

版本升级/其它等

数据表

命名方式/设计规范

表设计

查询

Sql语言基础

选择查询

更新查询

删除查询

追加查询

生成表查询

交叉表查询

SQL特定查询

查询参数

查询综合应用

界面/窗体/控件

标签

文本框

命令按钮

组合框/列表框

选项组/复选框/选项按钮

选项卡

子窗体

窗体本身/综合应用

其它

报表打印

报表设计

高级报表

模块/函数/VBA/API/系统

VBA基础

内置函数

调试/跟踪/Debug

模块/类模块

API/COM/系统相关

字符数字日期

网络通信游戏

加密解密安全

文件处理

经典算法

宏/菜单/工具栏/功能区

宏/脚本

菜单/工具栏

功能区/Ribbon

图表/图形/图像/多媒体

图表

图形/图像

音频

视频/动画

DAO/链接表/ADO/ADP

DAO/链接表/ODBC

ADO/RDO

ADP

ActiveX/第三方控件/插件

Treeview树控件

ListView列表控件

Toolbar工具栏控件

微软其它控件

Dbi-Tech

CodeJock

Grid++Report

FastReport

ComponentOne

加载项/插件/Addin

OFFICE集成/导入导出/交互

Excel导入导出/交互

Word导入导出/交互

PPT交互

Outlook控制/邮件

Text文本文件/INI/CSV

PDF/SWF/XML格式

CAD格式

Sharepoint/其它Office

SqlServer/其它数据库

表

视图

存储过程/触发器

函数

用户/权限/安全

调试/维护

SqlServer其它/综合

发布/打包/文档/帮助

开发版/运行时

打包/发布/部署

开发文档/帮助制作

Access完整行业系统

采购管理系统

销售管理系统

仓库管理系统

人力资源管理HRM

CRM管理系统

MRP/ERP管理系统

BRP/流程优化

其它管理系统

心得/经验/绝招
其它/杂项
Excel技巧

Excel应用与操作

Excel开发编程

Word技巧

Word应用与操作

Word开发编程

Outlook技巧

Outlook应用与操作

Outlook开发编程

热门文章

  • 17种正则表达式
  • copy粘贴的操作
  • 初识VBA:第五课 小数点..
  • 一个常用的组合多条件查询 ..
  • 别让MsgBox中断了一些..
  • 代码设置ACCESS对象颜..

最新文章

  • Access或VB VBA..
  • 关于VBA的0、""(空字..
  • Access导出函数Out..
  • Access日期与日期区间..
  • RecordSource ..
  • Access子窗体事件控制..

联系方式

Access交流网(免费Access交流)

QQ:18449932 

网  址:www.access-cn.com

当前位置:首页 > 技巧 > 模块/函数/VBA/API/系统 > VBA基础
VBA基础

代码修改完善方法示例(初学者必读)

        yanghua1900363同志有一个程序运行上的错误,于是将一段代码贴了出来寻求答案。我看了一下,造成错误的原因倒不在这段代码中,问题应该出在代码所调用的一个函数上。不过这段代码有点意思,有点意思的原因是比较典型而常见的脱了裤子放屁。代码编写过程中,再熟练的程序员,都可能出现这个问题。因为人的思维是渐进的,不大可能一下把思路全部理清晰。但是不断的修改和完善代码的过程,是个好的习惯,这不仅在于能使代码本身变得简单易读。而且在于可以不断的积累编程的经验,掌握编程的规律。于是乎决定写此例,阐述代码修改完善的基本过程。


一、yanghua1900363同志的原代码:

Dim intmessage As Integer
Dim rst As New 记录集封装程序
If rst.OpenRecordset("appraisal", "[销售订单id]=" & Me.销售订单id) Then
      If IsNull(rst.Recordset("appraisalID")) Then
          intmessage = MsgBox("该订单尚未评审,是否进行评审?", vbYesNo)
          If intmessage = vbYes Then
              Call 订单评审
          End If
      Else
          If Not IsNull(rst.Recordset("appraisalid")) Then
              intmessage = MsgBox("该订单已被评审,是否再次进行评审?", 4)
              If intmessage = vbYes Then
                 Call 订单评审
              End If
          End If
      End If
End If

二、分析和改进代码的过程:

  这段程序采用了if的多层嵌套结构,但这个嵌套多了些脱裤子放屁的意味,而且是脱几层裤子放屁。首先,IsNull(变量)与Not IsNull(变量)是互斥的,而if else end if已经表明了这种互斥关系的程序结构,于是放屁之前就多余穿了一件裤子。于是乎,程序应该简化为:

Dim intmessage As Integer
Dim rst As New 记录集封装程序
If rst.OpenRecordset("appraisal", "[销售订单id]=" & Me.销售订单id) Then
      If IsNull(rst.Recordset("appraisalID")) Then
          intmessage = MsgBox("该订单尚未评审,是否进行评审?", vbYesNo)
          If intmessage = vbYes Then
              Call 订单评审
          End If
      Else
          intmessage = MsgBox("该订单已被评审,是否再次进行评审?", 4)
          If intmessage = vbYes Then
                 Call 订单评审
          End If
      End If
End If

  在剩余的代码中,if结构中的语句基本相同,这说明秋裤和内裤穿反了,因此把最里层的秋裤穿到外层来。程序应该简化为:

Dim intmessage As Integer
Dim rst As New 记录集封装程序
If rst.OpenRecordset("appraisal", "[销售订单id]=" & Me.销售订单id) Then
      If IsNull(rst.Recordset("appraisalID")) Then
          intmessage = MsgBox("该订单尚未评审,是否进行评审?", vbYesNo)
      Else
          intmessage = MsgBox("该订单已被评审,是否再次进行评审?", 4)
      End If
   If intmessage = vbYes Then
     Call 订单评审
   End If
End If

  再仔细观察一下,if eles end if结构体中的语句,只是字符串的不一样,也就是内裤上绣的花不一样而已。于是程序简化为:

Dim str As string
Dim rst As New 记录集封装程序
If rst.OpenRecordset("appraisal", "[销售订单id]=" & Me.销售订单id) Then
      If IsNull(rst.Recordset("appraisalID")) Then
          str = "该订单尚未评审,是否进行评审?"
      Else
          str = "该订单已被评审,是否再次进行评审?"
      End If
   If MsgBox(str, vbYesNo) = vbYes Then
     Call 订单评审
   End If
End If

  进一步观察字符串,发现第二句与第一句略有差别,也就是内裤上都绣了花,只是花型有点区别而已。于是程序简化为:

Dim str As string
Dim rst As New 记录集封装程序
If rst.OpenRecordset("appraisal", "[销售订单id]=" & Me.销售订单id) Then
   str = "该订单尚未评审,是否进行评审?"
      If IsNull(rst.Recordset("appraisalID"))=false Then
          str = replace(replace(str,"尚未","已被"),"是否","是否再次")
      End If
   If MsgBox(str, vbYesNo) = vbYes Then
     Call 订单评审
   End If
End If

  捣腾到此,如果还想进一步简化,就可以写成如下了:

  
Dim str As string
Dim rst As New 记录集封装程序
If rst.OpenRecordset("appraisal", "[销售订单id]=" & Me.销售订单id) Then
   str = "该订单尚未评审,是否进行评审?"
      If IsNull(rst.Recordset("appraisalID"))=false Then str = replace(replace(str,"尚未","已被"),"是否","是否再次")
   If MsgBox(str, vbYesNo) = vbYes Then Call 订单评审
End If

  简化后的语句与简化前相比减少了10句。基本上就是穿一条外裤一条内裤直接放个响屁就可以了。这屁放响了,便也就上下通气,心旷神怡,宠辱皆忘,把酒临风,其喜洋洋则已。

发布人:achao  
分享到:
点击次数:  更新时间:2017-06-16 17:33:28  【打印此页】  【关闭】
上一条:获取子窗体的数据源  下一条:Access报表打印设置



相关文章

  • • Access或VB VBA判断数组的值是否为空的几种方法
  • • 关于VBA的0、""(空字符串)、Null、Empty、与 Nothing 的区别
  • • Access导出函数OutPutto解释
  • • Access日期与日期区间的筛选
  • • RecordSource SourceObject ControlSource属性的区别
  • • Access子窗体事件控制父窗体
  • • 事件​change和AfterUpdate的区别

热门文章

  • [2013-08-28] Access使用正则表达式access数据库
  • [2009-03-12] 代码导出导入自定义菜单示例access数据库
  • [2009-05-06] Access月初,月末,本月天数的函数access数据库
  • [2013-10-12] Access限制文本框的输入长度access数据库
  • [2013-08-12] 【技巧】format函数的妙用-解决时间错误的方法access数据库
  • [2005-07-08] 一个简单的小写金额转中文的函数access数据库

热门产品

公司动态|在线留言|在线反馈|友情链接|会员中心|站内搜索|网站地图

中山市天鸣科技发展有限公司 版权所有 1999-2023 粤ICP备10043721号

QQ:18449932

Access应用 Access培训 Access开发 Access平台

access|数据库|access下载|access教程|access视频|access软件

Powered by MetInfo 5.3.12 ©2008-2025  www.metinfo.cn