2017-03-25 35 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 

這確實不會改變任何東西,但由於某種原因它的顏色字段而無需向代碼添加或更改任何其他內容。