我在Access中创建了一个表单,该表单使用交叉表查询作为其数据源 查询的列标题是1,2,3,4和5,表示周数。 值显示 3/3 = 100.00%或 0/13 = 0.00%或 3/14 = 21.00%等项目。
我已将条件格式添加到表单上的文本框中
当百分比为100时,Expression Is Right([2],7)="100.00%"
可以工作并以粗体显示红色
Expression is Val(Right([2],7))=100
也有效 - 将文本值转换为数值。
我遇到的问题是我并不总是在寻找100% - 这取决于表格中的值。我试图做的是
Val(Right([2],7))=(SELECT ParamValue*100 FROM tbl_System WHERE Param='SampleSize')
- 这不起作用。 也不是:
Eval(Val(Right([2],7))=(SELECT ParamValue*100 FROM tbl_System WHERE Param='SampleSize'))
Val(Right([2],7))=EVAL(SELECT ParamValue*100 FROM tbl_System WHERE Param='SampleSize')
Val(Right([2],7))=DLookUp("ParamValue","tbl_System","Param= 'SampleSize'")*100
Val(Right([2],7))=Eval(DLookUp("ParamValue","tbl_System","Param= 'SampleSize'")*100)
交叉表查询的SQL是:
TRANSFORM NZ(Sum(Abs([Include])),0) & "/" & NZ(Count(*),0) & " = " &
FormatPercent(NZ(Round(Sum(Abs(Include))/Count(*),2),0),2)
SELECT tbl_TMP_PrimaryDataSelection.TeamMember
FROM tbl_TMP_PrimaryDataSelection
GROUP BY tbl_TMP_PrimaryDataSelection.TeamMember
PIVOT tbl_TMP_PrimaryDataSelection.WeekNum In (1,2,3,4,5)
答案 0 :(得分:0)
我认为你不能在那里使用某个功能,无论是系统还是用户定义的功能。
但您可以在运行时动态定义FormatCondition,如下所示:
Dim txtFld As TextBox
Dim objFrc As FormatCondition
Dim strExpr As String
Set txtFld = Me!myTextBox
' Remove existing FormatConditions
txtFld.FormatConditions.Delete
' The dynamic expression
strExpr = "Val(Right([2],7))=" & DLookUp("ParamValue","tbl_System","Param='SampleSize'")*100
' Assign a new FormatCondition to text box
Set objFrc = txtFld.FormatConditions.Add(acExpression, , strExpr)
' Set the format
objFrc.ForeColor = &HFF0000
此示例只是删除并重新创建所有FormatConditions。如果您有一定数量的条件,您也可以使用FormatCondition.Modify
方法(请参阅在线帮助)。
修改强>
我使用的最终代码在Form_Load
事件上执行,并为每周五个文本框添加一个格式:
Private Sub Form_Load()
Dim aTxtBox(1 To 5) As TextBox
Dim x As Long
Dim oFrc As FormatCondition
Dim sExpr As String
With Me
Set aTxtBox(1) = .Wk1
Set aTxtBox(2) = .Wk2
Set aTxtBox(3) = .Wk3
Set aTxtBox(4) = .Wk4
Set aTxtBox(5) = .Wk5
For x = 1 To 5
aTxtBox(x).FormatConditions.Delete
sExpr = "Val(Right([" & x & "],7))>=" & DLookup("ParamValue", "tbl_System", "Param='SampleSize'") * 100
Set oFrc = aTxtBox(x).FormatConditions.Add(acExpression, , sExpr)
oFrc.ForeColor = RGB(255, 0, 0)
Next x
End With
End Sub
修改2
是的,在处理循环中的多个控件时,通过VBA定义FormatConditions特别有用。您也可以在设计视图中执行此操作并永久保存FormatConditions,只是为了避免逐个浏览FormatConditions对话框。或者,如果客户后来决定他更喜欢不同的颜色。 :)
注意:您可以在循环中使用Set aTxtBox(x) = Me("Wk" & x)
。但实际上你不需要多个TextBox变量,你可以简单地重复使用它。