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。在本文的下篇中,将详细讲述多条件格式的实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在进行多条件查询时,我们可以使用Access数据库中的查询功能来实现。下面是一种可能的方法: 1. 打开Access数据库并选择要查询的表格。 2. 在“创建”选项卡中,点击“查询设计”。 3. 在弹出的查询设计视图中,可以看到一个空白的查询面板。 4. 在表格的“查询字段”中,选择需要查询的字段。可以使用Ctrl键来选择多个字段。 5. 在“查询条件”行中,选择第一个条件的字段,并输入相应的条件。 6. 如果需要添加其他条件,可以在“查询条件”行的下一行选择另一个条件字段,并输入相应的条件。 7. 若要添加更多条件,可以继续在“查询条件”行的下方添加新的条件字段并输入相应的条件。 8. 在查询面板上方的工具栏中,点击“运行”按钮。 9. Access将会根据设定的条件进行查询,并将结果显示在查询结果面板中。 需要注意的是,查询条件可以使用各种比较运算符,比如大于、小于、不等于等。也可以使用逻辑运算符(例如AND和OR)来组合多个条件。此外,还可以使用通配符来模糊匹配查询条件。 在Access中进行多条件查询可以帮助我们更精确地筛选出需要的数据,以满足具体的分析和报表需求。 ### 回答2: 在数据库中,可以使用多条件查询来获取符合指定条件的数据。多条件查询允许我们在一个查询语句中使用多个条件来精确地过滤数据。 使用Access进行多条件查询有以下几个步骤: 1. 打开Access数据库并选择需要进行查询的数据表。 2. 在“创建”选项卡中,点击“查询设计”。 3. 在“查询设计”视图中,选择需要查询的字段,可以从表格上拖动字段到查询设计视图中。 4. 添加查询条件,可以在“查询设计”视图中的条件行中指定。可以使用不同的操作符(例如等于、大于、小于等)来设置条件,还可以使用通配符来进行模糊查询。 5. 若要添加第二个条件,可以在条件行的下方增加新的条件行,并使用逻辑运算符(例如AND、OR)来组合多个条件。 6. 在设置完所有查询条件后,点击“运行”查看结果。查询结果将显示符合所有条件的记录。 通过以上步骤,可以方便地进行Access数据库的多条件查询。使用多条件查询可以更精确地获取所需的数据,并加快查询的速度,提高数据库的效率。同时,使用适当的操作符和逻辑运算符来设置查询条件,可以进一步细化查询结果,以满足特定的需求。 ### 回答3: 在进行多条件查询时,我们可以使用Access数据库提供的查询功能。多条件查询可以根据多个条件来筛选出符合要求的数据。 首先,打开Access数据库并选择要查询的数据表。然后,点击“创建”选项卡上的“查询设计”按钮,进入查询设计视图。 在查询设计视图中,我们可以添加查询条件。在查询设计视图的工具栏上,点击“设计”选项卡中的“添加字段”按钮,选择要添加的字段。在“条件”行中,选择用于筛选数据的条件运算符,如等于、不等于、大于、小于等。 如果需要添加更多的条件,可以通过在查询设计视图中的工具栏上点击“查询设计工具”选项卡中的“与”或“或”按钮来组合多个条件。使用“与”按钮可以添加一个条件,该条件必须同时满足。而使用“或”按钮可以添加一个条件,该条件中的任意一个满足即可。 同时,我们还可以使用通配符来进行模糊查询。在条件输入框中,使用星号(*)表示任意字符,使用问号(?)表示单个字符。 完成查询条件设置后,点击工具栏中的“运行”按钮即可执行查询。查询结果将会显示在查询结果窗口中,我们可以对结果进行查看、编辑或者导出。 在使用Access进行多条件查询时,可以根据具体的查询需求灵活设置查询条件。通过合理的设置条件和运用通配符,我们可以快速地筛选出符合要求的数据,提高数据查询效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值