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开发编程

热门文章

  • 如何进入程序设计的领域(作..
  • 理解与掌握ACCESS--..
  • Windows快捷方式文件..
  • Access编程经验谈
  • 利用存储过程向SQL Se..
  • Access vba的题目..

最新文章

  • Access数据库设计技巧..
  • Access数据库设计技巧..
  • Access数据库设计技巧..
  • Access数据库设计技巧..
  • Access数据库设计技巧..
  • 使用Access和Exce..

联系方式

Access交流网(免费Access交流)

QQ:18449932 

网  址:www.access-cn.com

当前位置:首页 > 技巧 > 心得/经验/绝招
心得/经验/绝招

Access多条件格式研究笔记

之前见过论坛好几个帖子讨论过超过三个的条件格式,当时因为没有用过条件格式(通常遇到类似需求我就直接用VBA写代码了……),所以也无法加入讨论,但是开始留意条件这个这个功能。适逢周末有点空闲,就专门对多条件格式这个问题做了一下研究。

一、准备工作

  首先是熟悉和使用了一下条件格式,并实际应用了一下,感觉还不错,添加条件格式的窗口限制使用至多三个条件格式。条件格式可以设定的格式有:粗体,斜体,禁用,下划线,字体色,背景色,条件分三种类型,参数根据条件类型需要,可以有1-2个。

二、了解条件格式的数据对象

  既然想要突破三个条件格式,而微软又不允许超过三个,在条件格式的编辑窗口中被禁用了,那么我们是不是有可能自己在内存中添加更多的条件格式呢?

  首先想到的是找到条件格式的对象,于是我们新建了一个窗体,在上面添加了一个带条件格式的文本框,命名为Text0,打开VBA环境,在监视窗口中添加:Application.Forms(0).Text0,所有过程,所有模块。

  展开Text0的成员后,我们发现了一个成员“FormatConditions”,没错,就是他了!让我们展开这个成员,看看他的内部结构,展开后发现,好像是一个集合,既然是集合,那我们能不能用常规的集合成员添加方法Add来添加超过三个呢?同时我们注意到了FormatConditions的类型是“FormatConditions”。

  于是我们按F2打开对象浏览器。在对象浏览器中找到了FormatConditions这个集合,我们赫然看到,在成员中有个名为Add的方法。让我们来看看Add的声明:


Function Add(Type As AcFormatConditionType, [Operator As AcFormatConditionOperator = acBetween], [Expression1], [Expression2]) As FormatCondition

  OK!我们这就来动手试试看添加超过一下,我们新建一个模块,加入以下代码:
Option Compare Database
Option Explicit



Public Sub TestAdd()
    Dim FCs As access.FormatConditions
    Set FCs = Application.Forms(0).Text0.FormatConditions
    FCs.Delete
    FCs.Add acFieldValue, acEqual, "=1"
    FCs.Add acFieldValue, acEqual, "=1"
    FCs.Add acFieldValue, acEqual, "=1"
    FCs.Add acFieldValue, acEqual, "=1"
End Sub

  让我们来运行一下,access报如下错误:


运行时错误'7966'
您指定的格式条件号大于格式条件数


  点击调试按钮,我们看到程序挂起在第四个Add方法上,看来Microsoft的程序员没偷懒,这道门也被封了。

三、强制修改窗体

  看来当窗体被载入内存后,想要代码添加条件格式是不可能了,那么载入内存以前呢?是不是那个程序员也没偷懒呢?我们这就来尝试一下修改窗体。
  用Access来修改显然不现实,那我们就手工改,前面的帖子中,我曾经介绍过,用户窗体可以导出为.frm文件,但是access窗体好像没这个功能,我们在工程资源窗口选择导出,结果把窗体导出成了一个.cls的类文件,里面只有窗体代码,没有窗体的设计。

  这时候我们想到了access有两个未公开的函数,就是SaveAsText和LoadFromText。我们这就来试试看。

  打开立即窗口,在里面输入:


Application.SaveAsText acForm ,"窗体1","C:\1.frm"

  打开导出的文件,哈哈,果然是.frm格式,赶快找条件格式。在Text0定义段中,我们看到了以下内容:


ConditionalFormat = Begin
    0x0100000066000000010000000000000002000000000000000200000001010000 ,
    0xff000000c0c0c000000000000000000000000000000000000000000000000000 ,
    0x0000000000000000000000000000000000000000000000000000000000000000 ,
    0x310000000000
End

  我倒!怎么是二进制代码?该死的M$……没办法,分析二进制代码格式吧……

  经过半个小时的苦战……终于解读出二进制数据的全部格式:



0:(4Bytes) FC头
4:(4Bytes) nSize
8:(4Bytes) fcCount

    0:(4Bytes) AcFormatConditionType
    4:(4Bytes) AcFormatConditionOperator
    8:(4Bytes) pOffsetExpr1
    12:(4Bytes) pOffsetExpr2
    16:(1Byte) bEnabled
    17:(1Byte) bBold
    18:(1Byte) bItalic
    19:(1Byte) bUnderline
    20:(4Bytes) rgbsForeColor
    24:(4Bytes) rgbsBackColor
  
Strings(n) Unicode


  OK!现在让我们来自己手工写出第四个条件格式来:


ConditionalFormat = Begin
    0x010000009C000000040000000000000000000000000000000200000001010101 ,
    0x00000000ffffff00000000000000000004000000060000000101010100000000 ,
    0xffffff000000000000000000080000000a0000000101010100000000ffffff00 ,
    0x00000000000000000b0000000d0000000101010100000000ffffff0031000000 ,
    0x32000000310000003200000031000000320000003100000032000000
End

  (下面要做的工作我们需要随时保存,因为我们正在使用未经认证的数据,很有可能会导致access崩溃)

  我们通过手工写出了四个条件格式的二进制存储数据,现在把他覆盖到.frm文件对应位置去。然后我们回到立即窗口,输入以下代码:


Application.LoadFromText acForm ,"窗体2","C:\1.frm"


  导入成功!我们把修改过的窗体加载为了“窗体2”。然后我们在设计模式下打开窗体二,选择Text0查看条件格式。天哪!条件格式窗口的控件都错位了,根本没法正常查看,明显的数据越界错误。

  罢了,惹不起,不看了。直接运行窗体……

  access在数秒停顿后,终于被错误关闭了。

  Mission Failed ...

4、结束语

  通过各种途径的测试,我们已经可以肯定,在内存中,FormatCondition并不是一个变长的数据存储结构,仅仅通过界面来控制条件格式的数量。而是只有三条数据的存储空间,因此在一个TextBox控件中,是不可能通过设定方式来实现多个条件的。

5、后记

  虽然多条件格式从设计上而言,无法从数据角度来进行扩展,但是这并不意味着没有其他变通的方法,至少我们还有VBA。在本文的下篇中,将详细讲述多条件格式的实现。


发布人:LucasLyn…-http//bbs.office-cn.net/  
分享到:
点击次数:  更新时间:2006-08-25 09:45:45  【打印此页】  【关闭】
上一条:三小时掌握TREEVIEW控件  下一条:ACCESS用代码如何压缩与修复带有安全机制工作组的后台文



相关文章

  • • Access数据库设计技巧-第五部分
  • • Access数据库设计技巧-第四部分
  • • Access数据库设计技巧-第二部分
  • • Access数据库设计技巧-第一部分
  • • Access数据库设计技巧-第三部分
  • • 使用Access和Excel之间的选择理由
  • • access开发应用程序的过程汇总
  • • ACCESS提示错误信息,自动崩溃,数据库损坏的问题与解决办法

热门文章

  • [2009-11-30] 如何统计某一行某几个字段的个数?access数据库
  • [2006-09-23] SQLServer和Access、Excel数据传输简单总结access数据库
  • [2005-08-16] 获取指定表所有字段名的函数access数据库
  • [2005-08-16] 如何调出工作组对话框access数据库
  • [2003-12-22] 利用winsock控件实现局域网通信(一)access数据库
  • [2005-08-16] 另类检测联网状态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