DMin 不会阅读第一列

DMin Won't Read First Column

我在 Access 2010 中有一个 Sub,它应该在三列之间提取最低值。问题是它似乎没有在阅读第一列。我已经检查拼写一千次了,我不知道还有什么可能是错误的。任何建议将不胜感激。

Private Sub UpdatePriority_Click()

Const Superior As Long = 9999

Dim MinGeoPri As Variant
Dim MinStrPri As Variant
Dim MinSOPri As Variant

MinGeoPri = Nz(DMin("[GeoPri]", "[Projects]", "Projects.ProjNo = Activity.ProjNo"), Superior)
MinStrPri = Nz(DMin("[StrPri]", "[Projects]", "Projects.ProjNo = Activity.ProjNo"), Superior)
MinSOPri = Nz(DMin("[SOPri]", "[Projects]", "Projects.ProjNo = Activity.ProjNo"), Superior)

Overall_Priority.Requery

Overall_Priority = IIf(((IIf([MinStrPri] < [MinGeoPri], [MinStrPri], [MinGeoPri]))) < [MinSOPri], ((IIf([MinStrPri] < [MinGeoPri], [MinStrPri], [MinGeoPri]))), [MinSOPri])

End Sub

您的代码存在几个问题。

1) 我不知道 Activity.ProjNo 的来源,但 DMin 调用应该是:

DMin("[GeoPri]", "[Projects]", "Projects.ProjNo = " & Activity.ProjNo)

使用 WHERE 字符串之外的参数。

2) 如果您随后设置相同的(字段?变量?),Overall_Priority.Requery 应该做什么?

3) 你的 IIf 语句是一场噩梦,我很确定括号有问题。 :)
好多了:使用此处找到的 VBA Min() 函数:http://www.mrexcel.com/forum/excel-questions/132404-max-min-visual-basic-applications.html

Public Function Min(ParamArray values() As Variant) As Variant

   Dim minValue As Variant, Value As Variant
   minValue = values(0)
   For Each Value In values
       If Value < minValue Then minValue = Value
   Next
   Min = minValue

End Function

ParamArray 非常适合这类事情(未知数量的参数)。

然后:

Overall_Priority = Min(MinGeoPri, MinStrPri, MinSOPri)

编辑:测试函数

Public Sub MyMinTest()

    Debug.Print Min(47, 11, 88)

End Sub