我對vba有點新,我試圖創建一個稍微複雜一點的條件格式,而不是2013年通過條件格式菜單允許的條件格式。我有一個22個目標日期和實際日期字段的表單。對於每一對我需要:更改全局子訪問表格上的格式
如果未來的目標日期超過7天,爲它着綠色。 如果未來或今天的目標日期少於7天,則將其着色爲黃色 如果過去的目標日期爲其着色,則爲其着色。
除非它被完成的實際日期,在這種情況下:
如果實際日期是在目標日期之前,顏色首尾綠色 如果實際日期是目標日期後,顏色都日期紅。
因爲我必須對錶單加載和任何日期字段的更改(目標日期是計算的,但如果其他數據在表單中更改時會更改),我想寫一個公共子將表單名稱,目標日期和實際日期作爲變量。我能夠使用'Me.txtbox'對每個框進行編碼以在本地表單模塊上執行此操作。但是,當我嘗試引用公共子表單中的表單和文本框時,似乎我沒有正確引用文本表格上的框。我試過3種或4種不同的做這個(字符串,textbox.name等)的方式,我覺得我很近,但是......根據需要在窗體模塊中,工程
代碼
Private Sub txtFreqReqDate_AfterUpdate()
If Me.txtFreqReqDate <= Me.txtFreqReq Then
Me.txtFreqReq.Format = "mm/dd/yyyy[green]"
Me.txtFreqReqDate.Format = "mm/dd/yyyy[green]"
ElseIf Me.txtFreqReqDate > Me.txtFreqReq Then
Me.txtFreqReq.Format = "mm/dd/yyyy[red]"
Me.txtFreqReqDate.Format = "mm/dd/yyyy[red]"
ElseIf IsNull(Me.txtFreReqDate) = True Then
If Me.txtFreqReq < Now() Then
Me.txtFreqReq.Format = "mm/dd/yyyy[red]"
ElseIf Me.txtFreqReq >= (Now()+7) Then
Me.txtFreqReq.Format = "mm/dd/yyyy[yellow]"
ElseIf Me.txtFreqReq > (Now()+7) Then
Me.txtFreqReq.Format = "mm/dd/yyyy[green]"
Else
Me.txtFreqReq.Format = "mm/dd/yyyy[black]"
End If
Else
Exit Sub
End If
End Sub
也許不是最漂亮的,但我總是打開建設性的批評。我必須爲每一對寫這22次以上,每次更改文本框的名稱。我想寫一個公共子,只是需要的文本框的名字,但我似乎無法找到正確的組合:
Private Sub txtFreqReqDate_AfterUpdate()
FormatBoxes(Me, me.txtFreqReqDate, me.txtFreqReq)
End Sub
而在另一個模塊:
Public Sub FormatBoxes(CurrentForm As Form, txtActual as Textbox, txtTarget as Textbox)
frmName = CurrentForm.name
tbActual = txtActual.Name
tbTarget = txtTarget.Name
If frmName.tbActual <= frmName.tbTarget Then
frmName.tbTarget.Format = "mm/dd/yyyy[green]"
frmName.tbActual.Format = "mm/dd/yyyy[green]"
ElseIf frmName.tbActual > frmName.tbTarget Then
frmName.tbTarget.Format = "mm/dd/yyyy[red]"
frmName.tbActual.Format = "mm/dd/yyyy[red]"
ElseIf IsNull(frmName.tbActual) = True Then
If frmName.tbTarget < Now() Then
frmName.tbTarget.Format = "mm/dd/yyyy[red]"
ElseIf frmName.tbTarget >= (Now()+7) Then
frmName.tbTarget.Format = "mm/dd/yyyy[yellow]"
ElseIf frmName.tbTarget > (Now()+7) Then
frmName.tbTarget.Format = "mm/dd/yyyy[green]"
Else
frmName.tbTarget.Format = "mm/dd/yyyy[black]"
End If
Else
Exit Sub
End If
End Sub
很抱歉,如果這是有點長,我只是在我的機智的結尾...
此外,道歉的任何錯別字。我不得不從另一臺機器重新輸入。
的事實。我猜對錶單的引用必須包含在文本框對象中......? –
@RickDawson,正確的文本框objet知道它已經是完整的層次結構。 – Brad