【发布时间】:2017-02-20 04:40:36
【问题描述】:
我对 vba 有点陌生,我正在尝试创建一种比 access 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
对不起,如果这有点长,我只是无能为力......
另外,对于任何错别字,我们深表歉意。我不得不在另一台机器上重新输入。
【问题讨论】: