2013-11-27 117 views
4

我想使用VBA來格式化一些未綁定的文本框,我已經添加到子窗體上的行設置爲連續視圖。使用VBA在子窗體記錄中格式化字段

VBA查看與子窗體底層RecordSource相關聯的綁定文本框,然後根據數據格式化已添加的未綁定文本框。

下面是一些簡單的代碼:

Public Sub ApplyFormat() 

    If Forms!tblEnrolments!tblEnrolments_Jobs_sub!Start = 1 Then 

     Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtStart.BackColor = RGB(65, 138, 179) 
     Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtStart.ForeColor = RGB(255, 255, 255) 
     Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtStart = "Start Forms" 

    ElseIf Forms!tblEnrolments!tblEnrolments_Jobs_sub!Start = 0 Then 

     Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtStart.BackColor = RGB(216, 216, 216) 
     Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtStart.ForeColor = RGB(166, 166, 166) 
     Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtStart = "None" 

    End If 

    If Forms!tblEnrolments!tblEnrolments_Jobs_sub!End = 1 Then 

     Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtEnd.BackColor = RGB(8, 164, 71) 
     Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtEnd.ForeColor = RGB(255, 255, 255) 
     Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtEnd = "End Forms" 

    ElseIf Forms!tblEnrolments!tblEnrolments_Jobs_sub!End = 0 Then 

     Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtEnd.BackColor = RGB(216, 216, 216) 
     Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtEnd.ForeColor = RGB(166, 166, 166) 
     Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtEnd = "None" 

    End If 

End Sub 

Private Sub Form_Activate() 

    ApplyFormat 

End Sub 

Private Sub Form_Current() 

    ApplyFormat 

End Sub 

所以我有一個公共子叫applyFormat的,看起來在綁定的文本框的數據,然後應用格式(改變文本框的背景顏色,字體顏色和文本數據) 。然後從Current事件中調用此函數(所以格式在加載記錄時應用)和Activate事件(因爲主表單將在打開時打開其他表單並在其他表單關閉時再次獲得焦點)。

不幸的是,子窗體中記錄1下方的記錄沒有根據其記錄中的數據進行格式化;他們只是簡單地複製第一條記錄中應用的格式。

例如:

Add Job Subform - formats not being applied correctly below record 1

這裏EnrolID 「1」 具有兩個連接的作業子窗體表示。第一條記錄按照上面的代碼格式化爲正確的,即綁定的「開始」文本框爲1,因此它旁邊的未綁定文本框被格式化爲藍色,帶有白色文本和字符串「開始表單」。

但是,在第二個記錄中,「開始」文本框爲0,應將其旁邊的未綁定文本框格式化爲灰色並帶有字符串「無」。但正如你所看到的,它只是複製第一條記錄的格式。此外,綁定文本框「結束」的值爲1,這應該使其旁邊的未綁定文本框以白色文本和字符串「結束窗體」呈現綠色。

是否有可能通過VBA達到我要去的效果?我不認爲我可以使用條件格式,因爲我希望未綁定的文本框顯示數據,例如「啓動窗體」和「結束窗體」,具體取決於它們的綁定文本框對應項。

回答

9

您不能使用未綁定的字段:連續表單中的未綁定字段始終在所有行中都有相同的格式。這是一個不幸的侷限。

幸運的是,還有另一種選擇:您可以製作一個綁定的字段,其​​中ControlSource將調用用戶定義的函數。例如,在Form desginer中,創建一個文本框並將其「控件源」屬性設置爲= Iif([Start] = 1, "Start Forms", "None")(包括開始時的=標誌)。格式化必須通過條件格式來完成。

如果您需要更復雜的邏輯來確定要顯示的文本,您可以將控制源設置爲= myCustomFunction([any], [dbfields], [I], [need]),並讓VBA代碼返回要顯示的文本。