2017-03-25 36 views
2

我有一个可打开报告“eBouchTest”的子文件。我循环控制并更改控件的背景颜色。我正在简化我的问题,最终这只会根据条件发生,但现在我希望每个组合框,列表框或文本框都是灰色的。控件不会改变报告第一页的颜色

当运行下面的代码片段时,我的报告的第1页没有更改控件的颜色,但其他所有页面都是这样。为什么是这样以及如何修复它?点击一个按钮启动,没有错误以下子:

Sub ViewReport() 
    Dim formname As String 
    Dim ctl As Control 
    Dim frm As Report 

    formname = "eBouchTest" 

    Set frm = Application.Reports(formname) 

    DoCmd.openreport formname, acViewPreview 

    For Each ctl In frm.Controls 
      If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Or ctl.ControlType = acListBox Then 
        ctl.BackColor = RGB(200, 200, 200) 
      Debug.Print ctl.Name & " " & ctl.BackColor 
     End If 

    Next ctl 

    Set ctl = Nothing 

End Sub 

第1页的报告(仅适用于大小目的部分图片): enter image description here

以下页面:

enter image description here

我怎样才能让页面1改变颜色?

回答

0

AFIK,只有有效控制VBA报表控件的动态外观的方法是控件所在的区段格式事件中的代码。格式化事件仅适用于普通和预览而不是报表视图。

可以使用自定义全局变量或内部OpenArgs将条件值传递给报表。 DoCmd.openreport formname, acViewPreview, , , , "some value"

也许条件格式会适用于您。这将允许在报告视图中显示。 CF规则可以引用传递给报告的OpenArgs参数。例如: Conditional Formatting Example

可以同时选择所有控件,希望拥有此规则,并为所有操作设置条件。

CF实际上是更改记录之间控件外观的唯一方法,因为VBA代码为该控件的所有实例设置属性。因此,如果条件取决于每条记录中的数据,请使用CF.

+0

正如问题所述,“我正在简化我的问题,最终这只会基于一个条件发生,但现在我希望每个组合框,列表框或文本框都变成灰色。”我只是想明白为什么它现在不起作用,他们不会在最后得到彩色... –

+0

好的,对不起,我忘记了在发布答案时阅读。见编辑的答案。 – June7

0

在报告的detail_format事件中使用格式控制代码。

Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer) 

Dim formname As String 

Dim ctl As Control 

Dim frm As Report 


formname = "eBouchTest" 

Set frm = Application.Reports(formname) 

For Each ctl In frm.Controls 
     If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Or ctl.ControlType = acListBox Then 
       ctl.BackColor = RGB(200, 200, 200) 
     Debug.Print ctl.Name & " " & ctl.BackColor 
    End If 

Next ctl 

Set ctl = Nothing 

End Sub 

还使用全局变量来动态设置控件的格式。

0

如果以这种或那种方式刷新,第一页也会着色。在我的情况下,报告显示在横向模式下打印预览,因此在代码的末尾,我只是添加

frm.Printer.Orientation = acPRORLandscape 

这确实不会改变任何东西,但由于某种原因它的颜色字段而无需向代码添加或更改任何其他内容。