Vba MS Access 2010-拆分格式闪烁[条件格式]

Vba MS Access 2010-拆分格式闪烁[条件格式],vba,ms-access,ms-access-2010,Vba,Ms Access,Ms Access 2010,问题: 一切都进行得相当顺利,然后我向表单主体(和数据表)添加了两个字段:“影响”和“兴趣”。我将它们设置为具有条件格式,这样,如果它们包含文本“red”,它们将具有红色填充 加载表单时,条件格式会立即应用于数据表视图中的第一个条目,而应用于其他两个条目则需要一秒钟的时间我将“黄色”和“绿色”放进去(条件是分别填充黄色和绿色)。如果在加载表单时将第三个条目设置为选中,则此条目的格式会立即应用于数据表视图。MS Access表示它正在“计算”,当计算完成时,将应用条件格式 除此之外,当应用第一个文

问题

一切都进行得相当顺利,然后我向表单主体(和数据表)添加了两个字段:“影响”和“兴趣”。我将它们设置为具有条件格式,这样,如果它们包含文本“red”,它们将具有红色填充

加载表单时,条件格式会立即应用于数据表视图中的第一个条目,而应用于其他两个条目则需要一秒钟的时间我将“黄色”和“绿色”放进去(条件是分别填充黄色和绿色)。如果在加载表单时将第三个条目设置为选中,则此条目的格式会立即应用于数据表视图。MS Access表示它正在“计算”,当计算完成时,将应用条件格式

除此之外,当应用第一个文本过滤器时,表单正文文本框“影响”和“兴趣”闪烁,以及标题中的第二个文本过滤器和数据表视图中所选条目的“名字”(应用过滤器后,我的VBA代码选择名字)。当我移动鼠标时,闪烁停止并应用过滤器。不过,有时候闪烁不会发生这只是在我添加了“影响”和“兴趣”字段并使用条件格式后才发生的。

这是我表格的基本结构:

表格标题: 几个按钮和两个文本框。用户输入搜索词,然后点击“应用过滤器”按钮缩小数据表视图中显示的数据范围

数据表视图: 键列是可见的,当用户单击其中一个时,它的配置文件将显示在表单中

表单正文:包含数据表中的数据,按类别排列

以下是我的表单加载时的代码-它加载所有相关数据,设置复选框,并在第一个文本过滤器上设置焦点:

Private Sub Form_Load()

Me.RecordSource = "SELECT * FROM Staff "
CheckImpInt.Enabled = True
CheckImpInt = False
StaffTotalSearchText1.SetFocus

End Sub
下面是第一个过滤器按钮的代码:

Private Sub Filter1Button_Click()

If CheckImpInt = True Then

Me.RecordSource = "SELECT * FROM Staff " & _
"WHERE [Interest] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
   "Or [Impact potential] Like '*" & Me![StaffTotalSearchText1] & "*'"

Else

Me.RecordSource = "SELECT * FROM Staff " & _
"WHERE [Forename] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
   "Or [Surname] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
   "Or [Position] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
   "Or [Group] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
   "Or [Division] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
   "Or [All groups] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
   "Or [Expertise] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
   "Or [Institutes] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
   "Or [Roles] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
   "Or [skills - analysis] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
   "Or [skills - compute] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
   "Or [Notes] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
   "Or [Paired IC] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
   "Or [Paired Company?] Like '*" & Me![StaffTotalSearchText1] & "*' "

End If

End Sub

我不确定为什么要在FormLoad事件中设置RecordsSource,看起来除了过滤器外,它保持不变

我推荐

  • 将表单的recordsource设置为
    [Staff]
    并删除
    Me.recordsource=
    “从员工中选择*”
    表单加载事件
  • 将过滤器按钮事件更改为使用过滤器而不是使用recordsource
更新过滤器按钮\u单击子按钮

Private Sub Filter1Button_Click()  
    If CheckImpInt = True Then

        Docmd.ApplyFilter , "[Interest] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Impact potential] Like '*" & Me![StaffTotalSearchText1] & "*'"

    Else

        Docmd.ApplyFilter , "[Forename] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Surname] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Position] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Group] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Division] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [All groups] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Expertise] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Institutes] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Roles] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [skills - analysis] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [skills - compute] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Notes] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Paired IC] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Paired Company?] Like '*" & Me![StaffTotalSearchText1] & "*' "

   End If

End Sub
如果您将这两个过滤器移动到实际查询中,那么您也会获得更好的性能—然后将ApplyFilter更改为使用Where参数而不是过滤器,但这是一种完全不同的策略

最后,如果您想完全消除闪烁,您可以在应用过滤器之前添加行以停止屏幕更新,然后在子屏幕的末尾将其打开

切换屏幕更新

在if块之前添加
Application.Echo False


在if块之后添加
Application.Echo True

我不确定为什么要在FormLoad事件中设置RecordsSource-它看起来保持不变-除了过滤器

我推荐

  • 将表单的recordsource设置为
    [Staff]
    并删除
    Me.recordsource=
    “从员工中选择*”
    表单加载事件
  • 将过滤器按钮事件更改为使用过滤器而不是使用recordsource
更新过滤器按钮\u单击子按钮

Private Sub Filter1Button_Click()  
    If CheckImpInt = True Then

        Docmd.ApplyFilter , "[Interest] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Impact potential] Like '*" & Me![StaffTotalSearchText1] & "*'"

    Else

        Docmd.ApplyFilter , "[Forename] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Surname] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Position] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Group] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Division] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [All groups] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Expertise] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Institutes] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Roles] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [skills - analysis] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [skills - compute] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Notes] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Paired IC] Like '*" & Me![StaffTotalSearchText1] & "*'" & _
           "Or [Paired Company?] Like '*" & Me![StaffTotalSearchText1] & "*' "

   End If

End Sub
如果您将这两个过滤器移动到实际查询中,那么您也会获得更好的性能—然后将ApplyFilter更改为使用Where参数而不是过滤器,但这是一种完全不同的策略

最后,如果您想完全消除闪烁,您可以在应用过滤器之前添加行以停止屏幕更新,然后在子屏幕的末尾将其打开

切换屏幕更新

在if块之前添加
Application.Echo False


在if块之后添加
Application.Echo True
,我很困惑。它什么时候闪烁-你说“当窗体加载时”-什么时候发生?是在单击数据表条目时发生的吗?或者当你点击ApplyFilter按钮时它会闪烁吗。Form_Load event(加载事件)中的代码是什么?在命令按钮中,单击应用过滤器的事件加载表单时,数据表视图中的所有颜色与所选条目中的颜色不同,只有在MS Access完成“计算”后才应用条件格式。无论是否有条件格式,这种“计算”都会发生。我很困惑。它什么时候闪烁-你说“当窗体加载时”-什么时候发生?是在单击数据表条目时发生的吗?或者当你点击ApplyFilter按钮时它会闪烁吗。Form_Load event(加载事件)中的代码是什么?在命令按钮中,单击应用过滤器的事件加载表单时,数据表视图中的所有颜色与所选条目中的颜色不同,只有在MS Access完成“计算”后才应用条件格式。无论是否存在任何条件格式,这种“计算”都会发生。我之所以使用记录源代码破解,是因为我实际上有两个文本过滤器,并且一次只能在Docmd.ApplyFilter上工作。我在这个线程中使用了Johnny Bones的答案,我想我把RecordSource放在Form.OnLoad中,因为修改记录源、关闭表单,然后重新打开表单,导致加载修改过的(不完整的)数据集。我稍后将测试屏幕闪烁代码。如果我使用查询,数据库的效率会提高多少?我可以看到如何进行更改,我相信(其中Formname![Textfilter1]…)Access数据库引擎可以根据您拥有的字段和参数优化查询-可能没有多大区别,因为您有这么多参数。但至少是这样